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