グリッジの発生を抑制し回路全体の消費電力を効果的に削減できる暗号処理装置を提供する。暗号処理装置は、拡大鍵を入力し入力データをAESアルゴリズムにしたがって暗号化する暗号化ラウンド関数処理部520と、暗号化ラウンド関数処理部に関するデータを保持するラッチ601と、拡大鍵を入力し入力データを復号する復号ラウンド関数処理部521と、復号ラウンド関数処理部に関するデータを保持するラッチ602と、現在の処理が暗号化/復号のいずれかに依存して、暗号化ラウンド関数処理部側の出力と復号ラウンド関数処理部側の出力のいずれかを選択する選択部503と、暗号化処理時にラッチ602の状態を維持し、復号処理時にラッチ601の状態を維持する制御部10とを備える。近年のインターネット等を利用した電子商取引市場の拡大により、通信データの盗聴、通信相手へのなりすまし、通信内容の改竄などへの対策が必要となっている。様々な電子機器へ適用されることが予想される。暗号化技術における重要な要素技術として共通鍵ブロック暗号がある。共通鍵ブロック暗号は、処理単位となる所定ビット長のデータブロックを、鍵となる所定ビット長のデータを使用して暗号化する。暗号化されたデータブロックは、暗号化において使用された鍵を、用いて復号される。ここで、本明細書において、処理単位となるデータブロックの所定ビット長を「ブロック長」といい、鍵となるデータを「秘密鍵」といい、秘密鍵の所定ビット長を「鍵長」という。Standard(以下「DES」という)は、従来広く使用されてきた共通鍵ブロック暗号である。向上し、実用的な時間内に、DESによる鍵を総当り攻撃できるようになっている。したがって、DESでは安全上問題がある。Standard(以下「AES」という)を2001年に制定した。AESは、そのブロック長が128ビットであり、その鍵長は、128ビット、192ビット、256ビットからいずれか一つを選択できる。IPsec、SSLをはじめ無線LANなどの標準規格において、AESを採用することが検討されており、AESは、次世代共通鍵ブロック暗号のデファクトスタンダードとして幅広く使用されることが期待されている。AESの処理は、非特許文献1において詳細に規定されている。【0006】AESを含む共通鍵ブロック暗号化処理及びその復号処理の実装形態は、2つありうる。その1つはソフトウェアによるものであり、もう1つはハードウェアによるものである。処理の高速化あるいは低消費電力化を図るために、ハードウェアによる実装が望ましい。通信において暗号を使用すると、暗号化処理及びその復号処理は、通信処理全体の中で大きな割合を占めることが知られており、今後の電子機器開発では、ハードウェアにより、共通鍵ブロック暗号化処理及びその復号処理を実装することが重要になるであろう。従来のハードウェア実装で達成すべき目標は、回路の小面積化や処理の高速化であった。その理由の1つは、電力消費により生ずる発熱により冷却コストやパッケージコストが上昇する点である。理由のもう1つは、バッテリー駆動の携帯機器等において、消費エネルギーがバッテリー時間に影響を与える点である。エネルギー化を図ることは必要である。この点について、例えば、非特許文献2は、AESアルゴリズムのハードウェア実装においては回路の一部の低消費電力化を図る手法を開示する。【0008】ところが、後に本発明者らの考察において、詳述するように、非特許文献2により、AESを構成する部分回路単体の低消費電力化を図るだけでは、不十分である。具体的には、非特許文献2によると、グリッジ(本来の処理には不要なゲートの出力変化(以下「スイッチング」という))が発生し、回路全体の消費電力を十分に削減できないという問題点があった。【0009】そこで本発明は、グリッジの発生を抑制し回路全体の消費電力を効果的に削減できる暗号処理装置を提供することを目的とする。第1の発明に係る暗号処理装置は、拡大鍵を入力し入力データをAESアルゴリズムにしたがって暗号化する暗号化ラウンド関数処理部と、暗号化ラウンド関数処理部に関するデータを保持する第1のデータ保持部と、拡大鍵を入力し入力データを復号する復号ラウンド関数処理部と、復号ラウンド関数処理部に関するデータを保持する第2のデータ保持部と、現在の処理が暗号化/復号のいずれかに依存して、暗号化ラウンド関数処理部側の出力と復号ラウンド関数処理部側の出力のいずれかを選択する選択部と、現在の処理が暗号化であるとき第2のデータ保持部の状態を維持し、現在の処理が復号であるとき第1のデータ保持部の状態を維持する制御部とを備える。【0011】この構成により、現在の処理が暗号化であるとき演算処理に寄与しない第2のデータ保持部についてのグリッジが発生せず、現在の処理が復号であるとき演算処理に寄与しない第1のデータ保持部についてのグリッジが発生しない。このようにグリッジの発生が抑制され、回路全体の消費電力を効果的に削減できる。第2の発明に係る暗号処理装置では、第1のデータ保持部は暗号化ラウンド関数処理部の入力側に接続される第1のラッチを含み、第2のデータ保持部は復号ラウンド関数処理部の入力側に接続される第2のラッチを含む。【0013】この構成により、現在の処理が暗号化であるとき演算処理に寄与しない第2のラッチについてのグリッジが発生せず、現在の処理が復号であるとき演算処理に寄与しない第1のラッチについてのグリッジが発生しない。このようにグリッジの発生が抑制され、回路全体の消費電力を効果的に削減できる。第3の発明に係る暗号処理装置では、第1のデータ保持部は暗号化ラウンド関数処理部の出力側に接続される第1のレジスタを含み、第2のデータ保持部は復号ラウンド関数処理部の出力側に接続される第2のレジスタを含む。【0015】この構成により、ラッチでなくレジスタで、第1、第2のデータ保持部を構成でき、その結果、ゲート数を削減してコストを抑制できる。第4の発明に係る暗号処理装置では、暗号化ラウンド関数処理部は複数の要素から構成され、復号ラウンド関数処理部は複数の要素から構成され、暗号化ラウンド関数処理部の複数の要素の少なくとも一部と復号ラウンド関数処理部の複数の要素の少なくとも一部とは共通化されている。【0017】この構成において、第1のデータ保持部の複数の要素の少なくとも一部と第2のデータ保持部の複数の要素の少なくとも一部とを共通化し、ゲート数を削減してコストを抑制できる。第5の発明に係る暗号処理装置では、暗号化ラウンド関数処理部は、AESアルゴリズムの暗号化ラウンド関数のうちN(N:AESアルゴリズムのブロック長以下の自然数)ビット処理を行い、復号ラウンド関数処理部は、AESアルゴリズムの復号ラウンド関数のうちNビット処理を行い、暗号化ラウンド関数処理部及び復号ラウンド関数処理部は、処理ループによる繰り返し処理を行う。【0019】この構成により、同じ要素を繰り返し使用することができるため、ゲート数を削減してコストを抑制できる。第6の発明に係る暗号処理装置は、秘密鍵に基づいて拡大鍵を生成する鍵スケジュール部をさらに備える。【0021】この構成により、外部から拡大鍵を入力しなくとも、暗号処理装置の内部で拡大鍵を生成でき、入力処理を簡易化できる。本発明によれば、演算に寄与しないグリッジの発生を抑制し、回路全体の消費電力を効果的に削減できる。以下、図面を参照しながら、本発明の実施の形態について説明する。各形態の具体的構成を説明するに先立ち、次に本発明者らによる考察を述べる。以下の各形態は例示に過ぎないのであって、本発明の趣旨を逸脱しない限りにおいて、以下の各形態以外の内容であっても本発明に包含されることは言うまでもない。【0024】(考察)図1は、本発明の考察における暗号化処理装置のブロック図である。この装置は、暗号化ラウンド関数処理部101と、鍵スケジュール部102とを備える。鍵スケジュール部102は、秘密鍵106を入力し、これに基づいて拡大鍵EK0〜EK10を生成する。ここでは、拡大鍵EK0〜EK10のそれぞれは、128ビットデータであるものとする。暗号化ラウンド関数処理部101は、排他的論理和(以下「EXOR」という)演算器108と、暗号化ラウンド関数部104と最終暗号化ラウンド関数部107とを備える。図1において、複数の暗号化ラウンド関数部104が存在するように記載しているが、後述の各形態では、処理ループによるN回の繰り返し処理を行うようにしているので、暗号化ラウンド関数部104及び最終暗号化ラウンド関数部107は、1つの回路ブロックで済む。拡大鍵EK0はEXOR演算器108で使用され、拡大鍵EK1〜EK9は暗号化ラウンド関数部104で使用され、拡大鍵EK10は暗号化最終ラウンド関数部107で使用される。暗号化ラウンド関数処理部101において、EXOR演算器108は、入力データブロック103と拡大鍵EK0とのEXOR演算を行い、その結果ER1を暗号化ラウンド関数部104に出力する。【0028】1回目に暗号化ラウンド関数部104は、結果ER1を入力し暗号化ラウンド関数による演算を行い、その結果ER2を自分自身に出力する。図1は、128ビット鍵長におけるAESの暗号化処理を示しており、このときの繰り返し回数は「9」である。数mを「2」以上「9」以下の整数とすると、i回目に暗号化ラウンド関数部104は、結果ERmを入力し暗号化ラウンド関数による演算を行い、その結果ERm+1を自分自身に出力する。暗号化ラウンド関数部104の繰り返し回数は、鍵長によって変化する。具体的には、鍵長が128ビットである場合は9回、鍵長が192ビットである場合は11回、鍵長が256ビットである場合は13回となる。最後に、暗号化最終ラウンド関数部107は結果ER10を入力し暗号化ラウンド関数による演算を行い、その結果ER10を出力データブロック105として出力する。以下、EXOR演算器108の処理のように、ラウンド関数の繰り返し前に行う処理を「初期変換」といい、暗号化最終ラウンド関数部107の処理のようにラウンド関数の繰り返し後に行う処理を「最終変換」という。暗号化最終ラウンド関数部107を含めたラウンド関数の繰り返し回数をNbで示す。ちなみに鍵長が128ビットの場合、Nb=10である。図2は、本発明の考察における暗号化ラウンド関数部のブロック図である。暗号化ラウンド関数部104は128ビット入出力の関数であり、SubBytes処理部201と、ShiftRows処理部202と、MixColumns処理部203と、AddRoundKey処理部204とを直列に接続して構成される。【0034】まず、SubBytes処理部201は、128ビットデータである入力ERi(iは0からNbまでの整数)を8ビットデータブロックに分割し、すべての8ビットデータブロックに対して非線形変換する。ShiftRows処理部202は、128ビットデータであるSubBytes処理部201の結果を8ビットデータブロックに分割し所定の方法で並べ替える。MixColumns処理部203は、128ビットデータであるShiftRows処理部202の結果を32ビットデータブロックに分割し、32ビットを1処理単位とする線形変換を行う。最後に、AddRoundKey処理部204は、MixColumns処理の結果と拡大鍵EKiとのEXOR演算を行い、その結果ERi+1を出力する。暗号化最終ラウンド関数部107は、図2に示した処理のうちMixColumns処理部203による処理を行わない点を除き、暗号化ラウンド関数部104と同じ処理を行う。図3は、本発明の考察における復号処理装置のブロック図である。この装置は、復号ラウンド関数処理部301と鍵スケジュール部102とを備える。鍵スケジュール部102は、図1のそれと同じである。暗号ラウンド関数処理部301は、排他的論理和(以下「EXOR」という)演算器108と、復号ラウンド関数部304と最終復号ラウンド関数部307とを備える。図3において、複数の復号ラウンド関数部304が存在するように記載しているが、後述の各形態では、処理ループによるN回の繰り返し処理を行うようにしているので、復号ラウンド関数部304及び最終復号ラウンド関数部307は、1つの回路ブロックで済む。拡大鍵EK10はEXOR演算器108で使用され、拡大鍵EK9〜EK1は復号ラウンド関数部304で使用され、拡大鍵EK0は復号最終ラウンド関数部307で使用される。復号ラウンド関数部304が使用する復号ラウンド関数は、図1の暗号化ラウンド関数部107が使用する関数の逆関数である。復号ラウンド関数処理部301において、EXOR演算器108は、入力データブロック103と拡大鍵EK10とのEXOR演算を行い、その結果DR1を復号ラウンド関数部304に出力する。【0039】1回目に復号ラウンド関数部304は、結果DR1を入力し復号ラウンド関数による演算を行い、その結果DR2を自分自身に出力する。図3は、128ビット鍵長におけるAESの復号処理を示しており、このときの繰り返し回数は「9」である。数mを「2」以上「9」以下の整数とすると、i回目に復号ラウンド関数部304は、結果DRmを入力し復号ラウンド関数による演算を行い、その結果DRm+1を自分自身に出力する。復号ラウンド関数部304の繰り返し回数は、鍵長によって変化する。具体的には、鍵長が128ビットである場合は9回、鍵長が192ビットである場合は11回、鍵長が256ビットである場合は13回となる。最後に、復号最終ラウンド関数部307は結果DR10を入力し復号ラウンド関数による演算を行い、その結果DR10を出力データブロック105として出力する。図2は、本発明の考察における暗号化ラウンド関数部のブロック図である。暗号化ラウンド関数部104は128ビット入出力の関数であり、SubBytes処理部201と、ShiftRows処理部202と、MixColumns処理部203と、AddRoundKey処理部204とを直列に接続して構成される。【0044】まず、SubBytes処理部201は、128ビットデータである入力ERi(iは0からNbまでの整数)を8ビットデータブロックに分割し、すべての8ビットデータブロックに対して非線形変換する。ShiftRows処理部202は、128ビットデータであるSubBytes処理部201の結果を8ビットデータブロックに分割し所定の方法で並べ替える。MixColumns処理部203は、128ビットデータであるShiftRows処理部202の結果を32ビットデータブロックに分割し、32ビットを1処理単位とする線形変換を行う。最後に、AddRoundKey処理部204は、MixColumns処理の結果と拡大鍵EKiとのEXOR演算を行い、その結果ERi+1を出力する。暗号化最終ラウンド関数部107は、図2に示した処理のうちMixColumns処理部203による処理を行わない点を除き、暗号化ラウンド関数部104と同じ処理を行う。図4は、本発明の考察における復号ラウンド関数部のブロック図である。復号ラウンド関数部304は128ビット入出力の関数であり、復号ラウンド関数部304が使用する関数は、暗号化ラウンド関数部104が使用する関数の逆関数である。【0047】まず、InvShiftRows処理部401は、入力DRi(iは0からNbまでの整数)に対し、ShiftRows処理部202の逆関数である関数による処理を行う。InvSubBytes処理部402は、128ビットデータであるInvShiftRows処理部401の結果を、8ビットデータブロックに分割し、すべての8ビットデータブロックに対してSubBytes処理部で施した非線形変換の逆変換を行う。【0048】AddRoundKey処理部206は、InvSubBytes処理部402の結果と拡大鍵DKiとのEXOR演算を行う。最後に、InvMixColumns処理部404は、128ビットデータであるAddRoundKey処理部206の結果を、32ビットデータブロックに分割し、MixColumns処理部203でなされた32ビットを1処理単位とする線形変換の逆変換を行い、結果DRi+1を出力する。【0049】さて次に、図5を参照しながら、図1の暗号化処理装置と図3の復号処理装置とを、1つの暗号処理装置にまとめて実装することを考える。図5は、本発明の考察における暗号処理装置のブロック図である。図5において、暗号化ラウンド関数処理部520は、拡大鍵EKiを入力し入力データブロック103をAESアルゴリズムにしたがって暗号化する。復号ラウンド関数処理部521は、拡大鍵DKiを入力し入力データブロック103を復号する。bit(N:AESのブロック長である128以下の自然数)処理を行う。bitが鍵スケジュール部から供給される。暗号化ラウンド関数処理部520のセレクタ501は、暗号化ラウンド関数処理部520が暗号化ラウンド関数部104の処理を実行するか最終暗号化ラウンド関数部107の処理を実行するかによって、AddRoundKey処理部204の入力を、MixColumns処理部203とShiftRows処理部202とのいずれかに切り替える。切り替え信号511は、図5に示す回路で実行する処理(暗号化または復号)と現在処理しているラウンド数を管理している制御部10から出力される。bitが鍵スケジュール部102から供給される。復号ラウンド関数処理部521のセレクタ502は、暗号化ラウンド関数処理部520が暗号化ラウンド関数部104の処理を実行するか最終暗号化ラウンド関数部107の処理を実行するかにより入力を、InvMixColumns処理部403とAddRoundKey処理部204のとのいずれかに切り替える。切り替え信号512は、制御部10が出力される。【0055】EXOR演算器108は、暗号処理装置が暗号化処理/復号処理のいずれを行うにかかわらず入力データブロック103と拡大鍵との排他的論理和を求め、これをセレクタ503へ出力する。セレクタ503には、暗号化ラウンド関数処理部520の出力側と復号ラウンド関数処理部521の出力側とが接続される。【0056】セレクタ503は、暗号処理装置が暗号化処理/復号処理のいずれを行うにかかわらず初期変換を実行している場合、EXOR演算器108からの入力を出力する。bitの結果を出力する。bitの結果を出力する。切り替え信号513は、制御部10が出力する。【0057】レジスタ504は、クロック510の立ち上がりに同期しセレクタ503の出力を保持する。所定の回数だけラウンド関数が実行された後に、レジスタ504の出力が出力データブロック105として外部へ出力される。切り替え信号514は、制御部10が出力する。N=128の場合は、セレクタ505は省略できる。切り替え信号515は、制御部10が出力する。N=128の場合、セレクタ506は省略できる。図5に示す構成ではレジスタ504の出力データは、暗号化ラウンド関数処理部520と復号ラウンド関数処理部521の両方に入力されるため、暗号化処理実行の場合は復号ラウンド関数処理部521において、復号処理実行の場合は暗号化ラウンド関数処理部520において、それぞれ処理に無関係なスイッチング、即ち、グリッジが発生する。現在LSIなどで一般に使用されているCMOS構成では、スイッチングに起因する電力消費が支配的である。そのため、図5に示す構成では、グリッジにより、無駄でかつ無視できない電力消費が生じる。【0062】さらに、AESをはじめとする共通鍵ブロック暗号を用いると、グリッジが発生しやすく、グリッジによる無駄な電力消費が生じる傾向がある。以下にその理由を記す。共通鍵ブロック暗号は、入力データブロックが1ビット変化すると出力データブロックのすべてのビットが変化する確率が「1/2」であるという性質を持っている。Criterion(以下「SAC」という)と呼ばれており、共通鍵ブロック暗号の安全性を測る指標の一つである。共通鍵ブロック暗号の部分処理における入力の変化は、すべての出力の変化に大きな影響を与える。そのような性質を持つ処理を回路に実装する場合、回路入力が変化するタイミングが不揃いであると、遅れて変化した回路入力に反応して変化する回路出力に伴うゲートのスイッチングが多くなる。このとき、その直前に変化した回路入力に反応して変化する出力に伴うゲートのスイッチングが本来の計算に寄与しないグリッジとなる場合が多くなる。図5に示す構成では、レジスタ504の出力は、クロック510に同期して一斉に変化するものの、セレクタ505またはセレクタ506における切り替え信号514の遅延などにより、ラウンド関数処理部520への入力変化が不揃いになる。以上のように、非特許文献2のようにAESを構成する部分回路単体の低消費電力化を図るだけでは、回路全体の電力消費を十分に削減することはできない。以上で、考察を終える。次に、以上の考察をふまえ、本発明の各形態の具体的構成を説明する。以上の考察において述べた構成要素と同様の構成要素については、同一符号を付すことにより説明を省略する。【0068】(実施の形態1)図6は、本発明の実施の形態1における暗号処理装置のブロック図である。図1に示すように、本形態の暗号処理装置は、次の要素を備える。暗号化ラウンド関数処理部520は、拡大鍵を入力し入力データをAESアルゴリズムにしたがって暗号化する。具体的には、暗号化ラウンド関数処理部520は、AESアルゴリズムの暗号化ラウンド関数のうちN(N:AESアルゴリズムのブロック長以下の自然数)ビット処理を繰り返し行う。図1に示したように、拡大鍵は、秘密鍵に基づいて拡大鍵を生成する鍵スケジュール部102から供給される。【0071】ラッチ601は、暗号化ラウンド関数処理部に関するデータを保持する第1のデータ保持部に相当し、暗号化ラウンド関数処理部520の入力側とセレクタ505との間に接続される。復号ラウンド関数処理部521は、鍵スケジュール部102から供給される拡大鍵を入力し入力データを復号する。具体的には、復号ラウンド関数処理部521は、AESアルゴリズムの復号ラウンド関数のうちNビット処理を繰り返し行う。【0073】ラッチ602は、復号ラウンド関数処理部に関するデータを保持する第2のデータ保持部に相当し、復号ラウンド関数処理部521の入力側とセレクタ506との間に接続される。【0074】セレクタ503は、現在の処理が暗号化/復号のいずれかに依存して、暗号化ラウンド関数処理部側の出力と復号ラウンド関数処理部側の出力のいずれかを選択する選択部に相当する。初期変換時には、セレクタ503は、EXOR演算器108の出力を選択する。制御部10は、現在の処理が暗号化であるときラッチ602の状態を維持し、現在の処理が復号であるときラッチ601の状態を維持する。図6において、ラッチ601は、制御部10から出力される暗号化/復号切替信号603が暗号化を示しているとき、ラッチ601の入力データをそのまま出力する。その信号603が復号を示しているとき、復号を示す直前の出力データをそのまま保持する。この保持により、グリッジの発生を抑制できる。【0077】ラッチ602は、制御部10から出力される暗号化/復号切替信号603が復号を示しているとき、ラッチ602の入力データをそのまま出力する。ラッチ602は、その信号603が暗号化を示しているとき暗号化を示す直前の出力データをそのまま保持する。この保持により、グリッジの発生を抑制できる。本形態によれば、暗号化処理の場合はラッチ602の出力が変化しないので復号ラウンド関数処理部521でグリッジは発生しない。復号処理の場合はラッチ601の出力が変化しないので暗号化ラウンド関数処理部520でグリッジは発生しない。このことから、処理実行に不要なスイッチングを削減することができ、回路全体の消費電力、消費エネルギーを削減できる。【0079】(実施の形態2)図6は、本発明の実施の形態2における暗号処理装置のブロック図である。実施の形態1では、EXOR演算器108のような単純な演算器を除いて、暗号化ラウンド関数処理部520と復号ラウンド関数処理部521で使用する演算器を個別に実装している。【0080】しかしながら、復号ラウンド関数部521のAddRoundKey処理部204は、セレクタ503の後段に配置しても差し支えない。そこで本形態では、図7に示すように、AddRoundKey処理部204は、セレクタ503の後段に配置し、AddRoundKey処理部204を、暗号化ラウンド関数処理部520と復号ラウンド関数処理部521とにおいて、共通化している。【0081】また、AddRoundKey処理部204の処理内容は、EXOR演算であるので、AddRoundKey204とEXOR演算器演算108も共有することもできる。EXOR演算器を共有することにより、回路のゲート数を削減することができ、コスト削減を図ることができる。【0083】(実施の形態3)実施の形態2では、ラッチ601、ラッチ602を使用してレジスタ504出力データ伝達を制御している。Analysis)の適用などの都合により、LSI実装上ラッチを使用することができないことが多い。【0084】そこで本形態では、ラッチに変えて、レジスタを用いる構成を採用している。図8は、本発明の実施の形態3における暗号処理装置のブロック図であり、図8において、レジスタ801は、暗号化ラウンド関数処理部520の出力側に接続される第1のデータ保持部に相当し、レジスタ802は、復号ラウンド関数処理部521の出力側に接続される第2のデータ保持部に相当する。【0085】より具体的には、レジスタ801は、暗号化/復号切替信号603が暗号化を示し、かつクロック505の立ち上がりに同期して入力データを保持する。レジスタ802は、暗号化/復号切替信号603が復号を示し、かつクロック505の立ち上がりに同期して入力データを保持する。【0086】また、セレクタ803は、暗号化/復号切替信号603を参照し、暗号化処理の際はレジスタ801を、復号処理の際はレジスタ802を、それぞれ出力データブロック105として出力する。本形態によれば、実施の形態2と同等の機能を有し、かつラッチを使用しないため、LSI実装制約を受けることなく適用することができる。ラッチをレジスタに置き換えることができるため、ゲート数を削減することができ、コスト削減を図ることができる。本発明に係る暗号処理装置は、例えば、データの暗号化あるいは暗号化されたデータの復号の分野などにおいて好適に利用できる。ekouhou.net。