(57)【要約】【課題】  従来、マスク化に伴う複雑な回路の追加が必要で、ゲート規模や演算量が増大し、回路の消費電力が増加するという問題があった。【解決手段】  本発明では、所定回数の繰り返し処理で構成される処理単位の初回は外部入力データを選択し以降の回の処理は内部入力データを選択する入力選択部と、関数処理部と、乱数生成部と、関数処理部の出力データと乱数生成部が生成する乱数データとの排他的論理和を求める第１の排他的論理和演算部と、第１の排他的論理和演算部の演算結果を保持するデータ保持部と、データ保持部の出力データと乱数生成部が生成する乱数データとの排他的論理和を求めて内部入力データとする第２の排他的論理和演算部と、処理単位毎の各部の処理タイミングを制御し、入力選択部から第２の排他的論理和演算部までの一連の処理を所定回数実行後の第２の排他的論理和演算部の演算結果を暗号データとして外部に出力する処理タイミングを制御する制御部とを設けた。【選択図】図１
2010245753.tif 000002
【特許請求の範囲】
【請求項１】
所定回数の繰り返し処理で構成される処理単位の初回は外部入力データを選択し以降の回の処理は内部入力データを選択する入力選択部と、
前記入力選択部が選択したデータに所定の関数処理を施して出力データを生成する関数処理部と、
前記関数処理部の出力データに等しいビット幅の乱数データを生成する乱数生成部と、
前記関数処理部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求める第１の排他的論理和演算部と、
前記第１の排他的論理和演算部の演算結果を保持するデータ保持部と、
前記データ保持部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求めて前記内部入力データとする第２の排他的論理和演算部と、
前記処理単位毎の各部の処理タイミングを制御し、前記入力選択部から前記第２の排他的論理和演算部までの一連の処理を所定回数実行後の前記第２の排他的論理和演算部の演算結果を暗号データとして外部に出力する処理タイミングを制御する制御部と
を備えたことを特徴とする暗号演算回路装置。
【請求項２】
請求項１に記載の暗号演算回路装置において、
前記制御部は、前記第１の排他的論理和演算部の演算結果を前記データ保持部に保持する処理タイミングの次の処理タイミングで前記第２の排他的論理和演算部の処理を実行する
ことを特徴とする暗号演算回路装置。
【請求項３】
請求項２に記載の暗号演算回路装置において、
前記制御部は、前記一連の処理の初期化ステップにおいて、前記乱数生成部が生成する乱数データを前記データ保持部に保持する処理を実行する
ことを特徴とする暗号演算回路装置。
【請求項４】
請求項２に記載の暗号演算回路装置において、
前記制御部は、前記一連の処理の初回処理ステップにおいて、前記第１の排他的論理和演算部の演算結果を前記データ保持部に保持する処理タイミングの次の処理タイミングで前記第２の排他的論理和演算部の処理を実行する
ことを特徴とする暗号演算回路装置。
【請求項５】
請求項２に記載の暗号演算回路装置において、
前記制御部は、前記一連の処理の最終処理ステップにおいて、前記第１の排他的論理和演算部の演算結果を前記データ保持部に保持する処理タイミングの次の処理タイミングで前記第２の排他的論理和演算部の処理を実行する
ことを特徴とする暗号演算回路装置。
【請求項６】
請求項１から５のいずれか一項に記載の暗号演算回路装置において、
前記乱数生成部が生成する乱数は、少なくとも処理単位毎に更新する擬似乱数または真性乱数であることを特徴とする暗号演算回路装置。
【請求項７】
所定回数の繰り返し処理で構成される処理単位の初回は外部入力データを選択し以降の回の処理は内部入力データを選択する入力選択部と、
前記入力選択部が選択したデータに所定の関数処理を施して出力データを生成する関数処理部と、
前記関数処理部の出力データに等しいビット幅の乱数データを生成する乱数生成部と、
前記関数処理部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求める第１の排他的論理和演算部と、
前記第１の排他的論理和演算部の演算結果または前記関数処理部の出力データを保持するデータ保持部と、
前記データ保持部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求める第２の排他的論理和演算部と、
前記処理単位毎の各部の処理タイミングを制御し、初回の処理単位では前記第１の排他的論理和演算部および前記第２の排他的論理和演算部の演算を実行し、２回目以降の処理単位では前記第１の排他的論理和演算部および前記第２の排他的論理和演算部の演算を処理毎に交互に実行し、前記入力選択部から前記第２の排他的論理和演算部までの一連の処理を前記処理単位として所定回数実行後の前記第２の排他的論理和演算部の演算結果または前記データ保持部の出力データを暗号データとして外部に出力する処理タイミングを制御する制御部と
を備えたことを特徴とする暗号演算回路装置。
【請求項８】
請求項７に記載の暗号演算回路装置において、
前記乱数生成部が生成する乱数は、少なくとも２回の処理単位に１度の頻度で更新する擬似乱数または真性乱数であることを特徴とする暗号演算回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号アルゴリズムの処理を行う暗号演算回路装置に関する。特に暗号演算回路での演算中間値の物理的変化量を解析して暗号を解読する暗号解析攻撃を回避する技術に関する。
【背景技術】
【０００２】
近年、セキュリティ機能を備えたＩＣカードや携帯端末が広く利用されている。このようなセキュリティを要する装置は何らかの暗号アルゴリズムが用いられており、第三者に情報が漏洩しないような仕組みになっている。ところが最近では、このようなＩＣカードや携帯端末などに実装された暗号アルゴリズムに対するサイドチャネル攻撃が大きな脅威となっている。サイドチャネル攻撃とは、本来、第三者が取得することを想定しない暗号演算回路が動作する際の消費電力や漏洩電磁波或いは演算時間などの漏洩情報を手掛りにして、秘密情報を不正に入手しようとする攻撃のことである。このようなサイドチャネル攻撃の中でも、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読する手法は、差分電力解析（ＤＰＡ：Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ）攻撃と呼ばれ大きな脅威となっている。
【０００３】
このようなセキュリティ装置への暗号アルゴリズムの実装方法には、ＣＰＵ（中央演算ユニット）によるソフトウェア実装とワイヤードロジックなどによるハードウェア実装の２つの方法がある。ＩＣカードや簡易な携帯端末などへの暗号アルゴリズムの実装は、処理速度の問題や低消費電力の要求などからハードウェア実装が採用される場合が多い。
【０００４】
ここで、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）に代表されるブロック暗号アルゴリズムをハードウェア実装する場合の例について説明する。図１０はラウンド関数を演算する暗号演算回路装置９００の構成を示した図で、攪拌部９０１と鍵スケジューリング部９０２とに分けて描いてある。
【０００５】
図１０において、攪拌部９０１は、外部から入力する平文（または暗号文）とラウンド処理後のデータとを選択するセレクタ９０３と、所定の処理関数でラウンド処理を行う組合せ回路９０４と、組合せ回路９０４の出力データを一時的に保持するレジスタ９０５と、レジスタ９０５の出力データまたはＡｌｌ＝０（全て０のデータ）を選択して外部に出力するセレクタ９０６とで構成される。攪拌部９０１は、平文（または暗号文）を処理対象データとして入力し、鍵スケジューリング部９０２が秘密鍵から作成する副鍵（ラウンド鍵）を用いて所定回数のラウンド処理を行って暗号化し、暗号文（または平文）を処理済データとして出力する。
【０００６】
攪拌部９０１において、１ラウンド処理は１クロックで行われ、セレクタ９０３，組合せ回路９０４およびレジスタ９０５の一巡するラウンド処理をクロックに同期して所定回数繰り返す。つまり、組合せ回路９０４のラウンド処理を基本とする攪拌部９０１では、鍵スケジューリング部９０２が出力する副鍵の値と１クロック前のラウンド処理の中間値とを用いて新たなラウンド処理を行い、その演算結果を新たな中間値としてレジスタに格納する処理を繰り返す。そして、クロック毎にラウンド処理関数の演算結果が中間値としてレジスタ９０５に保持され、必要なラウンド回数分だけクロックが進んだ後、レジスタ９０５に現れた値が最終演算結果となり、この値を暗号文（暗号化の場合）または平文（復号化の場合）として暗号演算回路装置９００の外部に出力する。このように、途中のラウンド処理の演算中間値など不必要な情報を外部に出力することを回避するため、全ラウンド処理を終了した最終結果のみが出力されるようになっている。
【０００７】
一方、鍵スケジューリング部９０２は、外部から入力する秘密鍵と鍵スケジューリング処理後のデータとを選択するセレクタ９０７と、セレクタ９０７の出力データを一時的に保持するレジスタ９０８と、所定の処理関数で鍵スケジューリング処理を行う組合せ回路９０９とで構成される。鍵スケジューリング部９０２は、暗号演算回路装置９００の外部から与えられる秘密鍵から各ラウンド処理に必要な副鍵を生成する。
【０００８】
また、制御部９５０は、セレクタ９０３，レジスタ９０５，セレクタ９０６，セレクタ９０７およびレジスタ９０８にクロック，制御信号ａ，制御信号ｂおよび制御信号ｃを出力して各部の処理タイミングを制御する。
【０００９】
ここで、秘密鍵の値は第三者に知られないように安全に管理する必要があるが、何らかの方法により各ラウンド処理で使用する副鍵の値が暴かれると、鍵スケジューリング部９０２の処理を逆算することにより秘密鍵の値が第三者に知られてしまうという問題がある。従って、暗号演算回路の設計においては、差分電力解析攻撃などにより副鍵を推定されないように考慮する必要がある。
【００１０】
差分電力解析攻撃の中でも、非特許文献１に示すＣＰＡ（Ｃｏｒｒｅｌａｔｉｏｎ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ）攻撃は、演算中間値を保持するレジスタ値の変化に着目した攻撃法であり、特にハードウェア実装されたブロック暗号アルゴリズムに対して非常に有効な攻撃法として知られている。以下、ＡＥＳアルゴリズムに対するＣＰＡ攻撃の概要について述べる（非特許文献１参照）。
【００１１】
先に説明した図１０のブロック暗号アルゴリズムのハードウェア構成を示す暗号演算回路装置９００の攪拌部９０１において、１クロック後のレジスタ９０５の値の変化量（ハミング距離）が大きければ、その時点での消費電力量も大きい筈であると考えることができる。また、レジスタ９０５の値が変化すれば、それに応じてラウンド処理を行う組合せ回路９０４を構成する論理ゲートの入力値も変化するので論理ゲートの状態遷移が行われる。この結果、レジスタ９０５のハミング距離とその時点での消費電力量には相関が見られる筈である。ここで、ラウンド処理の途中でレジスタ９０５の中間値が外部に出力されないように制御されている場合、レジスタ９０５のハミング距離を計算できる可能性があるのは、外部からの入力を伴う初期ラウンドと外部への出力を伴う最終ラウンドの２箇所である。ここでは、最終ラウンドが攻撃ポイントとなるケースについて説明する（非特許文献１参照）。
【００１２】
最終ラウンドの１クロック前のレジスタ値は最終ラウンドへの副鍵値を仮定すれば、ＡＥＳの最終ラウンド処理を逆に辿って計算することが可能である。例えば図１１に示すように、最終ラウンド処理はＳｕｂＢｙｔｅｓ−＞ＳｈｉｆｔＲｏｗ−＞ＡｄｄＫｅｙの処理で、１ｂｙｔｅ単位の処理に閉じているので、副鍵の推定対象としてｂｙｔｅ値を０ｘ００から０ｘｆｆの２５６通りの値のいずれか１つに決めれば、１クロック前の処理ｂｙｔｅ値を計算できる。図１１において、１クロック前のレジスタ値をｓｉ，ｊ、暗号文出力をｃｉ，ｊ、副鍵をｋｉ，ｊとした場合（尚、ｉ，ｊは整数で４×４の１６ｂｙｔｅの座標位置を示す）、例えば図１１に示すように、１クロック前の処理ｂｙｔｅ値ｓ２，０は、ｓ２，０＝ｃ２，２（＋）ｋ２，２のように計算できる（ここで（＋）はＥＸＯＲ演算を示す）。従って、座標（２，０）位置の１ｂｙｔｅの成分に関する最終ラウンドの１クロック前後のハミング距離はｓ２，０（＋）ｃ２，０となり、逆算するとｃ２，０（＋）ｃ２，２（＋）ｋ２，２のように計算できる。ここで、先に説明したように、ｋ２，２は０ｘ００から０ｘｆｆのいずれかの値を取り得るが、２５６通りの値のいずれか１つに決めるだけで、１クロック前の処理ｂｙｔｅ値を計算できる。尚、残りの座標位置の１５ｂｙｔｅの成分についても同様である。
【００１３】
ここで、１≦ｉ≦Ｎ（Ｎは自然数）なる異なるＮ個の平文（ｃｉ）について演算を行い、副鍵ｋの値から定まるハミング距離をｈｉ（ｋ）とし、消費電力との相関をピアソンの相関係数として求める。また、ｃｉに対する消費電力をｐｉ（ｔ）とすると、
ｈｉ（ｋ）とｐｉ（ｔ）のピアソン相関係数Ｃｏｒｒ（ｈｉ（ｋ），ｐｉ（ｔ））は、
【００１４】
【数１】
2010245753.tif 000003
で定義される。
【００１５】
【数２】
2010245753.tif 000004
このような相関係数を副鍵が取り得る０ｘ００から０ｘｆｆの全ての値について計算する。
【００１６】
上記で説明したように、ハミング距離と消費電力は正の相関を持つので、相関係数が最大となる副鍵の値が真の副鍵となる。このようにして１６ｂｙｔｅ全ての副鍵の値を推定すれば、鍵スケジューリング処理部９０２の処理を逆算することにより秘密鍵の値を不正に取得することができる。
【００１７】
このようなＣＰＡ攻撃に代表される差分電力解析攻撃に対する従来の対策は、乱数を用いて演算の中間値をマスク化する方法が知られている（例えば非特許文献２参照）。同文献では、ＡＥＳアルゴリズムのキー関数であるＳｕｂＢｙｔｅｓ関数のマスク化について述べられているが、ＭｉｘＣｏｌｕｍｎ関数などの他関数についてもマスク化を施し、ラウンド処理途中のレジスタに格納される中間値を含めて、演算最終結果である暗号文を除く全ての中間値が乱数によってマスク化できるので、本来のラウンド処理結果をマスク化した値がレジスタに格納される。
【００１８】
図１２は、ＡＥＳのラウンド処理関数（ＳｕｂＢｙｔｅｓ−＞ＳｈｉｆｔＲｏｗｓ−＞ＭｉｘＣｏｌｕｍｎｓ−＞ＡｄｄＲｏｕｎｄＫｅｙ）を乱数によりマスク処理する場合の構成を示す（例えば非特許文献２参照）。図１２において、ＳｈｉｆｔはＳｈｉｆｔＲｏｗｓの略記、ＭｉｘはＭｉｘＣｏｌｕｍｎｓの略記、ＡｄｄはＡｄｄＲｏｕｎｄＫｅｙの略記をそれぞれ示す。また、ｆは同型写像、ｇは同型写像の逆写像とＡＥＳアフィン変換の線形変換部との合成写像をそれぞれ示す。ＳｕｂＢｙｔｅｓの中のガロア体逆元算ｘ−１は、非特許文献２のＦｉｇ．８に記載の回路を示し、ｒａ，ｒｔｍｐ１，ｒｔｍｐ２，ｒｂはそれぞれＭ，Ｚ，Ｗ，Ｆに対応するマスク用乱数である。ここで、ＳｈｉｆｔＲｏｗｓは単なるＢｙｔｅシフト演算であり、またＡｄｄＲｏｕｎｄＫｅｙはＥＸＯＲ演算であるため、一般的な関数をそのまま用いることができる。また、ＭｉｘＣｏｌｕｍｎは線形関数であり、ＭｉｘＣｏｌｕｍｎ（１）で処理結果に対してＭｉｘＣｏｌｕｍｎ関数処理した値とＭｉｘＣｏｌｕｍｎ（２）で乱数に対して同様のＭｉｘＣｏｌｕｍｎ関数処理した値とのＥＸＯＲ演算を行うことによってＭｉｘＣｏｌｕｍｎ（１）の入力の乱数成分をキャンセルできる。ここで、図１０で説明したようなマスク処理を行わない通常のラウンド処理関数と比較すると、乱数とのＥＸＯＲ演算の他に乱数値の変換のためのｆ，ｇの関数やＭｉｘＣｏｌｕｍｎ関数などが追加されている。この結果、通常のラウンド処理の演算結果の値と乱数値とがＥＸＯＲ演算された値がレジスタに格納されるので、乱数のマスク効果によってラウンド処理前後の値の差分量からハミング距離を計算することができない。このため、差分量と正しい副鍵値との相関が小さくなって相関係数のピークが出現しなくなり、ＣＰＡ攻撃に代表される差分電力解析攻撃を防御することができる。
【００１９】
このようにして、従来技術では、図１２に示すような複雑な暗号演算回路によって差分電力解析攻撃を防御することが行われていた。尚、上記の暗号演算回路装置９００は、ブロック暗号アルゴリズムを用いる従来例であったが、図１３に示すような従来の公開鍵暗号アルゴリズムを用いる暗号演算回路装置９６０に対しても同様に考えることができる。図１３の暗号演算回路装置９６０は、公開鍵暗号の演算で利用される冪乗剰余演算や楕円スカラー倍演算を利用する暗号演算回路で構成され、攪拌部９６１と、秘密鍵（冪乗指数またはスカラー倍指数）による指数展開部９６２と、制御部９７０とで構成される。
【００２０】
図１３において、攪拌部９６１は、所定の冪乗剰余演算や楕円スカラー倍演算を行う組合せ回路９６３と、組合せ回路９６３の出力データを一時的に保持するレジスタ９６４と、レジスタ９６４の出力データまたはＡｌｌ＝０（全て０のデータ）を選択して外部に出力するセレクタ９６５とで構成される。指数展開部９６２は、秘密鍵である指数の値を例えばバイナリ値に展開し、展開したバイナリ値の上位ビットまたは下位ビットから順に組合せ回路９６３に出力する。組合せ回路９６３は、外部から入力する平文（または暗号文）に対して指数展開部９６２が展開したバイナリ値を用いて、冪乗剰余演算の場合は乗算または自乗算を行い、或いは楕円スカラー倍算の場合は楕円加算または楕円２倍算を行う。演算結果はレジスタ９６４に１クロック期間保持されて、次のラウンドで組合せ回路９６３にフィードバックされる。そして、クロック毎に同様のラウンド処理を行い、指数展開部９６２が出力する指数の展開ビット長分だけ繰り返し実行後、レジスタ９６４に現れた値が最終演算結果となり、この値を暗号文（暗号化の場合）または平文（復号化の場合）として暗号演算回路装置９６０の外部に出力する。尚、制御部９７０は、セレクタ９６５にクロックおよび制御信号ｄを出力して各部の処理タイミングを制御する。ここで、図１３では、指数展開部９６２でバイナリ展開した指数１ビット分の演算を１クロックで処理する場合を示している。
【００２１】
ところが、図１０に示した暗号演算回路装置９００と同様に、図１３に示した暗号演算回路装置９６０においても、冪乗剰余演算や楕円スカラー倍に対する展開した指数のビット毎の処理でのレジスタ中間値のハミング距離が攻撃の手掛かりとして利用されるＣＰＡ攻撃を防御することができない。
【先行技術文献】
【非特許文献】
【００２２】
【非特許文献１】菅原，本間，青木，佐藤，“サイドチャネル攻撃標準評価ＦＰＧＡボードを用いた暗号ハードウェアに対する電力解析実験，”マルチメディア，分散，協調とモバイル（ＤＩＣＯＭＯ２００７）シンポジウム，７Ｄ−５，２００７．
【非特許文献２】Ｅ．Ｔｒｉｃｈｉｎａ，“Ｓｍａｌｌ  Ｓｉｚｅ，Ｌｏｗ  Ｐｏｗｅｒ  Ｓｉｄｅ  Ｃｈａｎｎｅｌ−Ｉｍｍｕｎｅ  ＡＥＳ  Ｃｏ−ｐｒｏｃｅｓｓｏｒ  Ｄｅｓｉｇｎ  ａｎｄ  Ｓｙｎｔｈｅｓｉｓ  Ｒｅｓｕｌｔｓ”，ＡＥＳ２００４．
【発明の概要】
【発明が解決しようとする課題】
【００２３】
先に説明したように、従来技術によるＣＰＡ攻撃の防御対策は、暗号演算回路の構成が複雑で処理量が多く、回路規模やコスト的な問題があった。例えば、非特許文献２に示された防御対策は、ＳｕｂＢｙｔｅｓ部のガロア体逆元演算途中の中間値をすべてマスク化するＣＰＡ攻撃対策を行っている。このため、ＳｕｂＢｙｔｅｓ部だけでなく、ＭｉｘＣｏｌｕｍｎ部，ＡｄｄＫｅｙ部などラウンド処理全体の組合せ回路をマスク化する必要があるので、マスク化に必要な乱数をラウンド処理関数を構成する論理ゲート毎に用意しなければならない。この結果、マスク化に伴う多数のＥＸＯＲ回路や予備回路の追加などが必要となり、ラウンド処理関数の回路が複雑化してゲート規模が増大し、さらに演算量も増加するため回路の消費電力が増大するという問題が生じる。
【００２４】
上記課題に鑑み、本発明の目的は、従来のマスク化を施さない暗号化処理関数のブロックをそのまま流用しながら乱数によるマスク化を実現可能とし、新たなＥＸＯＲゲートや予備回路の新規実装をできるだけ少なくしてゲート回路規模の増大や消費電力の増加を抑えながらＣＰＡ攻撃を回避することが可能な暗号演算回路装置を提供することである。
【課題を解決するための手段】
【００２５】
本発明の請求項１に係る暗号演算回路装置は、所定回数の繰り返し処理で構成される処理単位の初回は外部入力データを選択し以降の回の処理は内部入力データを選択する入力選択部と、前記入力選択部が選択したデータに所定の関数処理を施して出力データを生成する関数処理部と、前記関数処理部の出力データに等しいビット幅の乱数データを生成する乱数生成部と、前記関数処理部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求める第１の排他的論理和演算部と、前記第１の排他的論理和演算部の演算結果を保持するデータ保持部と、前記データ保持部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求めて前記内部入力データとする第２の排他的論理和演算部と、前記処理単位毎の各部の処理タイミングを制御し、前記入力選択部から前記第２の排他的論理和演算部までの一連の処理を所定回数実行後の前記第２の排他的論理和演算部の演算結果を暗号データとして外部に出力する処理タイミングを制御する制御部とを備えたことを特徴とする。
【００２６】
請求項１では、例えば処理タイミング（制御部）の１クロック毎に暗号演算の処理を繰り返し実行する組合せ回路からなる処理関数（関数処理部）の演算結果を乱数（乱数生成部）でマスク化するＥｘＯＲ（第１の排他的論理和演算部）と、マスク化された演算中間値を保持するレジスタ（データ保持部）と、マスク化された値を同じ乱数でアンマスク化するＥｘＯＲ（第２の排他的論理和演算部）を介して再び関数処理部に入力してクロック信号（処理単位）の進行により所定回数分の処理を繰り返し実行する暗号演算回路装置である。レジスタに保持する際に乱数によるマスク化を行うので、消費電力量と演算中間値との相関がなくなり、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読するＣＰＡ攻撃から防御することができる。しかも、関数処理部に入力する時は、アンマスク化した本来の関数処理データを入力するので、従来の回路構成を流用することができる。
【００２７】
また、本発明の請求項２に係る暗号演算回路装置は、請求項１に記載の暗号演算回路装置において、前記制御部は、前記第１の排他的論理和演算部の演算結果を前記データ保持部に保持する処理タイミングの次の処理タイミングで前記第２の排他的論理和演算部の処理を実行することを特徴とする。
【００２８】
請求項２では、例えば処理関数（関数処理部）の演算結果をＥｘＯＲ（第１の排他的論理和演算部）でマスク化してレジスタ（データ保持部）に保持する処理タイミングの次の処理タイミングでＥｘＯＲ（第２の排他的論理和演算部）はマスク化された値を同じ乱数でアンマスク化する処理を行うことにより、従来の回路構成を流用しながら確実に関数処理部の演算中間値をマスク化することができる。
【００２９】
また、本発明の請求項３に係る暗号演算回路装置は、請求項２に記載の暗号演算回路装置において、前記制御部は、前記一連の処理の初期化ステップにおいて、前記乱数生成部が生成する乱数データを前記データ保持部に保持する処理を実行することを特徴とする。これにより、初期化時の処理が簡略化できる。
【００３０】
また、本発明の請求項４に係る暗号演算回路装置は、請求項２に記載の暗号演算回路装置において、前記制御部は、前記一連の処理の初回処理ステップにおいて、前記第１の排他的論理和演算部の演算結果を前記データ保持部に保持する処理タイミングの次の処理タイミングで前記第２の排他的論理和演算部の処理を実行することを特徴とする。
【００３１】
請求項４では、例えば一番最初のタイミングで関数処理部が生成する出力データを乱数でマスク化してレジスタ（データ保持部）に格納するので、ＣＰＡ攻撃を受けやすい初期ラウンドでの防御が可能になる。
【００３２】
また、本発明の請求項５に係る暗号演算回路装置は、請求項２に記載の暗号演算回路装置において、前記制御部は、前記一連の処理の最終処理ステップにおいて、前記第１の排他的論理和演算部の演算結果を前記データ保持部に保持する処理タイミングの次の処理タイミングで前記第２の排他的論理和演算部の処理を実行することを特徴とする。
【００３３】
請求項５では、例えば一番最後のタイミングで関数処理部が生成する出力データを乱数でマスク化してレジスタ（データ保持部）に格納するので、ＣＰＡ攻撃を受けやすい最終ラウンドでの防御が可能になる。
【００３４】
また、本発明の請求項６に係る暗号演算回路装置は、請求項１から５のいずれか一項に記載の暗号演算回路装置において、前記乱数生成部が生成する乱数は、少なくとも処理単位毎に更新する擬似乱数または真性乱数であることを特徴とする。
【００３５】
請求項６では、擬似乱数または真性乱数によってレジスタに保持する演算中間値と消費電力量との相関をなくすことができ、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読するＣＰＡ攻撃から防御することができる。
【００３６】
また、本発明の請求項７に係る暗号演算回路装置は、所定回数の繰り返し処理で構成される処理単位の初回は外部入力データを選択し以降の回の処理は内部入力データを選択する入力選択部と、前記入力選択部が選択したデータに所定の関数処理を施して出力データを生成する関数処理部と、前記関数処理部の出力データに等しいビット幅の乱数データを生成する乱数生成部と、前記関数処理部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求める第１の排他的論理和演算部と、前記第１の排他的論理和演算部の演算結果または前記関数処理部の出力データを保持するデータ保持部と、前記データ保持部の出力データと前記乱数生成部が生成する乱数データとの排他的論理和を求める第２の排他的論理和演算部と、前記処理単位毎の各部の処理タイミングを制御し、初回の処理単位では前記第１の排他的論理和演算部および前記第２の排他的論理和演算部の演算を実行し、２回目以降の処理単位では前記第１の排他的論理和演算部および前記第２の排他的論理和演算部の演算を処理毎に交互に実行し、前記入力選択部から前記第２の排他的論理和演算部までの一連の処理を前記処理単位として所定回数実行後の前記第２の排他的論理和演算部の演算結果または前記データ保持部の出力データを暗号データとして外部に出力する処理タイミングを制御する制御部とを備えたことを特徴とする。
【００３７】
請求項７では、例えば処理タイミング（制御部）の１クロック毎に暗号演算の処理を繰り返し実行する組合せ回路からなる処理関数（関数処理部）の演算結果を乱数（乱数生成部）でマスク化するＥｘＯＲ（第１の排他的論理和演算部）と、マスク化された演算中間値を保持するレジスタ（データ保持部）と、マスク化された値を同じ乱数でアンマスク化するＥｘＯＲ（第２の排他的論理和演算部）を介して再び関数処理部に入力してクロック信号（処理単位）の進行により所定回数分の処理を繰り返し実行する暗号演算回路装置で、初回はマスク化とアンマスク化の処理を実行し、２回目以降はマスク化とアンマスク化の処理を行う処理単位とマスク化とアンマスク化の処理を行わない処理単位とを交互に実行するようになっている。このように、交互に実行することによりレジスタ中間値のハミング距離を計算することが困難になり、ＣＰＡ攻撃から防御することができる。
【００３８】
また、本発明の請求項８に係る暗号演算回路装置は、請求項７に記載の暗号演算回路装置において、前記乱数生成部が生成する乱数は、少なくとも２回の処理単位に１度の頻度で更新する擬似乱数または真性乱数であることを特徴とする。
【００３９】
請求項８では、擬似乱数または真性乱数によってレジスタに保持する演算中間値と消費電力量との相関をなくすことができ、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読するＣＰＡ攻撃から防御することができる。
【発明の効果】
【００４０】
本発明に係る暗号演算回路装置は、出力データに等しいビット幅の乱数データを生成して、関数処理部の出力データまたは乱数データを２つのデータ保持部に格納することにより、消費電力量と演算結果のハミング距離との相関がなくなり、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読するＣＰＡ攻撃から防御することができる。特に、従来のマスク化を施さない暗号化処理関数のブロックをそのまま流用しながら乱数によるマスク化を実現可能とし、新たなＥＸＯＲゲートや予備回路の新規実装をできるだけ少なくしてゲート回路規模の増大や消費電力の増加を抑えながらＣＰＡ攻撃を回避することができる。
【図面の簡単な説明】
【００４１】
【図１】第１の実施形態に係るブロック暗号演算回路装置１００の構成例を示す説明図である。
【図２】第１の実施形態に係るブロック暗号演算回路装置１００のタイミングチャートである。
【図３】第１の実施形態に係るブロック暗号演算回路装置１００の動作を時系列的に示す説明図である。
【図４】第１の実施形態の変形例のタイミングチャートである。
【図５】第１の実施形態の変形例の動作を時系列的に示す説明図である。
【図６】第２の実施形態に係る２段パイプライン型ブロック暗号演算回路装置２００の構成例を示す説明図である。
【図７】第２の実施形態に係る２段パイプライン型ブロック暗号演算回路装置２００のタイミングチャートである。
【図８】第３の実施形態に係る公開鍵暗号演算回路装置３００の構成例を示す説明図である。
【図９】第３の実施形態に係る公開鍵暗号演算回路装置３００のタイミングチャートである。
【図１０】従来のブロック暗号アルゴリズムを処理する暗号演算回路装置９００の構成例を示す説明図である。
【図１１】一般的なＡＥＳラウンド処理関数の最終ラウンド処理の説明図である。
【図１２】従来のマスク化対策を行ったＡＥＳラウンド処理の例を示す説明図である。
【図１３】従来の公開鍵暗号演算アルゴリズムを処理する暗号演算回路装置９６０の構成例を示す説明図である。
【発明を実施するための形態】
【００４２】
以下、図面を参照して本発明に係る暗号演算回路装置の各実施形態について詳しく説明する。
【００４３】
（第１の実施形態）
図１は本実施形態に係る暗号演算回路装置１００の構成例を示している。図１に示した暗号演算回路装置１００は、従来技術で説明した図１０の暗号演算回路装置９００に対応し、ＡＥＳに代表されるブロック暗号アルゴリズムについて、１クロックで１ラウンド処理を行う構成になっている。尚、図１の暗号演算回路装置１００は、図１０の鍵スケジューリング部９０２に相当する部分を含めずに攪拌部１０１と制御部１５０とで構成され、副鍵は外部から入力する構成になっているが、鍵スケジューリング部９０２と同じブロックを含めて暗号演算回路装置１００としても構わない。
【００４４】
図１において、攪拌部１０１は、外部から入力する平文（または暗号文）またはラウンド処理後のデータとを選択するセレクタ１０３と、所定の処理関数でラウンド処理を行う組合せ回路１０４と、乱数生成部１０５と、乱数生成部１０５が出力する乱数データまたはＡｌｌ＝０（全て０のデータ）を選択するセレクタ１０６と、セレクタ１０６の出力データと組合せ回路１０４の出力データとの排他的論理和を求めるＥＸＯＲ回路１０７（第１の排他的論理和演算部）と、ＥＸＯＲ回路１０７の出力データを一時的に保持するレジスタ１０８と、乱数生成部１０５が出力する乱数データまたはＡｌｌ＝０（全て０のデータ）を選択するセレクタ１０９と、レジスタ１０８の出力データとセレクタ１０９の出力データとの排他的論理和を求めるＥＸＯＲ回路１１０（第２の排他的論理和演算部）と、ＥＸＯＲ回路１１０の出力データまたはＡｌｌ＝０（全て０のデータ）を選択して外部に出力するセレクタ１１１とで構成される。
【００４５】
また、制御部１５０は、レジスタ１０８にリセット信号を与え、乱数生成部１０５およびレジスタ１０８にクロックを供給し、セレクタ１０３に制御信号１，セレクタ１０６に制御信号２，セレクタ１０９に制御信号３，セレクタ１１１に制御信号４をそれぞれ出力して攪拌部１０１の処理タイミングを制御する。ここで、制御信号１は、処理関数の入力として外部から入力する平文（または暗号文）またはレジスタ１０８に保持された前ラウンドの処理関数の結果を選択する制御信号である。また制御信号２は、レジスタ１０８に処理関数の結果を格納する際に乱数でマスク化を行うかまたはマスク化を行わずにレジスタ１０８に格納するかを選択する制御信号である。制御信号３は、レジスタ１０８に格納した値を読み出す際にマスク化に用いた乱数によりアンマスク化を行うかまたはアンマスク化を行わずに読み出すかを選択する制御信号である。制御信号４は、最終的な演算結果を外部に出力するか否かを選択する制御信号である。
【００４６】
尚、制御部１５０は、暗号演算回路装置１００全体の動作を制御し、図１０の鍵スケジューリング部９０２を含む場合は、図１０の制御部９０５と同様に鍵スケジューリング部９０２に対してもクロックや制御信号を出力する。この場合、制御部１５０は鍵スケジューリング部９０２のセレクタ９０７に制御信号ｃを出力し、レジスタ９０８にクロックを供給する。また、図１の各セレクタに記載されているＨ，Ｌは２値の制御信号のレベル表し、ＨはＨｉｇｈレベル，ＬはＬｏｗレベルをそれぞれ示す。
【００４７】
図１の攪拌部１０１は、従来技術の図１０の攪拌部９０１と同様に、平文（または暗号文）を処理対象データとして入力し、鍵スケジューリング部９０２などで秘密鍵から作成する副鍵（ラウンド鍵）を用いて所定回数のラウンド処理を行って暗号化し、暗号文（または平文）を処理済データとして出力する。
【００４８】
攪拌部１０１において、１ラウンド処理は１クロック期間で行われ、セレクタ１０３，組合せ回路１０４，ＥＸＯＲ回路１０７，レジスタ１０８およびＥＸＯＲ回路１１０を一巡する一連のラウンド処理を制御部１５０から供給されるクロックに同期して所定回数だけ繰り返す。つまり、組合せ回路１０４のラウンド処理を基本とする攪拌部１０１では、鍵スケジューリング部９０２などから入力される副鍵の値と１クロック前のラウンド処理の中間値とを用いて新たなラウンド処理を行い、その演算結果を新たな中間値としてレジスタ１０８に格納する処理を繰り返す。そして、必要なラウンド回数分だけクロックが進んだ後、最終ラウンドで組合せ回路１０４が出力するデータが最終演算結果となり、この値を暗号文（暗号化の場合）または平文（復号化の場合）としてセレクタ１０８を介してレジスタ１０９に保持され、セレクタ１１０を介して暗号演算回路装置１００の外部に出力する。
【００４９】
本実施形態に係る暗号演算回路装置１００が図１０に示した従来の暗号演算回路装置９００と異なる部分は、組合せ回路１０４の演算結果をレジスタ１０８に格納する前にＥＸＯＲ回路１０７において乱数生成部１０５が生成した乱数データと演算結果との排他的論理和演算を行うことと、レジスタ１０８に格納されたデータを読み出す際に、ＥＸＯＲ回路１１０において乱数生成部１０５が生成した乱数データ（直前にレジスタ１０８に演算結果を格納する際にＥＸＯＲ回路１０７で用いた乱数データと同じ乱数データ）とレジスタ１０８に格納されたデータとの排他的論理和演算を行うことである。
【００５０】
尚、乱数生成部１０５が生成する乱数は、真性乱数または擬似乱数が用いられる。そして、乱数生成部１０５は、暗号化の処理単位である１ブロック単位の演算毎に新しい乱数値に更新する。また、セレクタ１０６およびセレクタ１０９は、制御信号２および制御信号３によってそれぞれ制御され、制御信号２および制御信号３がＨｉｇｈの場合は全て０のデータが出力されるので、ＥＸＯＲ回路１０７およびＥＸＯＲ回路１１０の入力データはそのまま出力される。従って、ＥＸＯＲ回路１０７およびＥＸＯＲ回路１１０を制御信号２および制御信号３がＨｉｇｈの時にバイパスするような回路構成にしても同じ効果が得られる。
【００５１】
ここで、図１において、外部からの入力データ（平文ｏｒ暗号文）またはフィードバックされた前のラウンド処理の演算結果を選択するセレクタ１０３の制御信号１と、ラウンド処理の演算結果または固定値（本実施例ではａｌｌ＝０）を選択するセレクタ１１１の制御信号４とは、図１０の従来の暗号演算回路装置９００のセレクタ９０３の制御信号ａおよびセレクタ９０６の制御信号ｂにそれぞれ対応する。
【００５２】
次に、図１の暗号演算回路装置１００の動作について図２のタイミングチャートを用いて詳しく説明する。図２は、制御部１５０が出力するリセット信号と、クロックと、制御信号１と、制御信号２と、制御信号３と、制御信号４と、レジスタ１０８との処理タイミングの関係を描いたタイミングチャートである。尚、図２において、初期ラウンドから最終ラウンドまでの（ｎ＋１）回の全ラウンドを１ブロック演算とし、１ブロック演算毎に処理結果の暗号文（ｏｒ平文）が外部に出力される。また、図１の組合せ回路１０４によるラウンド処理関数は１クロック周期毎に実行され、レジスタ１０８は１クロック周期で入力データを保持する。尚、レジスタ１０８の初期値はリセット信号がＬｏｗになった時に所定値（例えば全て０）に初期化されるものとする。
【００５３】
図２において、タイミングｔ０からｔ２ｎ＋３の表記はクロック周期毎のタイミング位置を示し、ｄ０からｄｎは組合せ回路１０４によるラウンド処理関数の各ラウンド毎の出力データを示している。例えばｄ０は初期ラウンド処理関数の結果の値、ｄ１は第１ラウンド処理関数の結果の値、ｄｎは最終ラウンド処理関数の結果の値をそれぞれ示している。また、ｒ，ｒ’およびｒ’’は乱数生成部１０５が１ブロック演算周期毎の更新頻度で生成する乱数を示しており、乱数ｒ，乱数ｒ’および乱数ｒ’’は異なる乱数値を示している。さらに、（＋）は排他的論理和演算子を示し、例えばｄ０（＋）ｒはｄ０とｒの排他的論理和演算値となる。
【００５４】
尚、図１において、乱数発生部１０５に制御部１５０からクロックが入力されているが、図２のフローチャートでは、乱数発生部１０５は最終ラウンド毎に新たな乱数を発生するものとして説明する。この場合は、乱数発生部１０５の内部に１ブロック分のクロックをカウントするカウンタを設けることで実現できる。
【００５５】
図２において、先ずタイミングｔ０以前においてリセットはＬｏｗに制御されているのでレジスタ１０８はＡｌｌ＝０に初期化されている。タイミングｔ０の後、リセットはＨｉｇｈに制御されて解除される。
【００５６】
次のタイミングｔ１では、制御信号２がＬｏｗに制御され、外部から入力された平文（ｏｒ暗号文）が組合せ回路１０４で初期ラウンド処理された演算結果と乱数生成部１０５が生成した例えば１２８ビットの乱数データｒとの排他的論理和演算をＥＸＯＲ回路１０７で行ってマスク化し、レジスタ１０８に格納する。この間、制御信号１はＬｏｗに制御され、タイミングｔ２から最終ラウンドを処理するタイミングｔｎ＋１まで制御信号１はＨｉｇｈに制御され、セレクタ１０３，組合せ回路１０４，ＥＸＯＲ回路１０７，レジスタ１０８およびＥＸＯＲ回路１１０までを巡回するｎ回のラウンド処理が行われる。
【００５７】
次のタイミングｔ２では、制御信号３がＬｏｗに制御され、レジスタ１０８に保持されたデータと乱数生成部１０５が生成した乱数データｒ（先のタイミングｔ１でＥＸＯＲ回路１０７が用いた乱数データと同じ乱数データ）との排他的論理和演算をＥＸＯＲ回路１１０で行ってアンマスク化（マスク化を解除）し、次のラウンド処理のためにセレクタ１０３にフィードバックする。ここで、アンマスク化したデータは先の組合せ回路１０４で初期ラウンド処理された演算結果ｄ０である。さらにタイミングｔ２では、制御信号２はＨｉｇｈに制御されているので、ＥＸＯＲ回路１０７は先に説明したようにバイパスされるのと等価となり、セレクタ１０３にフィードバックされたｄ０が組合せ回路１０４で第１ラウンド処理された演算結果ｄ１はＥＸＯＲ回路１０７をバイパスしてレジスタ１０８に格納される。
【００５８】
次のタイミングｔ３では、制御信号３がＨｉｇｈに制御されているので、ＥＸＯＲ回路１１０は先に説明したようにバイパスされるのと等価となり、レジスタ１０８に格納されたｄ１がＥＸＯＲ回路１１０をバイパスしてセレクタ１０３にフィードバックされ、組合せ回路１０４で第２ラウンド処理された演算結果ｄ２は、制御信号２はＨｉｇｈのままなのでＥＸＯＲ回路１０７をバイパスしてレジスタ１０８に格納される。
【００５９】
以降、第（ｎ−１）ラウンドを処理するタイミングｔｎまでの間、制御信号２および制御信号３はＨｉｇｈに制御されたままなので、ＥＸＯＲ回路１０７およびＥＸＯＲ回路１１０はバイパスされ、図１０の従来の暗号演算回路装置９００と同様に動作する。
【００６０】
最終ラウンドを処理するタイミングｔｎ＋１では、制御信号２がＬｏｗに制御されるので、組合せ回路１０４で第（ｎ−１）ラウンド処理された演算結果ｄｎと乱数生成部１０５が新たに生成した例えば１２８ビットの乱数データｒ’との排他的論理和演算をＥＸＯＲ回路１０７で行ってマスク化し、レジスタ１０８に格納する。
【００６１】
次のタイミングｔｎ＋２では、制御信号３がＬｏｗに制御され、レジスタ１０８に保持されたデータと乱数生成部１０５が生成した乱数データｒ’（先のタイミングｔｎ＋１でＥＸＯＲ回路１０７が用いた乱数データと同じ乱数データ）との排他的論理和演算をＥＸＯＲ回路１１０で行ってアンマスク化し、セレクタ１０３およびセレクタ１１１に出力する。この時、制御信号１はＬｏｗに制御されているので、セレクタ１０３では次の平文（ｏｒ暗号文）を入力し、また制御信号４もＬｏｗに制御されているので、セレクタ１１１ではＥＸＯＲ回路１１０でアンマスク化したデータｄｎが外部に暗号文（ｏｒ平文）として出力される。
【００６２】
一方、次のブロック演算の周期の初期ラウンドのタイミングｔｎ＋２では、制御信号２はＨｉｇｈに制御されているので、セレクタ１０３を介して外部から入力された平文（ｏｒ暗号文）は組合せ回路１０４で初期ラウンド処理された演算結果ｄ０は、ＥＸＯＲ回路１０７をバイパスしてレジスタ１０８に格納される。尚、演算結果ｄ０は先のブロック演算での演算結果ｄ０と同じ値を意味するものではなく、各ブロック演算の初期ラウンドの演算結果を表しているだけである。
【００６３】
以降、タイミングｔｎ＋３からタイミングｔ２ｎ＋３までの動作は、先に説明したタイミングｔ３からタイミングｔｎ＋２までの動作と同じである。さらに、次のブロック演算処理を行う場合はタイミングｔｎ＋２からタイミングｔ２ｎ＋３までの動作を同様に繰り返せばよい。尚、上記で説明した処理タイミングは制御部１５０によって全て制御される。
【００６４】
ここで、本実施形態に係る暗号演算回路装置１００において、ＣＰＡ攻撃のターゲットとなる初期ラウンドおよび最終ラウンドの処理に着目する。先ず、タイミングｔ１の初期ラウンド処理においては、レジスタ１０８の値が乱数ｒと初期ラウンド処理の演算結果ｄ０との排他的論理和演算値としてマスク化されている。この時、乱数ｒの値はブロック演算毎に異なるので、レジスタ１０８の値の変化量（ハミング距離）を推定することはできない。ところが、マスク化を行わない従来回路で、タイミングｔ１以前にレジスタ１０８の初期値がリセット信号により全て０に初期化されていた場合、例えば外部から入力された平文（ｏｒ暗号文）（＋）副鍵の演算結果がレジスタ１０８に格納されるので、タイミングｔ０，ｔ１の間のレジスタハミング距離を計算することが可能であるが、本実施形態では乱数によってマスク化してレジスタ１０８に格納することにより、レジスタ１０８には平文（ｏｒ暗号文）（＋）副鍵（＋）乱数の演算結果が格納されるので、レジスタハミング距離を計算することができない。
【００６５】
尚、タイミングｔ２からタイミングｔｎまでは制御信号２がＨｉｇｈに制御され、またタイミングｔ３からタイミングｔｎ＋１までは制御信号３がＨｉｇｈに制御されるので、この間、処理関数の結果にマスク化処理を行わない正規の演算結果がレジスタ１０８に格納されることになるが、第１ラウンドから第（ｎ−１）ラウンドまでの処理はＣＰＡ攻撃の対象とならないためマスク化処理は必要ない。
【００６６】
また、タイミングｔｎ＋１の最終ラウンド処理においても、レジスタ１０８の値が乱数ｒ’と最終ラウンド処理の演算結果ｄｎとの排他的論理和演算値としてマスク化されているので、レジスタ１０８の値の変化量（ハミング距離）を推定することはできない。ところが、マスク化を行わない従来回路で、タイミングｔｎ＋１でレジスタ１０８にｄｎが格納されるので、タイミングｔｎ，ｔｎ＋１の間のレジスタハミング距離を計算することが可能であるが、本実施形態では乱数によってマスク化してレジスタ１０８に格納することにより、レジスタ１０８にはｄｎ（＋）乱数の演算結果が格納されるので、レジスタハミング距離を計算することができない。
【００６７】
ここで、本実施形態に係る暗号演算回路装置１００の動作の流れと特徴および効果が分かり易いように図３の模式図を用いて説明する。尚、図３において、図１と同符号のものは同じものを示す。また、同じ符号のブロック（レジスタ１０８および組合せ回路１０４）が重複して記載されているが、これらは処理の流れが分かり易いように、各ラウンド毎にレジスタ１０８および組合せ回路１０４を描いてあるだけで、複数のレジスタ１０８および組合せ回路１０４があるわけではない。
【００６８】
図３の初期ラウンド処理の組合せ回路１０４の直前の点線で示したレジスタ１０８には初期化された値または前のラウンドのレジスタ値が格納されているが、外部から入力する平文（ｏｒ暗号文）の初期ラウンド処理を行う組合せ回路１０４の演算結果はＥＸＯＲ回路１０７で乱数生成部１０５が生成する乱数でマスク化して次のレジスタ１０８に格納し、第１ラウンド処理を行う組合せ回路１０４に出力する際に、レジスタ１０８に格納されているマスク化された演算結果を読み出してＥＸＯＲ回路１１０で乱数生成部１０５が生成する同じ乱数でアンマスク化するので、初期ラウンド処理の組合せ回路１０４の直後の演算結果を格納するレジスタ１０８と初期ラウンド処理の直前のレジスタ１０８との間のレジスタハミング距離を計算することはできない。
【００６９】
同様に、図３の最終ラウンド処理の組合せ回路１０４の直前のレジスタ１０８にはマスク化されていない演算結果が格納されているが、最終ラウンド処理の組合せ回路１０４の演算結果はＥＸＯＲ回路１０７で乱数生成部１０５が生成する乱数でマスク化して次のレジスタ１０８に格納し、外部に暗号文（ｏｒ平文）を出力する際に、レジスタ１０８に格納されているマスク化された演算結果を読み出してＥＸＯＲ回路１１０で乱数生成部１０５が生成する同じ乱数でアンマスク化するので、最終ラウンド処理の組合せ回路１０４の直前のレジスタ１０８と直後のレジスタ１０８との間のレジスタハミング距離を計算することができない。
【００７０】
このように、本実施形態に係る暗号演算回路装置１００は、副鍵を仮定して各レジスタにおけるハミング距離を逆算することができなくなり、副鍵と消費電力との相関を無くすことができる。この結果、マスク化処理などを施していない従来のラウンド処理関数部分をそのまま利用することができ、従来技術のようにラウンド処理関数全体を乱数によってマスク化するために必要な多数のＥＸＯＲ回路や予備回路などの追加が不要となる。特にＣＰＡ攻撃の対象である初期ラウンド処理と最終ラウンド処理との演算結果に限定してレジスタ１０８の値をマスク化することにより、最小限の演算量と回路オーバヘッドでＣＰＡ攻撃を回避することができる。
【００７１】
（第１の実施形態の変形例）
第１の実施形態では、図２に示したように、タイミングｔ０からｔ１の初期化時にレジスタ１０８を０にリセットするようにし、次のタイミングｔ１からｔ２の初期ラウンド時に乱数ｒと組合せ回路１０４の演算結果とを排他的論理和演算したｄ０（＋）ｒがレジスタ１０８に格納されるようになっていた。これに対して、第１の実施形態の変形例では、図４に示したように、タイミングｔ０からｔ１の初期化時にレジスタ１０８に乱数ｒが格納されるようにし、次のタイミングｔ１からｔ２の初期ラウンド時は組合せ回路１０４の演算結果ｄ０をそのままレジスタ１０８に格納するようになっている。尚、この場合は、図１において、乱数生成部１０５が出力する乱数値を初期化時に直接レジスタ１０８に入力できるようなセレクタをＥＸＯＲ回路１０７とレジスタ１０８との間に設けても構わないが、図４のタイミングチャートに示したように、初期化時にレジスタ１０８のリセット信号をＬｏｗにせずにＨｉｇｈにしておき、制御信号２を初期化時のタイミングｔ０でＬｏｗにすることによって、乱数生成部１０５が生成する乱数はセレクタ１０６を介してＥＸＯＲ回路１０７に入力されるので、その時点の組合せ回路１０４の出力値に依存するが、タイミングｔ０でＥＸＯＲ回路１０７から出力される何らかの乱数がレジスタ１０８に保持されることになる。尚、本変形例の場合は、図４のタイミングチャートに示すように、タイミングｔ２でレジスタ１０８から読み出す際にアンマスク化の必要がないので、第１の実施形態の図２の場合とは異なり、タイミングｔ２で制御信号３はＨｉｇｈにしておく。
【００７２】
本変形例の場合でも、図５に示すように、レジスタ１０８の値は初期ラウンド前は乱数値が保持されているので、ハミング距離を計算することはできない。
【００７３】
以後、各ブロックデータの暗号化演算の最終ラウンドに関する処理は第１の実施形態と同じである。
【００７４】
（第２の実施形態）
次に、第２の実施形態に係る暗号演算回路装置２００について説明する。図６は暗号演算回路装置２００の構成例を示している。図６に示した暗号演算回路装置２００は、従来技術で説明した暗号演算回路装置９００および第１の実施形態に係る暗号演算回路装置１００と同様にＡＥＳに代表されるブロック暗号アルゴリズムに対応し、１クロックで１ラウンド処理を行う構成になっている。尚、図６の暗号演算回路装置２００は、図１０の鍵スケジューリング部９０２に相当する部分を含めずに攪拌部２０１と制御部２５０とで構成され、副鍵は外部から入力する構成になっているが、鍵スケジューリング部９０２と同じブロックを含めて暗号演算回路装置２００としても構わない。
【００７５】
以下、図６を用いて第２の実施形態に係る暗号演算回路装置２００について詳しく説明する。図６において、攪拌部２０１は、外部から入力する平文（または暗号文）またはラウンド処理後のデータとを選択するセレクタ２０３と、所定の処理関数でラウンド処理を行う組合せ回路２０４と、乱数生成部２０５と、乱数生成部２０５が出力する乱数データまたはＡｌｌ＝０（全て０のデータ）を選択するセレクタ２０６と、セレクタ２０６の出力データと組合せ回路２０４の出力データとの排他的論理和を求めるＥＸＯＲ回路２０７（第１の排他的論理和演算部）と、ＥＸＯＲ回路２０７の出力データを一時的に保持するレジスタ２０８と、乱数生成部２０５が出力する乱数データまたはＡｌｌ＝０（全て０のデータ）を選択するセレクタ２０９と、レジスタ２０８の出力データとセレクタ２０９の出力データとの排他的論理和を求めるＥＸＯＲ回路２１０（第２の排他的論理和演算部）と、ＥＸＯＲ回路２１０の出力データまたは外部から入力する平文（または暗号文）を選択するセレクタ２１１と、所定の処理関数でラウンド処理を行う組合せ回路２１２と、乱数生成部２０５が出力する乱数データまたはＡｌｌ＝０（全て０のデータ）を選択するセレクタ２１３と、セレクタ２１３の出力データと組合せ回路２１２の出力データとの排他的論理和を求めるＥＸＯＲ回路２１４（第１の排他的論理和演算部）と、ＥＸＯＲ回路２１４の出力データを一時的に保持するレジスタ２１５と、乱数生成部２０５が出力する乱数データまたはＡｌｌ＝０（全て０のデータ）を選択するセレクタ２１６と、レジスタ２１５の出力データとセレクタ２１６の出力データとの排他的論理和を求めるＥＸＯＲ回路２１７（第２の排他的論理和演算部）と、ＥＸＯＲ回路２１７の出力データまたはＥＸＯＲ回路２１０の出力データを選択するセレクタ２１８と、セレクタ２１８の出力データまたはＡｌｌ＝０（全て０のデータ）を選択して外部に暗号文（ｏｒ平文）を出力するセレクタ２１９とで構成される。
【００７６】
また、制御部２５０は、レジスタ２０８およびレジスタ２１５にリセット信号を与え、乱数生成部２０５，レジスタ２０８およびレジスタ２１５にクロックを供給し、セレクタ２０３に制御信号１，セレクタ２１１に制御信号２，セレクタ２０６に制御信号３，セレクタ２０９に制御信号４，セレクタ２１３に制御信号５，セレクタ２１６に制御信号６，セレクタ２１８に制御信号７，セレクタ２１９に制御信号８をそれぞれ出力して攪拌部２０１の処理タイミングを制御する。
【００７７】
ここで、制御信号１は、処理関数の入力として外部から入力する平文（または暗号文）またはレジスタ２１５に保持された基本処理関数２の結果を選択する制御信号である。また制御信号２は、外部から入力する平文（または暗号文）またはレジスタ２０８に保持された基本処理関数１の結果を選択する制御信号である。つまり、制御信号１および制御信号２は組合せ回路２０４（基本処理関数１）または組合せ回路２１２（基本処理関数２）への入力切り替えを行うための制御信号である。
【００７８】
制御信号３は、レジスタ２０８に処理関数の結果を格納する際に乱数でマスク化を行うかまたはマスク化を行わずにレジスタ２０８に格納するかを選択する制御信号である。制御信号４は、レジスタ２０８に格納した値を読み出す際にマスク化に用いた乱数によりアンマスク化を行うかまたはアンマスク化を行わずに読み出すかを選択する制御信号である。つまり、制御信号３および制御信号４は、レジスタ２０８への組合せ回路２０４（基本処理関数１）の演算結果の書き込みおよび読み出し動作におけるマスク化およびアンマスク化の有無を制御するための制御信号である。
【００７９】
制御信号５は、レジスタ２１５に処理関数の結果を格納する際に乱数でマスク化を行うかまたはマスク化を行わずにレジスタ２１５に格納するかを選択する制御信号である。制御信号６は、レジスタ２１５に格納した値を読み出す際にマスク化に用いた乱数によりアンマスク化を行うかまたはアンマスク化を行わずに読み出すかを選択する制御信号である。つまり、制御信号５および制御信号６は、レジスタ２１５への組合せ回路２１２（基本処理関数２）の演算結果の書き込みおよび読み出し動作におけるマスク化およびアンマスク化の有無を制御するための制御信号である。
【００８０】
制御信号７は、レジスタ２１５に保持された組合せ回路２１２（基本処理関数２）の演算結果またはレジスタ２０８に保持された組合せ回路２０４（基本処理関数１）の演算結果を選択する制御信号である。制御信号８は、最終的な演算結果を外部に出力するか否かを選択する制御信号である。
【００８１】
本実施形態に係る暗号演算回路装置２００は、図１で説明した第１の実施形態の応用例で、ブロック暗号アルゴリズムにおいてスループットを向上させるために前半のデータと後半のデータとに分けた並列データを同時に処理する２段のパイプライン構成になっている。特に、前半のデータのみ初期ラウンドと最終ラウンドでマスク化する処理を行うだけでＣＰＡ攻撃を防御することができる。
【００８２】
図６において、２段のパイプライン構成の１段目の回路は、セレクタ２０３，組合せ回路２０４，乱数生成部２０５，セレクタ２０６，ＥＸＯＲ回路２０７，レジスタ２０８，セレクタ２０９およびＥＸＯＲ回路２１０で構成され、図１のセレクタ１０３，組合せ回路１０４，乱数生成部１０５，セレクタ１０６，ＥＸＯＲ回路１０７，レジスタ１０８，セレクタ１０９およびＥＸＯＲ回路１１０までの回路に相当する。同様に、２段のパイプライン構成の２段目の回路は、セレクタ２１１，組合せ回路２１２，乱数生成部２０５，セレクタ２１３，ＥＸＯＲ回路２１４，レジスタ２１５，セレクタ２１６およびＥＸＯＲ回路２１７で構成され、図１のセレクタ１０３，組合せ回路１０４，乱数生成部１０５，セレクタ１０６，ＥＸＯＲ回路１０７，レジスタ１０８，セレクタ１０９およびＥＸＯＲ回路１１０までの回路に相当する。但し、本実施形態では、１段目の回路のセレクタ２０３にフィードバックされる演算結果は２段目の回路の組合せ回路２１２で処理された演算結果であり、逆に２段目の回路のセレクタ２１１にフィードバックされる演算結果は１段目の回路の組合せ回路２０４で処理された演算結果である。そして、最終的にセレクタ２１９から外部に出力される前にセレクタ２１８によって、１段目の回路の組合せ回路２０４で処理された演算結果または２段目の回路の組合せ回路２１２で処理された演算結果を選択するようになっている。
【００８３】
次に、図６の暗号演算回路装置２００の動作について図７のタイミングチャートを用いて詳しく説明する。図７は、制御部２５０が出力するリセット信号と、クロックと、制御信号１と、制御信号２と、制御信号３と、制御信号４と、制御信号５と、制御信号６と、制御信号７と、制御信号８と、レジスタ２０８と、レジスタ２１５との処理タイミングの関係を描いたタイミングチャートである。尚、図７において、初期ラウンドから最終ラウンドまでの（ｎ＋１）回の全ラウンドを１ブロック演算とし、１ブロック演算毎に処理結果の暗号文（ｏｒ平文）が外部に出力される。また、図６の組合せ回路２０４および組合せ回路２１２による基本処理関数は１クロック周期毎に実行され、レジスタ２０８およびレジスタ２１５は１クロック周期で入力データを保持する。尚、レジスタ２０８およびレジスタ２１５の初期値はリセット信号がＬｏｗになった時に所定値（例えば全て０）に初期化されるものとする。
【００８４】
図７において、タイミングｔ０からｔ２ｎ＋３の表記はクロック周期毎のタイミング位置を示し、ｄ０からｄｎは前半のデータを組合せ回路２０４または組合せ回路２１２で関数処理した出力データを示し、ｄ’０からｄ’ｎは後半のデータを組合せ回路２０４または組合せ回路２１２で関数処理した出力データを示している。また、ｒ，ｒ’およびｒ’’は乱数生成部１０５が１ブロック演算周期毎の更新頻度で生成する乱数を示しており、乱数ｒ，乱数ｒ’および乱数ｒ’’は異なる乱数値を示している。さらに、（＋）は排他的論理和演算子を示し、例えばｄ０（＋）ｒはｄ０とｒの排他的論理和演算値となる。
【００８５】
尚、第１の実施形態と同様に、図６において、乱数発生部２０５に制御部２５０からクロックが入力されているが、図７のフローチャートでは、乱数発生部２０５は最終ラウンド毎に新たな乱数を発生するものとして説明する。
【００８６】
図７において、先ずタイミングｔ０以前においてリセットはＬｏｗに制御されているのでレジスタ２０８およびレジスタ２１５はＡｌｌ＝０に初期化されている。タイミングｔ０の後、リセットはＨｉｇｈに制御されて解除される。
【００８７】
次のタイミングｔ１では、制御信号１および制御信号３がＬｏｗに制御されるので、外部から入力される前半データの平文（ｏｒ暗号文）が組合せ回路２０４で初期ラウンド処理された演算結果ｄ０と乱数生成部２０５が生成した例えば１２８ビットの乱数データｒとの排他的論理和演算をＥＸＯＲ回路２０７で行ってマスク化し、その演算結果（ｄ０（＋）ｒ）がレジスタ２０８に格納される（前半ブロックの初期ラウンド処理）。
【００８８】
次のタイミングｔ２では、制御信号３がＨｉｇｈ，制御信号４がＬｏｗにそれぞれ制御され、レジスタ２０８に保持されたデータ（ｄ０（＋）ｒ）と乱数生成部２０５が生成した乱数データｒ（先のタイミングｔ１でＥＸＯＲ回路２０７が用いた乱数データと同じ乱数データ）との排他的論理和演算をＥＸＯＲ回路２１０で行ってアンマスク化（マスク化を解除）した演算結果ｄ０をセレクタ２１１に出力する。ここで、制御信号２はＨｉｇｈに保持されているので、演算結果ｄ０はセレクタ２１１を介して組合せ回路２１２に入り基本処理関数２で演算処理される。さらに、セレクタ２１３の制御信号５はＨｉｇｈなので、演算結果ｄ１はそのままＥＸＯＲ回路２１４をバイパスしてレジスタ２１５に格納される。一方、セレクタ２０３の制御信号１はＬｏｗのままなので、外部から入力される後半データの平文（ｏｒ暗号文）が組合せ回路２０４で初期ラウンド処理された演算結果ｄ’０は、セレクタ２０６の制御信号３がＨｉｇｈなのでＥＸＯＲ回路２０７をバイパスしてレジスタ２０８に格納される（後半ブロックの初期ラウンド処理）。
【００８９】
この結果、タイミングｔ２では、レジスタ２０８には後半データの初期ラウンドの演算結果ｄ’０が格納され、レジスタ２１５には前半データの第１ラウンドの演算結果ｄ１が格納される。
【００９０】
次のタイミングｔ３では、制御信号４がＨｉｇｈに制御されるので、ＥＸＯＲ回路２１０は先に説明したようにバイパスされるのと等価となり、レジスタ２０８に格納された演算結果ｄ’０がＥＸＯＲ回路２１０をバイパスしてセレクタ２１１に出力される。さらにセレクタ２１１の制御信号２はＨｉｇｈのままなので、演算結果ｄ’０は組合せ回路２１２に入力されて演算処理され、その後半データの第１ラウンドの演算結果ｄ’１をＥＸＯＲ回路２１４に出力する。この時、セレクタ２１３の制御信号５はＨｉｇｈのままなので、演算結果ｄ’１はそのままＥＸＯＲ回路２１４をバイパスしてレジスタ２１５に後半データの第１ラウンドの演算結果ｄ’１が格納される。一方、セレクタ２１６の制御信号６はＨｉｇｈのままなので、レジスタ２１５に保持されていた前の演算結果ｄ１はそのままＥＸＯＲ回路２１７をバイパスして制御信号１がＨｉｇｈのセレクタ２０３を介して組合せ回路２０４にフィードバックされ、組合せ回路２０４で演算処理される。この前半データの第２ラウンドの演算結果ｄ２は、セレクタ２０６の制御信号３はＨｉｇｈのままなので、そのままＥＸＯＲ回路２０７をバイパスしてレジスタ２０８に格納される。
【００９１】
この結果、タイミングｔ３では、レジスタ２０８には前半データの第２ラウンドの演算結果ｄ２が格納され、レジスタ２１５には後半データの第１ラウンドの演算結果ｄ’１が格納される。
【００９２】
次のタイミングｔ４からタイミングｔｎまでについても、制御信号１から制御信号８は全てＨｉｇｈの同じ状態に制御されるので、組合せ回路２０４と組合せ回路２１２の演算結果が交互にレジスタ２０８とレジスタ２１５に格納される動作が繰り返し行われる。つまり、前半データのラウンド処理に１クロック周期遅れて後半データのラウンド処理が並列に行われる。尚、繰り返し回数が奇数か偶数かによって、最終ラウンド処理の演算結果がレジスタ２０８とレジスタ２１５のどちらかに格納されることになるが、基本的な動作については同様に行われる。
【００９３】
最初のブロックの前半データの最終ラウンドを処理するタイミングｔｎ＋１では、セレクタ２０６の制御信号３がＬｏｗに制御されるので、組合せ回路２０４で第（ｎ−１）ラウンド処理された演算結果ｄｎと乱数生成部１０５が新たに生成した例えば１２８ビットの乱数データｒ’との排他的論理和演算をＥＸＯＲ回路２０７で行ってマスク化し、マスク化された演算結果（ｄｎ（＋）ｒ’）をレジスタ２０８に格納する。一方、セレクタ２０９の制御信号４はＨｉｇｈのままなので、レジスタ２０８に保持されていた前の演算結果ｄ’ｎ−２はそのままＥＸＯＲ回路２１０をバイパスし、制御信号２がＨｉｇｈのセレクタ２１１を介して組合せ回路２１２に出力され、組合せ回路２１２で演算処理される。この後半データの第（ｎ−１）ラウンドの演算結果ｄ’ｎ−１は、セレクタ２１３の制御信号５はＨｉｇｈのままなので、そのままＥＸＯＲ回路２１４をバイパスしてレジスタ２１５に格納される。
【００９４】
この結果、タイミングｔｎ＋１では、レジスタ２０８には前半データの第ｎラウンドの演算結果ｄ２がマスク化された（ｄｎ（＋）ｒ’）が格納され、レジスタ２１５には後半データの第（ｎ−１）ラウンドの演算結果ｄ’ｎ−１が格納される。
【００９５】
次のタイミングｔｎ＋２では、セレクタ２０９の制御信号４がＬｏｗに制御されるので、乱数生成部２０５が生成した乱数データｒ’（先のタイミングｔｎ＋１でＥＸＯＲ回路２０７が用いた乱数データと同じ乱数データ）がＥＸＯＲ回路２１０に出力され、レジスタ２０８に保持されたマスク化された演算結果（ｄｎ（＋）ｒ’）と乱数データｒ’との排他的論理和演算をＥＸＯＲ回路２１０で行ってアンマスク化し、アンマスク化した演算結果ｄｎがセレクタ２１１およびセレクタ２１８に出力される。この時、制御信号７はＨｉｇｈに制御されているので、演算結果ｄｎはセレクタ２１８を介してセレクタ２１９に入力され、セレクタ２１９の制御信号８もＬｏｗに制御されているので、セレクタ２１９を介して前半データの最終ラウンドの演算結果ｄｎが外部に暗号文（ｏｒ平文）として出力される。一方、セレクタ２１１の制御信号２がＬｏｗに制御されるので、次のブロックの前半データの平文（ｏｒ暗号文）が組合せ回路２１２に入力されて演算処理され、その演算結果ｄ０がＥＸＯＲ回路２１４に出力される。この時、セレクタ２１３の制御信号５はＬｏｗに制御されるので、乱数生成部２０５が生成した乱数データｒ’と演算結果ｄ０との排他的論理和演算をＥＸＯＲ回路２１４で行ってマスク化し、マスク化した演算結果（ｄ０（＋）ｒ’）がレジスタ２１５に格納される。尚、演算結果ｄ０は先のブロック演算での演算結果ｄ０と同じ値を意味するものではなく、各ブロック演算の前半データの初期ラウンドの演算結果を表しているだけである。
【００９６】
一方、セレクタ２１６の制御信号６がＨｉｇｈに制御されるので、レジスタ２１５に保持されていた演算結果ｄ’ｎ−１はそのままＥＸＯＲ回路２１７をバイパスしてセレクタ２０３に入り、制御信号１がＨｉｇｈのセレクタ２０３を介して組合せ回路２０４で演算処理された演算結果ｄ’ｎはＥＸＯＲ回路２０７に出力される。この時、セレクタ２０６の制御信号３はＨｉｇｈに制御されているので、後半データの最終ラウンドの演算結果ｄ’ｎはそのままＥＸＯＲ回路２０７をバイパスしてレジスタ２０８に格納される。
【００９７】
この結果、タイミングｔｎ＋２では、レジスタ２０８には後半データの最終ラウンドの演算結果ｄ’ｎが格納され、レジスタ２１５にはマスク化された前半データの次のブロックの初期ラウンドの演算結果（ｄ０（＋）ｒ’）が格納され、平行して前のブロックの前半データの最終ラウンドの演算結果ｄｎが外部に暗号文（ｏｒ平文）として出力される。
【００９８】
次のタイミングｔｎ＋３では、セレクタ２０９の制御信号４がＨｉｇｈに制御されるので、ＥＸＯＲ回路２１０はバイパスされ、レジスタ２０８に保持された演算結果ｄ’ｎがセレクタ２１１およびセレクタ２１８に出力される。この時、制御信号７はＨｉｇｈに制御されているので、演算結果ｄ’ｎはセレクタ２１８を介してセレクタ２１９に入力され、セレクタ２１９の制御信号８もＬｏｗに制御されているので、セレクタ２１９を介して後半データの最終ラウンドの演算結果ｄ’ｎが外部に暗号文（ｏｒ平文）として出力される。
【００９９】
一方、セレクタ２１１の制御信号２がＬｏｗに制御されたままなので、次のブロックの後半データの平文（ｏｒ暗号文）が組合せ回路２１２に入力されて演算処理され、その演算結果ｄ’０がＥＸＯＲ回路２１４に出力される。この時、セレクタ２１３の制御信号５はＨｉｇｈに制御されるのでＥＸＯＲ回路２１４をバイパスし、次のブロックの後半データの演算結果ｄ’０がレジスタ２１５に格納される。尚、演算結果ｄ’０は先のブロック演算での演算結果ｄ’０と同じ値を意味するものではなく、各ブロック演算の後半データの初期ラウンドの演算結果を表しているだけである。
【０１００】
また、セレクタ２１６の制御信号６がＬｏｗに制御されるので、レジスタ２１５に保持されていた演算結果（ｄ０（＋）ｒ’）と乱数生成部２０５が生成した乱数データｒ’との排他的論理和演算をＥＸＯＲ回路２１７で行ってアンマスク化し、アンマスク化した演算結果ｄ０がセレクタ２０３に入り、制御信号１がＨｉｇｈのセレクタ２０３を介して組合せ回路２０４で演算処理された前半データの第１ラウンドの演算結果ｄ１がＥＸＯＲ回路２０７に出力される。この時、セレクタ２０６の制御信号３はＨｉｇｈに制御されているので、前半データの第１ラウンドの演算結果ｄ１はそのままＥＸＯＲ回路２０７をバイパスしてレジスタ２０８に格納される。
【０１０１】
この結果、タイミングｔｎ＋３では、レジスタ２０８には次のブロックの前半データの第１ラウンドの演算結果ｄ１が格納され、レジスタ２１５には次のブロックの後半データの演算結果ｄ’０が格納され、平行して前のブロックの後半データの最終ラウンドの演算結果ｄ’ｎが外部に暗号文（ｏｒ平文）として出力される。
【０１０２】
以降、同様の動作を繰り返して、並列処理が実行される。尚、上記で説明した処理タイミングは制御部２５０によって全て制御される。
【０１０３】
ここで、初期ラウンドの関数出力値ｄ０，ｄ’０が格納されるタイミングｔ１，ｔ２、および最終ラウンドの関数出力値ｄｎ，ｄ’ｎが格納されるタイミングｔｎ＋１，ｔｎ＋２がＣＰＡ攻撃の対象となる。ここで、攻撃者が入手可能なのは平文ｄ０，ｄ’０と暗号文ｄｎ，ｄ’ｎに限定されるものとする。タイミングｔ１，ｔ２では、レジスタ２０８が０−＞（ｄ０（＋）ｒ）−＞ｄ’０−＞ｄ２の順に変化するが、乱数ｒの効果によって、仮にｄ０，ｄ’０が既知であった場合でも、いずれのクロックタイミングにおいてもハミング距離を計算することはできない。また、タイミングｔｎ＋１，ｔｎ＋２では、最終演算結果を保持するレジスタ２０８がｄ’ｎ−２−＞（ｄｎ（＋）ｒ’）−＞ｄ’ｎ−＞ｄ１の順に変化するが、やはり乱数ｒ’の効果によって、仮に暗号文ｄｎ，ｄ’ｎが既知であった場合でも、いずれのクロックタイミングにおいてもハミング距離を計算することはできない。
【０１０４】
レジスタ２１５で次ブロックの処理を行うタイミングｔｎ＋２，ｔｎ＋３，ｔｎ＋４においても乱数ｒ’の効果によっていずれのクロックタイミングでもハミング距離を計算することはできない。以下同様に、パイプライン処理する並列データのうち前半のブロック演算処理（１クロック周期早い処理）の初期ラウンドと最終ラウンドのみをマスク化することにより、最小限の演算コストでＣＰＡ攻撃ポイントとなるクロックタイミングにおけるレジスタハミングの計算を回避することができる。尚、本実施形態では第１の実施形態と同様に、乱数生成部２０５が生成する乱数は真性乱数または擬似乱数が用いられ、暗号化の処理単位である１ブロック単位の演算毎に新しい値に更新される。
【０１０５】
また、本実施形態では、各レジスタの初期状態（例えば０）からの変化量を計算不可能とするため１クロック周期遅れでパイプライン処理する並列データのうち前半のデータを対象にマスク化を行ったが、並列データの後半のデータについても前半とは異なる乱数でマスク化を行うようにしても構わない。
【０１０６】
このように、本実施形態に係る暗号演算回路装置２００は、２段のパイプライン構成になっているので、第１の実施形態に係る暗号演算回路装置１００に比べてブロック暗号アルゴリズムにおけるスループットを向上させることができ、特に前半データのみ初期ラウンドと最終ラウンドでマスク化する処理を行うだけの最小限の演算コストでＣＰＡ攻撃を防御することができる。
【０１０７】
（第３の実施形態）
次に、第３の実施形態に係る暗号演算回路装置３００について説明する。第１の実施形態に係る暗号演算回路装置１００および第２の実施形態に係る暗号演算回路装置２００では、ＡＥＳに代表されるブロック暗号アルゴリズムに適用した場合の例を示したが、公開鍵暗号アルゴリズムにおいて冪乗剰余演算や楕円スカラー倍演算を実行する暗号モジュールに対しても、組合せ回路とレジスタが直列に接続されて巡回的に処理される構成のハードウェア実装を行う場合には、先に示したブロック暗号アルゴリズムの場合と同様に本発明を適用することができる。以下、本実施形態では、このような公開鍵暗号アルゴリズムの演算で利用される冪乗剰余演算や楕円スカラー倍演算に本発明を適用した場合の例を示す。
【０１０８】
図８は、第３の実施形態に係る暗号演算回路装置３００の構成図である。図８において、暗号演算回路装置３００は、攪拌部３０１と、指数展開部３０２と、制御部３５０とで構成される。尚、図８の暗号演算回路装置３００の攪拌部３０１の基本構成は、第１の実施形態で示した図１の攪拌部１０１と同じである。
【０１０９】
図８において、攪拌部３０１は、外部から入力する平文（または暗号文）とラウンド処理後のデータと指数展開部３０２の出力とを用いて所定の関数処理を行う組合せ回路３０３と、乱数生成部３０４と、乱数生成部３０４が出力する乱数データまたはＡｌｌ＝０（全て０のデータ）を選択するセレクタ３０５と、セレクタ３０５の出力データと組合せ回路３０３の出力データとの排他的論理和を求めるＥＸＯＲ回路３０６（第１の排他的論理和演算部）と、ＥＸＯＲ回路３０６の出力データを一時的に保持するレジスタ３０７と、セレクタ３０５の出力データを保持するレジスタ３０８と、レジスタ３０８の出力データとレジスタ３０７の出力データとの排他的論理和を求めるＥＸＯＲ回路３０９（第２の排他的論理和演算部）と、ＥＸＯＲ回路３０９の出力データまたはＡｌｌ＝０（全て０のデータ）を選択して外部に出力するセレクタ３１０とで構成される。ここで、本実施形態の図８に示した組合せ回路３０３は、指数展開部３０２の出力値に基づいて冪乗剰余演算または楕円スカラー倍演算を行う回路で構成される。尚、冪乗剰余演算または楕円スカラー倍演算については周知の演算であり、従来技術の図１３と同じである。
【０１１０】
また、制御部３５０は、レジスタ３０７およびレジスタ３０８にリセット信号を与え、レジスタ３０７，レジスタ３０８および乱数生成部３０４にクロックを供給し、セレクタ３０５に制御信号１，セレクタ３１０に制御信号２をそれぞれ出力して攪拌部３０１の処理タイミングを制御する。ここで、セレクタ３０５の制御信号１は、レジスタ３０７に処理関数の結果を格納する際に乱数でマスク化を行うかまたはマスク化を行わずにレジスタ３０７に格納するかを選択する制御信号で、レジスタ３０８を介して出力されるので１クロック周期遅延されたタイミングでレジスタ３０８に格納されたデータを読み出す際にアンマスク化を行うかまたはアンマスク化を行わないかを選択する制御信号でもある。制御信号２は、最終的な演算結果を外部に出力するか否かを選択するための制御信号である。
【０１１１】
尚、本実施形態では、指数をバイナリー展開して左バイナリ法により最上位ビットから冪乗剰余演算または楕円スカラー倍演算を実行する場合を示しており、バイナリ展開した指数１ビット分の演算を１クロックで処理する例を想定している。また、組合せ回路３０３で計算された指数１ビット分の演算結果は、演算中間値としてレジスタ３０７に格納され、展開ビット長の長さ分演算が繰り返された最終結果が外部に出力される。
【０１１２】
次に、図８の暗号演算回路装置３００の動作について図９のタイミングチャートを用いて詳しく説明する。図９は、制御部３５０が出力するリセット信号と、クロックと、制御信号１と、制御信号２と、制御信号３と、レジスタ３０７と、レジスタ３０８との処理タイミングの関係を描いたタイミングチャートである。尚、図９において、初期ラウンドから最終ラウンドまでの（ｎ＋１）回の全ラウンドを１ブロック演算とし、１ブロック演算毎に処理結果の暗号文（ｏｒ平文）が外部に出力される。また、図８の組合せ回路３０３による処理関数は１クロック周期毎に実行され、レジスタ３０７およびレジスタ３０８は１クロック周期で入力データを保持する。尚、レジスタ３０７およびレジスタ３０８の初期値はリセット信号がＬｏｗになった時に所定値（例えば全て０）に初期化されるものとする。尚、レジスタ３０８にはリセット信号を入れなくても動作に影響はないが、図８ではリセット時の初期値を明確にするためにレジスタ３０８リセット信号を入力してＡｌｌ＝０に初期化している。また、図９において、タイミングｔ０からｔｎ＋１の表記はクロック周期毎のタイミング位置を示し、ｄｎ−１からｄ０は組合せ回路３０３による処理関数の各ラウンド毎の出力データを示している。例えばｄｎ−１は初期ラウンド処理関数の結果の値、ｄｎ−２は第１ラウンド処理関数の結果の値、ｄ０は最終ラウンド処理関数の結果の値をそれぞれ示している。また、ｒｎ−１からｒ０は乱数生成部１０５が１クロック周期毎の更新頻度で生成する乱数を示している。さらに、（＋）は排他的論理和演算子を示し、例えばｄｎ−１（＋）ｒｎ−１はｄｎ−１とｒｎ−１の排他的論理和演算値となる。
【０１１３】
図９において、先ずタイミングｔ０では、リセットはＬｏｗに制御されているのでレジスタ３０７およびレジスタ３０８はＡｌｌ＝０に初期化されている。また、セレクタ３１０の制御信号２はＨｉｇｈなのでＡｌｌ＝０が外部に出力されている。尚、タイミングｔ０の後、リセットはＨｉｇｈに制御されて解除される。
【０１１４】
次のタイミングｔ１では、制御信号１がＬｏｗに制御されるので、乱数生成部３０４が生成した乱数データｒｎ−１がＥＸＯＲ回路３０６に入力され、組合せ回路３０３で初期ラウンド処理された演算結果ｄｎ−１と排他的論理和演算を行ってマスク化し、マスク化した演算結果（ｄｎ−１（＋）ｒｎ−１）がレジスタ３０７に格納される。一方、レジスタ３０８には、乱数生成部３０４が生成した乱数データｒｎ−１が格納される。
【０１１５】
この結果、タイミングｔ１では、レジスタ３０７にはマスク化した演算結果（ｄｎ−１（＋）ｒｎ−１）が格納され、レジスタ３０８には乱数データｒｎ−１が格納される。
【０１１６】
次のタイミングｔ２では、レジスタ３０７に格納されたマスク化した演算結果（ｄｎ−１（＋）ｒｎ−１）とレジスタ３０８に格納された乱数データｒｎ−１との排他的論理和演算を行ってＥＸＯＲ回路３０９で行ってアンマスク化し、アンマスク化した演算結果ｄｎ−１はセレクタ３１０および組合せ回路３０３にフィードバックされる。尚、セレクタ３１０の制御信号２はＨｉｇｈのままなので外部には出力されない。組合せ回路３０３にフィードバックされた演算結果ｄｎ−１は組合せ回路３０３で第１ラウンドの関数処理が行われ、その演算結果ｄｎ−２がレジスタ３０７に格納される。一方、この時のセレクタ３０５の制御信号１はＨｉｇｈに制御されるので、レジスタ３０８にはＡｌｌ＝０が格納される。
【０１１７】
この結果、タイミングｔ２では、レジスタ３０７には第１ラウンドの演算結果ｄｎ−２が格納され、レジスタ３０８には０が格納される。
【０１１８】
次のタイミングｔ３では、レジスタ３０８には０が格納されているのでＥＸＯＲ回路３０９はバイパスされ、レジスタ３０７に格納されていた第１ラウンドの演算結果ｄｎ−２はそのまま組合せ回路３０３にフィードバックされて第２ラウンドの関数処理が行われ、その演算結果ｄｎ−３がＥＸＯＲ回路３０６に出力される。この時、セレクタ３０５の制御信号１がＬｏｗに制御されるので、乱数生成部３０４が生成した乱数データｒｎ−３がＥＸＯＲ回路３０６に入力され、組合せ回路３０３の第２ラウンドの演算結果ｄｎ−３と排他的論理和演算を行ってマスク化し、マスク化した演算結果（ｄｎ−３（＋）ｒｎ−３）がレジスタ３０７に格納される。一方、レジスタ３０８には、乱数生成部３０４が生成した乱数データｒｎ−３が格納される。
【０１１９】
この結果、タイミングｔ３では、レジスタ３０７にはマスク化した演算結果（ｄｎ−３（＋）ｒｎ−３）が格納され、レジスタ３０８には乱数データｒｎ−３が格納される。
【０１２０】
この後、タイミングｔ１からタイミングｔｎまで同様の処理が繰り返し行われる。
【０１２１】
最終ラウンドのタイミングｔｎ＋１では、レジスタ３０７に格納されたマスク化した演算結果（ｄ０（＋）ｒ０）とレジスタ３０８に格納された乱数データｒ０との排他的論理和演算を行ってＥＸＯＲ回路３０９で行ってアンマスク化し、アンマスク化した演算結果ｄ０はセレクタ３１０および組合せ回路３０３にフィードバックされる。この時、セレクタ３１０の制御信号２はＬｏｗに制御されるので、セレクタ３１０を介して最終ラウンドの演算結果ｄ０が外部に暗号文（ｏｒ平文）として出力される。
【０１２２】
ここで、図９に示したように、乱数でマスク化するのは２クロックに１回の頻度で行われる。つまり、レジスタ３０７に演算結果を格納する際に、組合せ回路３０３で展開した指数２ビット分の処理に対して１回の頻度で（すなわち２クロックの処理に対して１回の頻度で）乱数との排他的論理和演算を行った値がレジスタ３０７に格納される。そして、同じ動作を最下位ビットｄ０に対する処理まで継続して一連の暗号化演算を完了し、ｔｎ＋１のタイミングで演算結果を取得できるよう制御部３５０によって制御される。この一連の動作において、レジスタ３０７の値は（ｄｎ−１（＋）ｒｎ−１）−＞ｄｎ−２−＞（ｄｎ−３（＋）ｒｎ−３）−＞ｄｎ−４−＞・・・・・（ｄ２（＋）ｒ２）−＞ｄ１−＞（ｄ０（＋）ｒ０）となり、仮にｄｉの値（ｉは０からｎの整数）を取得することができたとしても、どのクロックタイミングにおいても乱数ｒｉの効果により、ハミング距離が（ｄｉ（＋）ｄｉ−１（＋）ｒｉ）となるため、レジスタのハミング距離の計算を回避することができる。
【０１２３】
尚、マスク化に用いる乱数は真性乱数または擬似乱数が用いられ、少なくとも展開指数２ビットのうち１ビットの演算毎に新しい値に更新される。本実施例ではｎが奇数の場合を示したが、偶数の場合でも同様に動作する。また、展開指数１ビット毎に毎回新しい乱数に更新し、乱数値と１クロック毎の演算結果との排他的論理和演算を行った値を毎クロックごとにレジスタに格納しても構わない。
【０１２４】
このように、本実施形態に係る暗号演算回路装置３００では、レジスタ３０７の格納値を毎回異なる乱数でマスク化するので、展開した指数ビット毎の処理におけるレジスタ中間値のハミング距離を計算することができない。この結果、冪乗剰余演算や楕円スカラー倍演算に対するＣＰＡ攻撃を防御することができる。
【０１２５】
以上、第１の実施形態に係る暗号演算回路装置１００および第２の実施形態に係る暗号演算回路装置２００ではＡＥＳに代表されるブロック暗号アルゴリズムに適用した場合の例を示し、基本処理関数に変更を加えることなく、少ない処理量およびオーバヘッドで、初期ラウンド演算前後および最終ラウンド演算前後のレジスタ値に関わるハミング距離の逆算を防御することができる。また、第３の実施形態に係る暗号演算回路装置３００では公開鍵暗号アルゴリズムに適用した場合の例を示し、この場合でも基本処理関数に変更を加えることなく、指数展開された冪乗剰余演算または楕円スカラー倍演算における処理関数の演算結果を保持したレジスタ値のクロック遷移に伴うハミング距離の逆算を少ない処理量およびオーバヘッドで防御することができる。
【０１２６】
以上、本発明に係る暗号演算回路装置の各実施形態について説明してきたが、その精神またはその主要な特徴から逸脱することなく他の多様な形で実施することができる。そのため、上述した実施形態はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。本発明は、特許請求の範囲によって示されるものであって、本発明は明細書本文にはなんら拘束されない。さらに、特許請求の範囲の均など範囲に属する変形や変更は、全て本発明の範囲内である。
【符号の説明】
【０１２７】
１，２，３，４，１１，１２，１３，１４，１５，１６，１７，１８，２１，２２，ａ，ｂ，ｃ，ｄ・・・制御信号
１００，２００，３００，９００，９６０・・・暗号演算回路装置
１０１，２０１，３０１，９０１，９６１・・・攪拌部
１０３，１０６，１０９，１１１，２０３，２０６，２０９，２１１，２１３，２１６，２１８，２１９，９０３，９０６，９０７，９６５・・・セレクタ
１０４，２０４，２１２，３０３，９０４，９０９，９６３・・・組合せ回路
１０５，２０５，３０４・・・乱数生成部
１０８，２０８，２１５，３０７，３０８，９０５，９０８，９６４・・・レジスタ
１５０，２５０，３５０，９５０，９７０・・・制御部
１０７，１１０，２０７，２１０，２１４，２１７，３０６，３０９・・・ＥＸＯＲ回路
３０２，９６２・・・指数展開部
９０２・・・鍵スケジューリング部
【図１】
2010245753.tif 000005
【図２】
2010245753.tif 000006
【図３】
2010245753.tif 000007
【図４】
2010245753.tif 000008
【図５】
2010245753.tif 000009
【図６】
2010245753.tif 000010
【図７】
2010245753.tif 000011
【図８】
2010245753.tif 000012
【図９】
2010245753.tif 000013
【図１０】
2010245753.tif 000014
【図１１】
2010245753.tif 000015
【図１２】
2010245753.tif 000016
【図１３】
2010245753.tif 000017