以下、図面を参照して本発明の実施の形態について説明する。各図において、図1〜図7が、本発明の一実施の形態としてのAES暗号回路に関する図であり、図8〜図14が、本発明の一実施の形態としてのAES復号回路に関する図であり、図15が本発明の一実施の形態としての送信IPsec回路に関する図であり、図16が本発明の一実施の形態としての受信IPsec回路に関する図である。
本発明の一実施の形態としてのAES暗号回路1の構成例を図1に示す。AES暗号回路1は、上述したAESアルゴリズムに従って暗号化処理を行う回路であって、暗号用ラウンド処理回路11、暗号用拡大鍵生成回路12、および暗号用ラウンド制御回路13から構成されている。AES暗号回路1は、128ビット長の平文データブロックと256ビット長の暗号鍵(暗号鍵長が128または192ビットの場合は先頭ビットから128または192ビット分が有効)と暗号制御信号を入力し、128ビット長の平文データブロックを暗号鍵を用いて暗号化した128ビット長の暗号データブロックを出力する。暗号制御信号には、暗号鍵長を示す暗号鍵長情報と暗号開始や終了を指示する暗号動作情報が含まれている。ただし、図1では、各回路へのクロック信号の入力に係る構成の図示を省略している。なお、図1に示す各回路は、例えば、複数の論理回路などを組み合わせることで構成されていたり、その一部の機能をCPU(中央処理装置)とそのCPUで実行されるプログラムとを用いて実現することで構成されていたりする(他の実施形態についても同様である)。
図1の暗号用ラウンド制御回路13は、図示していない他のCPUなどから入力された暗号制御信号を入力し、暗号用拡大鍵生成回路12の動作を制御する暗号用拡大鍵生成制御信号および暗号用ラウンド処理回路11の動作を制御する暗号用ラウンド処理制御信号を出力する。暗号用拡大鍵生成回路12は、図示していない他のCPUなどから入力された暗号鍵と暗号用拡大鍵生成制御信号を入力し、暗号用ラウンド処理回路11の暗号ラウンドR(R=0〜Nr)用の拡大鍵[R]を、Rが0からNrの順に1クロックに1個ずつ出力する。暗号用ラウンド処理回路11は、図示していない他のCPUなどから入力された128ビット長の平文データブロックと、暗号ラウンド毎に拡大鍵を入力し、全暗号ラウンドを終了した時点で128ビット長の暗号データブロックを図示していない他のCPUなどに対して出力する。
図1の暗号用拡大鍵生成回路12の構成例を図2に示す。暗号用拡大鍵生成回路12は、暗号用拡大鍵生成論理回路121、256ビット長の暗号用拡大鍵生成レジスタ122、および暗号用拡大鍵出力論理回路123から構成されている。図2に示す暗号用拡大鍵生成回路12の動作を表すフローチャートを図3に示す。また、図3のフローチャートに基づいて動作する暗号用拡大鍵生成論理回路121の構成例を図4に示す。また、図3のフローチャートに基づいて動作する暗号用拡大鍵生成回路12の動作シーケンスを図5から図7に示す。
図2に示した暗号用拡大鍵生成レジスタ122は、256個のD−FF(Dタイプフリップフロップ)から構成され、各D−FFに外部からのクロック信号が供給される。図2に示す例では、暗号用拡大鍵生成レジスタ122が、各32個のD−FFから構成される8個のレジスタRK0〜RK7から構成されている。すなわち、レジスタRK0〜RK7は、各32ビット長のレジスタとして構成されている。レジスタRK0〜RK7を構成する全部で256個のD−FFは、例えばクロック信号の立ち上がり(または立ち下がり)に応じてデータの入力・保持と出力とを行うフリップフロップとして構成されている。すなわち、暗号用拡大鍵生成レジスタ122は、外部から供給されるクロック信号の立ち上がり(または立ち下がり)に応じて暗号用拡大鍵生成論理回路121から出力された暗号用拡大鍵生成レジスタの更新値(全256ビットのデータ)を、256個のD−FFに入力して保持し、出力する。
図2の暗号用拡大鍵出力論理回路123は、暗号用拡大鍵生成レジスタ122から出力された256ビットのデータから、暗号鍵長情報と暗号ラウンドの進行に応じて選択された128ビット長の値を、暗号用拡大鍵(図2の「拡大鍵」)として出力する。
暗号用拡大鍵生成論理回路121は、暗号用拡大鍵の生成を開始した時に暗号用拡大鍵生成レジスタ122を入力された暗号鍵の値に初期化する。暗号用拡大鍵生成論理回路121は、また、各ラウンド時に、暗号鍵長情報と暗号ラウンドの進行に応じて定まる所定の暗号用拡大鍵生成演算を暗号用拡大鍵生成レジスタ122の値(図2の「暗号用拡大鍵生成レジスタの現在値」)に対して行い、暗号用拡大鍵生成レジスタ122の値をその演算結果の値(図2の「暗号用拡大鍵生成レジスタの更新値」)で更新する。暗号用拡大鍵生成レジスタ122の初期化を行うタイミングや、暗号鍵長情報と暗号ラウンドの進行に応じた制御には、図1の暗号用ラウンド制御回路13から出力された暗号用拡大鍵生成制御信号が用いられる。この暗号用拡大鍵生成制御信号には、上述した暗号ラウンドを示す信号R(すなわち変数R)などが含まれている。
次に、図3を参照して、図1および図2の暗号用拡大鍵生成回路12の動作について説明する。図3に示す各処理におけるフローの制御は、図1の暗号用ラウンド制御回路13が生成する暗号用拡大鍵生成制御信号に基づいて、図2の暗号用拡大鍵生成論理回路121、暗号用拡大鍵出力論理回路123等によって行われる。具体的には、図3のフローチャートにおいて、ステップS102、S108、S115、S119、S121、S126、S129およびS131の各処理が、暗号用拡大鍵生成論理回路121によって実現される処理である。また、ステップS107、S114、S118、S120、S125、S128およびS130の各処理が、暗号用拡大鍵出力論理回路123によって実現される処理である。また、ステップS101、S103、S105、S106、S109、S112、S113、S116、S117、S123、S124およびS132の各処理が、暗号用ラウンド制御回路13によって実現される処理である。また、ステップS104、S110、S117およびS127の各処理は、クロックタイミング待ちを表している。
なお、ステップS107、S114、S118、S120、S125、S128またはS130で、暗号用拡大鍵出力論理回路123が拡大鍵の出力選択を行う拡大鍵出力選択1〜4の処理は、以下のようにして行われる。なお、拡大鍵出力選択1〜4の処理によって出力される拡大鍵は、各暗号ラウンドに対応するものとして表す場合には拡大鍵[R]として表すこととする。
すなわち、ステップS107、S114、S125およびS128における暗号用拡大鍵出力論理回路123による拡大鍵出力選択1の処理では、拡大鍵の値として、レジスタRK0、RK1、RK2およびRK3からの出力がこの順で組み合わせて選択される。ステップS118における暗号用拡大鍵出力論理回路123による拡大鍵出力選択2の処理では、拡大鍵の値として、レジスタRK4、RK5、RK0およびRK1からの出力がこの順で組み合わせて選択される。ステップS120における暗号用拡大鍵出力論理回路123による拡大鍵出力選択3の処理では、拡大鍵の値として、レジスタRK2、RK3、RK4およびRK5からの出力がこの順で組み合わせて選択される。ステップS130における暗号用拡大鍵出力論理回路123による拡大鍵出力選択4の処理では、拡大鍵の値として、レジスタRK4、RK5、RK6およびRK7からの出力がこの順で組み合わせて選択される。
また、ステップS102、S108、S115、S119、S121、S126、S129およびS131で、暗号用拡大鍵生成論理回路121が拡大鍵の生成演算を行う拡大鍵生成演算0、1.0〜1.3、2〜4の処理は、以下のようにして行われる。
ここで、RK0〜RK7は、暗号用拡大鍵生成レジスタ122の現在値、RK0’〜RK7’は、暗号用拡大鍵生成レジスタ122の更新値である。また、Rcon(N)は、変数Nを0〜9として次のようにして表される1ワードの定数である。
なお、本実施形態において1ワードは32ビット(=4バイト)である。例えば、Rcon(0)は、16進数で「01000000」の定数である。また、演算子「=」は代入演算子を表し(すなわち(左辺)=(右辺)は(右辺)を(左辺)に代入することを意味し)、演算子「==」は等号による比較演算子を表し、演算子「+」は排他的論理和を表す。また、SubWord()は、非特許文献1に規定されている鍵拡張処理で用いられる関数であり、4バイトを入力し、各バイトにS−boxを適用することで出力ワードを生成する。S−boxは、非線形置換表であり、鍵拡張処理ではバイト値を1対1で置換する。RotWord()は、非特許文献1に規定されている鍵拡張処理で用いられる関数であり、4バイトのワードに巡回置換を実行する。
次に、図3のフローチャートをステップ毎に説明する。
(S101)暗号用ラウンド制御回路13が、暗号用拡大鍵生成制御信号の1つである制御信号A(あるいは変数Aとも呼ぶことができる)を「0」に設定する。制御信号Aは暗号用拡大鍵生成回路12に外部から暗号鍵を入力する場合に「0」に設定される信号である。その後、ステップS102へ進む。
(S102)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算0を実行し、暗号用拡大鍵生成レジスタ122の値を更新する。ここで、暗号用拡大鍵生成レジスタ122に暗号鍵の値が格納される。その後、ステップS103へ進む。
(S103)暗号用ラウンド制御回路13が、制御信号Aを「1」に設定する。その後、ステップS104へ進む。
(S104)ここではクロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。その後、ステップS105へ進む。なお、各ステップの処理は、クロック信号の周期に対して十分短時間で行われるようになっている。したがって、図3に示す処理では、各ラウンドRに対応した新たな拡大鍵[R]を1クロック周期毎に生成、出力することができる。
(S105)暗号用ラウンド制御回路13が、暗号鍵長を検知し、これ以降の制御内容が決定される。すなわち、暗号鍵長が128ビットの場合、ステップS106〜S110とステップS111の処理が行われ、暗号鍵長が192ビットの場合、ステップS112〜S122とステップS111の処理が行われ、暗号鍵長が256ビットの場合、ステップS123〜S132とステップS111の処理が行われることになる。暗号鍵長が128ビットの場合、ステップS106へ進み、暗号鍵長が192ビットの場合、ステップS112へ進み、暗号鍵長が256ビットの場合、ステップS123へ進む。
(S106)暗号用ラウンド制御回路13が、暗号用拡大鍵生成制御信号の1つである制御信号N(あるいは変数Nとも呼ぶことができる)を「0」に設定する。制御信号Nは定数Rcon(N)(N=0〜9)の値を選択するための信号である。その後、ステップS107へ進む。なお、ステップS107〜S110の各ステップは、暗号用ラウンド処理回路11の暗号ラウンドR(R=0〜9)に対応して繰り返し実行される。
(S107)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS108へ進む。
(S108)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算1.1を行い、暗号用拡大鍵生成レジスタ122を更新する。その後、ステップS109へ進む。
(S109)暗号用ラウンド制御回路13が、制御信号Nの値を「1」だけ増加させる。その後、ステップS110へ進む。
(S110)クロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。次に、暗号ラウンドRが9に達していた場合は、ステップS111へ進み、9に達していなかった場合は、ステップS107へ戻る。
(S111)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択1の処理を行い、拡大鍵[10]を出力する。ここで、暗号用拡大鍵生成回路12の処理が終了する。
(S112)暗号用ラウンド制御回路13が、制御信号Nを「0」に設定する。その後、ステップS113へ進む。なお、ステップS113〜S122の各ステップは、暗号用ラウンド処理回路11の暗号ラウンドR(R=0〜11)に対応して繰り返し実行される。
(S113)暗号用ラウンド制御回路13が判定し、暗号ラウンドRの値0〜11に基づき、Rが「3の倍数」の場合にはステップS114へ進み、Rが「3の倍数+1」の場合にはステップS118へ進み、Rが「3の倍数+2」の場合にはステップS120へ進む。
(S114)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS115へ進む。
(S115)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算1.2を行い、暗号用拡大鍵生成レジスタ122を更新する。その後、ステップS116へ進む。
(S116)暗号用ラウンド制御回路13が、制御信号Nの値を「1」だけ増加させる。その後、ステップS117へ進む。
(S117)クロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。次に、暗号ラウンドRが11に達していた場合は、ステップS111へ進み、11に達していなかった場合は、ステップS113へ戻る。
(S118)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択2の処理を行い、拡大鍵[R]を出力する。その後、ステップS119へ進む。
(S119)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算2を行い、暗号用拡大鍵生成レジスタ122を更新する。その後、ステップS117へ進む。
(S120)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択3の処理を行い、拡大鍵[R]を出力する。その後、ステップS121へ進む。
(S121)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算3を行い、暗号用拡大鍵生成レジスタ122を更新する。その後、ステップS122へ進む。
(S122)暗号用ラウンド制御回路13が、制御信号Nの値を「1」だけ増加させる。その後、ステップS117へ進む。
(S123)暗号用ラウンド制御回路13が、制御信号Nを「0」に設定する。その後、ステップS124へ進む。なお、ステップS124〜S132の各ステップは、暗号用ラウンド処理回路11の暗号ラウンドR(R=0〜13)に対応して繰り返し実行される。
(S124)暗号用ラウンド制御回路13が判定し、暗号ラウンドRの値0〜13に基づき、Rが「0」の場合にはステップS125へ進み、Rが「0以外の2の倍数」の場合にはステップS128へ進み、Rが「2の倍数+1」の場合にはステップS130へ進む。
(S125)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS126へ進む。
(S126)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算1.0を行い、暗号用拡大鍵生成レジスタ122を更新する。その後、ステップS127へ進む。
(S127)クロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。次に、暗号ラウンドRが13に達していた場合は、ステップS111へ進み、13に達していなかった場合は、ステップS124へ戻る。
(S128)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS129へ進む。
(S129)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算1.3を行い、暗号用拡大鍵生成レジスタ122を更新する。その後、ステップS127へ進む。
(S130)暗号用拡大鍵出力論理回路123が、拡大鍵出力選択4の処理を行い、拡大鍵[R]を出力する。その後、ステップS131へ進む。
(S131)暗号用拡大鍵生成論理回路121が、拡大鍵生成演算4を行い、暗号用拡大鍵生成レジスタ122を更新する。その後、ステップS132へ進む。
(S132)暗号用ラウンド制御回路13が、制御信号Nの値を「1」だけ増加させる。その後、ステップS127へ進む。
次に、図4を参照して、図3のフローチャートに基づいて動作する暗号用拡大鍵生成論理回路121の構成例について説明する。
図4の暗号用拡大鍵生成論理回路121は、定数Rconを生成するブロック401、3入力1出力セレクタ402、RotWord関数を用いた処理を行うブロック403、ブロック403の出力を入力としてSubWord関数を用いた処理を行うブロック404、排他的論理和回路405〜413、2入力1出力セレクタ414〜421、SubWord関数を用いた処理を行うブロック422、2入力1出力セレクタ423、1入力が負論理入力の論理和回路424、および2入力1出力セレクタ425〜432から構成されている。なお、ブロック401の出力、3入力1出力セレクタ402の入出力、ブロック403の入出力、ブロック404の入出力、排他的論理和回路405〜413の入出力、2入力1出力セレクタ414〜421の入出力、ブロック422の入出力、2入力1出力セレクタ423の入出力、および2入力1出力セレクタ425〜432の入出力には、それぞれ1ワードすなわち32ビットの信号が入力又は出力される。
また、RK0〜RK7は暗号用拡大鍵生成レジスタ122の現在値を表し、RK0’〜RK7’は暗号用拡大鍵生成レジスタ122の更新値を表す。制御信号N、A、L、S、XおよびYは、暗号用拡大鍵制御信号であり、以下の値をとる。Nは図3のフローチャート中のNと同一である。Aは図3のフローチャート中のAと同一である。Lは暗号鍵長が128ビットの場合、「0」、暗号鍵長が192ビットの場合、「1」、上記以外(256ビット)の場合、「2」となる。Sは、暗号鍵長が256ビットの場合、「1」、上記以外の場合、「0」となる。Xは、暗号鍵長が192ビットであり、Rが3の倍数+1の場合、「1」、暗号鍵長が256ビットであり、Rが2の倍数の場合、「1」、上記以外の場合、「0」となる。Yは、暗号鍵長が128ビットの場合、「1」、暗号鍵長が192ビットであり、Rが3の倍数の場合、「1」、暗号鍵長が256ビットであり、Rが0または2の倍数+1の場合、「1」、上記以外の場合、「0」となる。Rは暗号ラウンドのラウンド値である。
ブロック401は、制御信号Nに基づいて、上述した定数Rcon(N)を生成して出力する。3入力1出力セレクタ402は、制御信号Lに基づき、Lが「0」の場合、レジスタRK3の現在値を選択して出力し、Lが「1」の場合、レジスタRK5の現在値を選択して出力し、Lが「2」の場合、レジスタRK7の現在値を選択して出力する。ブロック403は、3入力1出力セレクタ402の出力に対して、RotWord関数を用いた処理を行って処理結果を出力する。ブロック404は、ブロック403の出力に対してSubWord関数を用いた処理を行って処理結果を出力する。
排他的論理和回路405は、ブロック401の出力とブロック404の出力を入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路406は、排他的論理和回路405の出力とレジスタRK0の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路407は、2入力1出力セレクタ414の出力とレジスタRK1の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路408は、2入力1出力セレクタ415の出力とレジスタRK2の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路409は、2入力1出力セレクタ416の出力とレジスタRK3の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
排他的論理和回路410は、2入力1出力セレクタ423の出力とレジスタRK4の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路411は、2入力1出力セレクタ418の出力とレジスタRK5の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路412は、2入力1出力セレクタ419の出力とレジスタRK6の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路413は、2入力1出力セレクタ420の出力とレジスタRK7の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
2入力1出力セレクタ414は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路406の出力を選択して出力し、Xが「1」の場合、レジスタRK0の現在値を選択して出力する。2入力1出力セレクタ415は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路407の出力を選択して出力し、Xが「1」の場合、レジスタRK1の現在値を選択して出力する。2入力1出力セレクタ416は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路408の出力を選択して出力し、Xが「1」の場合、レジスタRK2の現在値を選択して出力する。2入力1出力セレクタ417は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路409の出力を選択して出力し、Xが「1」の場合、レジスタRK3の現在値を選択して出力する。
2入力1出力セレクタ418は、制御信号Yに基づき、Yが「0」の場合、排他的論理和回路410の出力を選択して出力し、Yが「1」の場合、レジスタRK4の現在値を選択して出力する。2入力1出力セレクタ419は、制御信号Yに基づき、Yが「0」の場合、排他的論理和回路411の出力を選択して出力し、Yが「1」の場合、レジスタRK5の現在値を選択して出力する。2入力1出力セレクタ420は、論理和回路424の出力に基づき、論理和回路424の出力が「0」の場合、排他的論理和回路412の出力を選択して出力し、論理和回路424の出力が「1」の場合、レジスタRK6の現在値を選択して出力する。2入力1出力セレクタ421は、論理和回路424の出力に基づき、論理和回路424の出力が「0」の場合、排他的論理和回路413の出力を選択して出力し、論理和回路424の出力が「1」の場合、レジスタRK7の現在値を選択して出力する。
ブロック422は、レジスタRK3の現在値に対してSubWord関数を用いた処理を行って処理結果を出力する。2入力1出力セレクタ423は、制御信号Sに基づき、Sが「0」の場合、2入力1出力セレクタ417の出力を選択して出力し、Sが「1」の場合、ブロック422の出力を選択して出力する。論理和回路424は、制御信号Yと、負論理入力に入力される制御信号Sとを入力信号として、論理和演算を行い、演算結果を出力する。
2入力1出力セレクタ425〜432は、制御信号Aに基づき、Aが「0」の場合、256ビットの暗号鍵を各32ビットに順次分割したデータをそれぞれ選択して出力し、Aが「1」の場合、2入力1出力セレクタ414〜421の出力をそれぞれ選択して出力する。2入力1出力セレクタ425〜432の出力が、レジスタRK0〜RK7の更新値RK0’〜RK7’となる。
次に、図5〜図7を参照して、図3のフローチャートに基づいて動作する暗号用拡大鍵生成回路12の動作シーケンスについて説明する。図5は、図2および図4に示す暗号用拡大鍵生成回路12の暗号鍵長=128ビットの場合のシーケンスを示し、図6は、図2および図4に示す暗号用拡大鍵生成回路12の暗号鍵長=192ビットの場合のシーケンスを示し、図7は図2および図4に示す暗号用拡大鍵生成回路12の暗号鍵長=256ビットの場合のシーケンスを示している。なお、各図において、暗号鍵を(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)で表し、拡大鍵を(Ke0,Ke1,Ke2,Ke3)で表している。ここで、Kc0〜Kc7およびKe0〜Ke3は各1ワード(すなわち32ビット)のデータである。
図5に示すように、暗号鍵長=128ビットの場合、暗号用拡大鍵生成レジスタ122の各レジスタRK0〜RK7には初期値として暗号鍵(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)の各ワードKc0〜Kc7がそれぞれ格納される。そして、暗号ラウンドR=0のとき、レジスタRK0〜RK3の出力が、拡大鍵を構成する各ワードKe0〜Ke3として出力される。
次に、暗号ラウンドR=1〜10のとき、レジスタRK0〜RK3が排他的論理和回路406〜409の出力で更新された値が、拡大鍵の各ワードKe0〜Ke3として出力される。なお、更新が行われる際、排他的論理和回路406〜409には、前回の暗号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路405〜408の出力とが入力される。また、排他的論理和回路405には、定数Rcon(R)とブロック404の出力が入力される。また、レジスタRK3の現在値をブロック403で処理した出力が、ブロック404へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
暗号ラウンドR=1〜10では、拡大鍵を生成する際の処理内容が同一である。各暗号ラウンドに対応する拡大鍵の生成処理は1クロックで行われ、これが10周期分繰り返されることになる(図5では7回分の図示を省略している)。
次に、図6に示すように、暗号鍵長=192ビットの場合、暗号用拡大鍵生成レジスタ122の各レジスタRK0〜RK7には初期値として暗号鍵(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)の各ワードKc0〜Kc7がそれぞれ格納される。そして、暗号ラウンドR=0のとき、レジスタRK0〜RK3の出力が、拡大鍵を構成する各ワードKe0〜Ke3として出力される。
次に、暗号ラウンドR=1のとき、レジスタRK0およびRK1が排他的論理和回路407および408の出力で更新された値と、レジスタRK4とRK5が現在値によって更新された値とを組み合わせたものが、拡大鍵の各ワードKe2とKe3およびKe0とKe1として出力される。なお、更新が行われる際、排他的論理和回路406〜409には、前回の暗号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路405〜408の出力とが入力されている。また、排他的論理和回路405には、定数Rcon(0)とブロック404の出力が入力される。また、レジスタRK5の現在値をブロック403で処理した出力が、ブロック404へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
次に、暗号ラウンドR=2のとき、レジスタRK2とRK3が現在値によって更新された値とレジスタRK4とRK5が排他的論理和回路410と411の出力で更新された値とを組み合わせたものが、拡大鍵の各ワードKe0〜Ke3として出力される。なお、拡大鍵Ke0〜Ke3を出力する際、排他的論理和回路410と411には、前回の暗号ラウンドに対応して更新されたレジスタRK4とRK5の現在値と、レジスタRK3の現在値と排他的論理和回路410の出力とがそれぞれ入力されている。また、レジスタRK0〜RK1とレジスタRK6〜RK7とについては、現在値がそのまま更新値となる。
また、拡大鍵の各ワードKe0〜Ke3の出力に続いて行われる暗号ラウンドR=2に対応する更新処理では、レジスタRK0〜RK5が、排他的論理和回路406〜411の出力によって更新される。その更新が行われる際、排他的論理和回路406〜411には、前回の暗号ラウンドに対応して更新されたレジスタRK0〜RK5の現在値と、排他的論理和回路405〜410の出力とが入力されている。また、排他的論理和回路405には、定数Rcon(1)とブロック404の出力が入力される。また、レジスタRK5の現在値をブロック403で処理した出力が、ブロック404へ入力される。また、レジスタRK6〜RK7については、現在値がそのまま更新値となる。この処理で更新されたレジスタRK0〜RK3の更新値が、暗号ラウンドR=0の場合と同様にして、暗号ラウンドR=3に対応した拡大鍵Ke0〜Ke3として出力される(出力部分の構成について図示を省略)。
この暗号ラウンドR=0〜2に対応する3クロック分の処理を1周期として、これを4周期分繰り返すことで、暗号ラウンドR=0〜12に対応した拡大鍵が生成される(図6では3周期分の図示を省略している)。
次に、図7に示すように、暗号鍵長=256ビットの場合、暗号用拡大鍵生成レジスタ122の各レジスタRK0〜RK7には初期値として暗号鍵(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)の各ワードKc0〜Kc7がそれぞれ格納される。そして、暗号ラウンドR=0のとき、レジスタRK0〜RK3の出力が、拡大鍵を構成する各ワードKe0〜Ke3として出力される。
次に、暗号ラウンドR=1のとき、レジスタRK4〜RK7が現在値によって更新された値が、拡大鍵の各ワードKe0〜Ke3として出力される。この拡大鍵の各ワードKe0〜Ke3の出力に続いて行われる暗号ラウンドR=1に対応した更新処理では、レジスタRK0〜RK3が、排他的論理和回路406〜409の出力で更新される。排他的論理和回路406〜409には、前回の暗号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路405〜408の出力とが入力されている。また、排他的論理和回路405には、定数Rcon(0)とブロック404の出力が入力される。また、レジスタRK7の現在値をブロック403で処理した出力が、ブロック404へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
次に、暗号ラウンドR=2のとき、レジスタRK0〜RK3の出力が、拡大鍵Ke0〜Ke3として出力される。なお、拡大鍵Ke0〜Ke3を出力した後の更新処理では、排他的論理和回路410〜413に、前回の暗号ラウンドに対応して更新されたレジスタRK4〜RK7の現在値と、ブロック404の出力および排他的論理和回路410〜412の出力とがそれぞれ入力される。ブロック404には、レジスタRK3の現在値が入力される。また、レジスタRK0〜RK3については、現在値がそのまま更新値となる。
次に、暗号ラウンドR=3のとき、レジスタRK4〜RK7の出力が、拡大鍵Ke0〜Ke3として出力される。なお、拡大鍵Ke0〜Ke3を出力した後の更新処理では、排他的論理和回路406〜409に、前回の暗号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路405〜409の出力とがそれぞれ入力されている。また、排他的論理和回路405には、定数Rcon(1)とブロック404の出力が入力される。また、レジスタRK7の現在値をブロック403で処理した出力が、ブロック404へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
この暗号ラウンドR=2および3に対応する2クロック分の処理を1周期として、これを6周期分繰り返すことで、暗号ラウンドR=2〜14に対応した拡大鍵が生成される(図6では5周期分の図示を省略している)。
次に、本発明の他の実施の形態としてのAES復号回路2の構成例を図8に示す。AES復号回路2は、上述したAESアルゴリズムに従って復号処理を行う回路であって、復号用ラウンド処理回路21、復号用拡大鍵生成回路22、および復号用ラウンド制御回路23から構成されている。AES復号回路2は、128ビット長の暗号データブロックと256ビット長の復号鍵(復号鍵長が128または192ビットの場合は先頭ビットから128または192ビット分が有効)と復号制御信号を入力し、128ビット長の暗号データブロックを復号鍵を用いて復号化した128ビット長の平文データブロックを出力する。復号制御信号には、復号鍵長を示す復号鍵長情報と復号開始や終了を指示する復号動作情報が含まれている。
図8の復号用ラウンド制御回路23は、図示していない他のCPUなどから入力された復号制御信号を入力し、復号用拡大鍵生成回路22の動作を制御する復号用拡大鍵生成制御信号および復号用ラウンド処理回路21の動作を制御する復号用ラウンド処理制御信号を出力する。復号用拡大鍵生成回路22は、図示していない他のCPUなどから入力された復号鍵と復号用拡大鍵生成制御信号を入力し、復号用ラウンド処理回路21の復号ラウンドR(R=Nr〜0)用の拡大鍵[R]を、RがNrから0の順に1クロックに1個ずつ出力する。暗号用ラウンド処理回路21は、図示していない他のCPUなどから入力された128ビット長の暗号データブロックと、復号ラウンド毎に拡大鍵を入力し、全復号ラウンドを終了した時点で128ビット長の平文データブロックを図示していない他のCPUなどに対して出力する。
図8の復号用拡大鍵生成回路22の構成例を図9に示す。復号用拡大鍵生成回路22は、復号用拡大鍵生成論理回路221、256ビット長の復号用拡大鍵生成レジスタ222、および復号用拡大鍵出力論理回路223から構成されている。図9に示す復号用拡大鍵生成回路22の動作を表すフローチャートを図10に示す。図10のフローチャートに基づいて動作する復号用拡大鍵生成論理回路221の構成例を図11に示す。また、図10のフローチャートに基づいて動作する復号用拡大鍵生成回路22の動作シーケンスを図12から図14に示す。
図9に示した復号用拡大鍵生成レジスタ222は、256個のD−FFから構成され、各D−FFに外部からのクロック信号が供給される。図9に示す例では、復号用拡大鍵生成レジスタ222が、各32個のD−FFから構成される8個のレジスタRK0〜RK7から構成されている。すなわち、レジスタRK0〜RK7は、各32ビット長のレジスタとして構成されている。レジスタRK0〜RK7を構成する全部で256個のD−FFは、例えばクロック信号の立ち上がり(または立ち下がり)に応じてデータの入力・保持と出力とを行うフリップフロップとして構成されている。すなわち、復号用拡大鍵生成レジスタ222は、外部から供給されるクロック信号の立ち上がり(または立ち下がり)に応じて復号用拡大鍵生成論理回路221から出力された復号用拡大鍵生成レジスタの更新値(全256ビットのデータ)を256個のD−FFに入力して保持し、出力する。
図9の復号用拡大鍵出力論理回路223は、復号用拡大鍵生成レジスタ222から出力された256ビットのデータから、復号鍵長情報と復号ラウンドの進行に応じて選択された128ビット長の値を、復号用拡大鍵(図9の「拡大鍵」)として出力する。
復号用拡大鍵生成論理回路221は、復号用拡大鍵の生成を開始した時に復号用拡大鍵生成レジスタ222を入力された復号鍵の値に初期化する。復号用拡大鍵生成論理回路221は、また、各ラウンド時に、復号鍵長情報と復号ラウンドの進行に応じて定まる所定の復号用拡大鍵生成演算を復号用拡大鍵生成レジスタ222の値(図9の「復号用拡大鍵生成レジスタの現在値」)に対して行い、復号用拡大鍵生成レジスタ222の値をその演算結果の値(図9の「復号用拡大鍵生成レジスタの更新値」))で更新する。復号用拡大鍵生成レジスタ222の初期化を行うタイミングや、復号鍵長情報と復号ラウンドの進行に応じた制御には、復号用拡大鍵生成制御信号が用いられる。この復号用拡大鍵生成制御信号には、上述した復号ラウンドを示す信号R(すなわち変数R)などが含まれている。
次に、図10を参照して、図8および図9の復号用拡大鍵生成回路22の動作について説明する。図10に示す各処理におけるフローの制御は、図8の復号用ラウンド制御回路23が生成する復号用拡大鍵生成制御信号に基づいて、図9の復号用拡大鍵生成論理回路221、復号用拡大鍵出力論理回路223等によって行われる。具体的には、図10のフローチャートにおいて、ステップS202、S208、S215、S219、S222、S226、S229およびS231の各処理が、復号用拡大鍵生成論理回路221によって実現される処理である。また、ステップS207、S214、S218、S221、S225、S228およびS230の各処理が、復号用拡大鍵出力論理回路223によって実現される処理である。また、ステップS201、S203、S205、S206、S209、S212、S213、S216、S220、S223、S224およびS232の各処理が、復号用ラウンド制御回路23によって実現される処理である。また、ステップS204、S210、S217およびS227の各処理は、クロックタイミング待ちを表している。
なお、ステップS207、S214、S218、S221、S225、S228またはS230で、復号用拡大鍵出力論理回路223が拡大鍵の出力選択を行う拡大鍵出力選択1〜4の処理は、以下のようにして行われる。なお、拡大鍵出力選択1〜4の処理によって出力される拡大鍵は、各復号ラウンドに対応するものとして表す場合には拡大鍵[R]として表すこととする。
すなわち、ステップS207、S214、S225およびS228における復号用拡大鍵出力論理回路223による拡大鍵出力選択1の処理では、拡大鍵の値として、レジスタRK0、RK1、RK2およびRK3からの出力がこの順で組み合わせて選択される。ステップS218における復号用拡大鍵出力論理回路223による拡大鍵出力選択2の処理では、拡大鍵の値として、レジスタRK4、RK5、RK0およびRK1からの出力がこの順で組み合わせて選択される。ステップS221における復号用拡大鍵出力論理回路223による拡大鍵出力選択3の処理では、拡大鍵の値として、レジスタRK2、RK3、RK4およびRK5からの出力がこの順で組み合わせて選択される。ステップS230における復号用拡大鍵出力論理回路223による拡大鍵出力選択4の処理では、拡大鍵の値として、レジスタRK4、RK5、RK6およびRK7からの出力がこの順で組み合わせて選択される。
また、ステップS202、S208、S215、S219、S222、S226、S229およびS231で、復号用拡大鍵生成論理回路221が拡大鍵の生成演算を行う拡大鍵生成演算0、1.0〜1.3、2〜4の処理は、以下のようにして行われる。
ここで、RK0〜RK7は、復号用拡大鍵生成レジスタ222の現在値、RK0’〜RK7’は、復号用拡大鍵生成レジスタ222の更新値である。また、Rcon(N)は、変数Nを0〜9として次のようにして表される1ワードの定数である。
なお、本実施形態において1ワードは32ビット(=4バイト)である。例えば、Rcon(0)は、16進数で「01000000」の定数である。また、演算子「=」は代入演算子を表し(すなわち(左辺)=(右辺)は(右辺)を(左辺)に代入することを意味し)、演算子「==」は等号による比較演算子を表し、演算子「+」は排他的論理和を表す。また、SubWord()は、非特許文献1に規定されている鍵拡張処理で用いられる関数であり、4バイトを入力し、各バイトにS−boxを適用することで出力ワードを生成する。S−boxは、非線形置換表であり、鍵拡張処理ではバイト値を1対1で置換する。RotWord()は、非特許文献1に規定されている鍵拡張処理で用いられる関数であり、4バイトのワードに巡回置換を実行する。
次に、図10のフローチャートをステップ毎に説明する。
(S201)復号用ラウンド制御回路23が、復号用拡大鍵生成制御信号の1つである制御信号A(あるいは変数Aとも呼ぶことができる)を「0」に設定する。制御信号Aは復号用拡大鍵生成回路22に外部から復号鍵を入力する場合に「0」に設定される信号である。その後、ステップS202へ進む。
(S202)復号用拡大鍵生成論理回路221が、拡大鍵生成演算0を実行し、復号用拡大鍵生成レジスタ222の値を更新する。ここで、復号用拡大鍵生成レジスタ222に復号鍵の値が格納される。その後、ステップS203へ進む。
(S203)復号用ラウンド制御回路23が、制御信号Aを「1」に設定する。その後、ステップS204へ進む。
(S204)ここではクロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。その後、ステップS205へ進む。なお、各ステップの処理は、クロック信号の周期に対して十分短時間で行われるようになっている。したがって、図10に示す処理では、各ラウンドRに対応した新たな拡大鍵[R]を1クロック周期毎に生成、出力することができる。
(S205)復号用ラウンド制御回路23が、復号鍵長を検知し、これ以降の制御内容が決定される。すなわち、復号鍵長が128ビットの場合、ステップS206〜S210とステップS211の処理が行われ、復号鍵長が192ビットの場合、ステップS212〜S222とステップS211の処理が行われ、復号鍵長が256ビットの場合、ステップS223〜S232とステップS211の処理が行われることになる。復号鍵長が128ビットの場合、ステップS206へ進み、復号鍵長が192ビットの場合、ステップS212へ進み、復号鍵長が256ビットの場合、ステップS223へ進む。
(S206)復号用ラウンド制御回路23が、復号用拡大鍵生成制御信号の1つである制御信号N(あるいは変数Nとも呼ぶことができる)を「9」に設定する。制御信号Nは定数Rcon(N)(N=0〜9)の値を選択するための信号である。その後、ステップS207へ進む。なお、ステップS207〜S210の各ステップは、復号用ラウンド処理回路21の復号ラウンドR(R=10〜1)に対応して繰り返し実行される。
(S207)復号用拡大鍵出力論理回路223が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS208へ進む。
(S208)復号用拡大鍵生成論理回路221が、拡大鍵生成演算1.1を行い、復号用拡大鍵生成レジスタ222を更新する。その後、ステップS209へ進む。
(S209)復号用ラウンド制御回路23が、制御信号Nの値を「1」だけ減少させる。その後、ステップS210へ進む。
(S210)クロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。次に、復号ラウンドRが1に達していた場合は、ステップS211へ進み、1に達していなかった場合は、ステップS207へ戻る。
(S211)復号用拡大鍵出力論理回路223が、拡大鍵出力選択1の処理を行い、拡大鍵[0]を出力する。ここで、復号用拡大鍵生成回路22の処理が終了する。
(S212)復号用ラウンド制御回路23が、制御信号Nを「7」に設定する。その後、ステップS213へ進む。なお、ステップS213〜S222の各ステップは、復号用ラウンド処理回路21の復号ラウンドR(R=12〜1)に対応して繰り返し実行される。
(S213)復号用ラウンド制御回路23が判定し、復号ラウンドRの値12〜1に基づき、Rが「3の倍数」の場合にはステップS214へ進み、Rが「3の倍数+1」の場合にはステップS218へ進み、Rが「3の倍数+2」の場合にはステップS220へ進む。
(S214)復号用拡大鍵出力論理回路223が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS215へ進む。
(S215)復号用拡大鍵生成論理回路221が、拡大鍵生成演算1.2を行い、復号用拡大鍵生成レジスタ222を更新する。その後、ステップS216へ進む。
(S216)復号用ラウンド制御回路23が、制御信号Nの値を「1」だけ減少させる。その後、ステップS217へ進む。
(S217)クロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。次に、復号ラウンドRが1に達していた場合は、ステップS211へ進み、1に達していなかった場合は、ステップS213へ戻る。
(S218)復号用拡大鍵出力論理回路223が、拡大鍵出力選択2の処理を行い、拡大鍵[R]を出力する。その後、ステップS219へ進む。
(S219)復号用拡大鍵生成論理回路221が、拡大鍵生成演算2を行い、復号用拡大鍵生成レジスタ222を更新する。その後、ステップS220へ進む。
(S220)復号用ラウンド制御回路23が、制御信号Nの値を「1」だけ減少させる。その後、ステップS217へ進む。
(S221)復号用拡大鍵出力論理回路223が、拡大鍵出力選択3の処理を行い、拡大鍵[R]を出力する。その後、ステップS222へ進む。
(S222)復号用拡大鍵生成論理回路221が、拡大鍵生成演算3を行い、復号用拡大鍵生成レジスタ222を更新する。その後、ステップS217へ進む。
(S223)復号用ラウンド制御回路23が、制御信号Nを「6」に設定する。その後、ステップS224へ進む。なお、ステップS224〜S232の各ステップは、復号用ラウンド処理回路21の復号ラウンドR(R=14〜1)に対応して繰り返し実行される。
(S224)復号用ラウンド制御回路23が判定し、復号ラウンドRの値14〜1に基づき、Rが「14」の場合にはステップS225へ進み、Rが「14以外の2の倍数」の場合にはステップS228へ進み、Rが「2の倍数+1」の場合にはステップS230へ進む。
(S225)復号用拡大鍵出力論理回路223が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS226へ進む。
(S226)復号用拡大鍵生成論理回路221が、拡大鍵生成演算1.0を行い、復号用拡大鍵生成レジスタ222を更新する。その後、ステップS227へ進む。
(S227)クロック信号に従い、クロック信号の立ち上がりを待つ(D−FFがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ)。次に、復号ラウンドRが1に達していた場合は、ステップS211へ進み、1に達していなかった場合は、ステップS224へ戻る。
(S228)復号用拡大鍵出力論理回路223が、拡大鍵出力選択1の処理を行い、拡大鍵[R]を出力する。その後、ステップS229へ進む。
(S229)復号用拡大鍵生成論理回路221が、拡大鍵生成演算1.3を行い、復号用拡大鍵生成レジスタ222を更新する。その後、ステップS227へ進む。
(S230)復号用拡大鍵出力論理回路223が、拡大鍵出力選択4の処理を行い、拡大鍵[R]を出力する。その後、ステップS231へ進む。
(S231)復号用拡大鍵生成論理回路221が、拡大鍵生成演算4を行い、復号用拡大鍵生成レジスタ222を更新する。その後、ステップS232へ進む。
(S232)復号用ラウンド制御回路23が、制御信号Nの値を「1」だけ減少させる。その後、ステップS227へ進む。
次に、図11を参照して、図10のフローチャートに基づいて動作する復号用拡大鍵生成論理回路221の構成例について説明する。
図11の復号用拡大鍵生成論理回路221は、定数Rconを生成するブロック501、3入力1出力セレクタ502、RotWord関数を用いた処理を行うブロック503、ブロック503の出力を入力としてSubWord関数を用いた処理を行うブロック504、排他的論理和回路505〜513、2入力1出力セレクタ514〜521、SubWord関数を用いた処理を行うブロック522、2入力1出力セレクタ523、1入力が負論理入力の論理和回路524、2入力1出力セレクタ525〜532、2入力1出力セレクタ533、および排他的論理和回路534から構成されている。なお、ブロック501の出力、3入力1出力セレクタ502の入出力、ブロック503の入出力、ブロック504の入出力、排他的論理和回路505〜513の入出力、2入力1出力セレクタ514〜521の入出力、ブロック522の入出力、2入力1出力セレクタ523の入出力、2入力1出力セレクタ525〜532の入出力、2入力1出力セレクタ533の入出力、および排他的論理和回路534の入出力には、それぞれ1ワードすなわち32ビットの信号が入力又は出力される。
また、RK0〜RK7は復号用拡大鍵生成レジスタ222の現在値を表し、RK0’〜RK7’は復号用拡大鍵生成レジスタ222の更新値を表す。制御信号N、A、L、S、XおよびYは、復号用拡大鍵制御信号であり、以下の値をとる。Nは図10のフローチャート中のNと同一である。Aは図10のフローチャート中のAと同一である。Lは復号鍵長が128ビットの場合、「0」、復号鍵長が192ビットの場合、「1」、上記以外(256ビット)の場合、「2」となる。Sは、復号鍵長が256ビットの場合、「1」、上記以外の場合、「0」となる。Xは、復号鍵長が192ビットであり、Rが3の倍数+2の場合、「1」、復号鍵長が256ビットであり、Rが2の倍数の場合、「1」、上記以外の場合、「0」となる。Yは、復号鍵長が128ビットの場合、「1」、復号鍵長が192ビットであり、Rが3の倍数の場合、「1」、復号鍵長が256ビットであり、Rが0または2の倍数+1の場合、「1」、上記以外の場合、「0」となる。Rは復号ラウンドのラウンド値である。
ブロック501は、制御信号Nに基づいて、上述した定数Rcon(N)を生成して出力する。3入力1出力セレクタ502は、制御信号Lに基づき、Lが「0」の場合、レジスタRK3の現在値を選択して出力し、Lが「1」の場合、2入力1出力セレクタ533の出力を選択して出力し、Lが「2」の場合、レジスタRK7の現在値を選択して出力する。2入力1出力セレクタ533は、制御信号Yに基づき、Yが「0」の場合、排他的論理和回路534の出力を選択して出力し、Yが「1」の場合、レジスタRK5の現在値を選択して出力する。排他的論理和回路534は、レジスタRK4の現在値とレジスタRK5の現在値を入力として排他的論理和演算を行って演算結果を出力する。ブロック503は、3入力1出力セレクタ502の出力に対して、RotWord関数を用いた処理を行って処理結果を出力する。ブロック504は、ブロック503の出力に対してSubWord関数を用いた処理を行って処理結果を出力する。
排他的論理和回路505は、ブロック501の出力とブロック504の出力を入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路506は、排他的論理和回路505の出力とレジスタRK0の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路507は、レジスタRK0の現在値とレジスタRK1の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路508は、レジスタRK1の現在値とレジスタRK2の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路509は、レジスタRK2の現在値とレジスタRK3の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
排他的論理和回路510は、2入力1出力セレクタ523の出力とレジスタRK4の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路511は、レジスタRK4の現在値とレジスタRK5の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路512は、レジスタRK5の現在値とレジスタRK6の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路513は、レジスタRK6の現在値とレジスタRK7の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
2入力1出力セレクタ514は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路506の出力を選択して出力し、Xが「1」の場合、レジスタRK0の現在値を選択して出力する。2入力1出力セレクタ515は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路507の出力を選択して出力し、Xが「1」の場合、レジスタRK1の現在値を選択して出力する。2入力1出力セレクタ516は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路508の出力を選択して出力し、Xが「1」の場合、レジスタRK2の現在値を選択して出力する。2入力1出力セレクタ517は、制御信号Xに基づき、Xが「0」の場合、排他的論理和回路509の出力を選択して出力し、Xが「1」の場合、レジスタRK3の現在値を選択して出力する。
2入力1出力セレクタ518は、制御信号Yに基づき、Yが「0」の場合、排他的論理和回路510の出力を選択して出力し、Yが「1」の場合、レジスタRK4の現在値を選択して出力する。2入力1出力セレクタ519は、制御信号Yに基づき、Yが「0」の場合、排他的論理和回路511の出力を選択して出力し、Yが「1」の場合、レジスタRK5の現在値を選択して出力する。2入力1出力セレクタ520は、論理和回路524の出力に基づき、論理和回路524の出力が「0」の場合、排他的論理和回路512の出力を選択して出力し、論理和回路524の出力が「1」の場合、レジスタRK6の現在値を選択して出力する。2入力1出力セレクタ521は、論理和回路524の出力に基づき、論理和回路524の出力が「0」の場合、排他的論理和回路513の出力を選択して出力し、論理和回路524の出力が「1」の場合、レジスタRK7の現在値を選択して出力する。
ブロック522は、レジスタRK3の現在値に対してSubWord関数を用いた処理を行って処理結果を出力する。2入力1出力セレクタ523は、制御信号Sに基づき、Sが「0」の場合、レジスタRK3の現在値を選択して出力し、Sが「1」の場合、ブロック522の出力を選択して出力する。論理和回路524は、制御信号Yと、負論理入力に入力される制御信号Sとを入力信号として、論理和演算を行い、演算結果を出力する。
2入力1出力セレクタ525〜532は、制御信号Aに基づき、Aが「0」の場合、256ビットの復号鍵を各32ビットに順次分割したデータをそれぞれ選択して出力し、Aが「1」の場合、2入力1出力セレクタ514〜521の出力をそれぞれ選択して出力する。2入力1出力セレクタ525〜532の出力が、レジスタRK0〜RK7の更新値RK0’〜RK7’となる。
次に、図12〜図14を参照して、図10のフローチャートに基づいて動作する復号用拡大鍵生成回路22の動作シーケンスについて説明する。図12は、図9および図11に示す復号用拡大鍵生成回路22の復号鍵長=128ビットの場合のシーケンスを示し、図13は、図9および図11に示す復号用拡大鍵生成回路22の復号鍵長=192ビットの場合のシーケンスを示し、図14は図9および図11に示す復号用拡大鍵生成回路22の復号鍵長=256ビットの場合のシーケンスを示している。なお、各図において、復号鍵を(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)で表し、拡大鍵を(Ke0,Ke1,Ke2,Ke3)で表している。ここで、Kc0〜Kc7およびKe0〜Ke3は各1ワード(すなわち32ビット)のデータである。
図12に示すように、復号鍵長=128ビットの場合、復号用拡大鍵生成レジスタ222の各レジスタRK0〜RK7には初期値として復号鍵(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)の各ワードKc0〜Kc7がそれぞれ格納される。そして、復号ラウンドR=10のとき、レジスタRK0〜RK3の出力が、拡大鍵を構成する各ワードKe0〜Ke3として出力される。
次に、復号ラウンドR=9〜0のとき、レジスタRK0〜RK3が排他的論理和回路506〜509の出力で更新された値が、拡大鍵の各ワードKe0〜Ke3として出力される。なお、更新が行われる際、排他的論理和回路506〜509には、前回の復号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路505の出力およびレジスタRK0〜RK2の現在値とが入力されている。また、排他的論理和回路505には、定数Rcon(R)とブロック504の出力が入力される。また、レジスタRK3の現在値をブロック503で処理した出力が、ブロック504へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
復号ラウンドR=9〜0では、拡大鍵を生成する際の処理内容が同一である。各復号ラウンドに対応する拡大鍵の生成処理は1クロックで行われ、これが10周期分繰り返されることになる(図12では7回分の図示を省略している)。
次に、図13に示すように、復号鍵長=192ビットの場合、復号用拡大鍵生成レジスタ222の各レジスタRK0〜RK7には初期値として復号鍵(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)の各ワードKc0〜Kc7がそれぞれ格納される。そして、復号ラウンドR=12のとき、レジスタRK0〜RK3の出力が、拡大鍵を構成する各ワードKe0〜Ke3として出力される。
次に、復号ラウンドR=11のとき、レジスタRK2およびRK3が排他的論理和回路508および509の出力で更新された値と、レジスタRK4とRK5が現在値によって更新された値とを組み合わせたものが、拡大鍵の各ワードKe0〜Ke3として出力される。なお、更新が行われる際、排他的論理和回路506〜509には、前回の復号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路505の出力およびレジスタRK0〜RK2の現在値とが入力される。また、排他的論理和回路505には、定数Rcon(7)とブロック504の出力が入力される。また、レジスタRK5の現在値をブロック503で処理した出力が、ブロック504へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
次に、復号ラウンドR=10のとき、レジスタRK0とRK1が現在値によって更新された値とレジスタRK4とRK5が排他的論理和回路510と511の出力で更新された値とを組み合わせたものが、拡大鍵の各ワードKe2およびKe3とKe0およびKe1して出力される。なお、拡大鍵Ke0〜Ke3を出力する際、排他的論理和回路510と511には、前回の復号ラウンドに対応して更新されたレジスタRK4とRK5の現在値と、レジスタRK3とレジスタRK4の現在値とがそれぞれ入力されている。また、レジスタRK2〜RK3とレジスタRK6〜RK7とについては、現在値がそのまま更新値となる。
また、復号ラウンドR=10に対応する拡大鍵が出力された後の更新処理では、レジスタRK0〜RK5が、排他的論理和回路506〜511の出力によって更新される。その更新が行われる際、排他的論理和回路506〜511には、前回の復号ラウンドに対応して更新されたレジスタRK0〜RK5の現在値と、排他的論理和回路505とレジスタRK0〜RK4の現在値とが入力される。また、排他的論理和回路505には、定数Rcon(6)とブロック504の出力が入力される。また、レジスタRK5の現在値をブロック503で処理した出力が、ブロック504へ入力される。また、レジスタRK6〜RK7については、現在値がそのまま更新値となる。この処理で更新されたレジスタRK0〜RK3の更新値が、復号ラウンドR=12の場合と同様にして、復号ラウンドR=9に対応した拡大鍵Ke0〜Ke3として出力される(出力部分の構成について図示を省略)。
この復号ラウンドR=12〜10に対応する3クロック分の処理を1周期として、これを4周期分繰り返すことで、復号ラウンドR=12〜0に対応した拡大鍵が生成される(図13では3周期分の図示を省略している)。
次に、図14に示すように、復号鍵長=256ビットの場合、復号用拡大鍵生成レジスタ222の各レジスタRK0〜RK7には初期値として復号鍵(Kc0,Kc1,Kc2,Kc3,Kc4,Kc5,Kc6,Kc7)の各ワードKc0〜Kc7がそれぞれ格納される。そして、復号ラウンドR=14のとき、レジスタRK0〜RK3の出力が、拡大鍵を構成する各ワードKe0〜Ke3として出力される。
次に、復号ラウンドR=13のとき、レジスタRK4〜RK7が現在値によって更新された値が、拡大鍵の各ワードKe0〜Ke3として出力される。復号ラウンドR=13の拡大鍵を出力した後の更新処理では、レジスタRK0〜RK3が、排他的論理和回路506〜509の出力で更新される。排他的論理和回路506〜509には、前回の復号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路505の出力およびレジスタRK0〜RK2の現在値とが入力される。また、排他的論理和回路505には、定数Rcon(6)とブロック504の出力が入力される。また、レジスタRK7の現在値をブロック503で処理した出力が、ブロック504へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
次に、復号ラウンドR=12のとき、レジスタRK0〜RK3の出力が、拡大鍵Ke0〜Ke3として出力される。なお、拡大鍵Ke0〜Ke3を出力した後の更新処理の際には、排他的論理和回路510〜513に、前回の復号ラウンドに対応して更新されたレジスタRK4〜RK7の現在値と、ブロック504の出力およびレジスタRK4〜RK6の現在値とがそれぞれ入力される。ブロック504には、レジスタRK3の現在値が入力される。また、レジスタRK0〜RK3については、現在値がそのまま更新値となる。
次に、復号ラウンドR=11のとき、レジスタRK4〜RK7の出力が、拡大鍵Ke0〜Ke3として出力される。なお、拡大鍵Ke0〜Ke3を出力した後の更新処理する際、排他的論理和回路506〜509には、前回の復号ラウンドに対応して更新されたレジスタRK0〜RK3の現在値と、排他的論理和回路505の出力およびレジスタRK0〜RK2の現在値とがそれぞれ入力される。また、排他的論理和回路505には、定数Rcon(5)とブロック504の出力が入力される。また、レジスタRK7の現在値をブロック503で処理した出力が、ブロック504へ入力される。また、レジスタRK4〜RK7については、現在値がそのまま更新値となる。
この復号ラウンドR=12および11に対応する2クロック分の処理を1周期として、これを6周期分繰り返すことで、復号ラウンドR=11〜0に対応した拡大鍵が生成される(図13では5周期分の図示を省略している)。
次に、図15を参照して、本発明の他の実施の形態としての送信IPsec回路について説明する。図15の送信IPsec回路6は、図1等を参照して説明したAES暗号回路1を用いて、送信するデータをIP層で暗号化して送信する機能を実現する回路である。図15の送信IPsec回路6は、送信パーサ回路601、暗号ICV(Integrity Check Value)生成テーブル格納メモリ回路602、暗号ICV生成テーブル読出回路603、カプセル化回路604、カプセル化テーブル格納メモリ回路605、カプセル化テーブル読出/更新回路606、暗号制御回路607、3DES(Data Encryption Standard)暗号回路608、AES暗号回路609、ICV生成制御回路610、MD5(Message Digest 5)回路611、SHA−1(Secure Hash Algorithm 1)回路612、および送信フレームFIFO(First−In First−Out)回路613から構成されている。フレームデータを入力する各回路は、入力許可信号(あるいは入力停止要求信号)を、その各回路にフレームデータを出力する回路に対して出力することによって、フレームデータに対する各処理を完了する前に、次のフレームデータの入力を待たせるバックプレッシャ制御を行う。
送信パーサ回路601は、送信フレームのフレームデータと送信フレーム長と送信フレームに対する送信IPsec処理の有無と送信IPsec処理有の場合のSA番号(Security Associationのテーブルのエントリ番号)の各情報を入力する。フレームデータは、特定のビット幅(例えば32ビット)のデータストリームとして入力される。データストリームには各フレームの先頭位置・終了位置を示す信号が付加される。送信フレーム長と送信IPsec処理の有無と送信IPsec処理有の場合のSA番号の各情報は、フレーム先頭の直前に挿入される。これらの情報をフレームデータとは別の信号として入力してもよい。送信パーサ回路601は、送信IPsec処理有無の情報に応じて、以下の処理を行う。送信IPsec処理無の場合は、送信IPsec処理無の情報とともに、入力した送信フレームのフレームデータをそのままカプセル化回路604に出力する。送信IPsec処理有の場合は、入力した送信フレームのヘッダ構造をフレーム先頭から解析し、カプセル化回路604が送信フレームデータにカプセル化ヘッダを挿入する位置を示す信号を、送信フレーム長とSA番号の情報と送信フレームデータとともに、カプセル化回路604に出力する。また、送信フレームのIPヘッダ先頭位置からフレームの終了までのフレームデータ(暗号化対象データ)を暗号制御回路607に出力する。また、SA番号の情報を暗号ICV生成テーブル読出回路603に出力する。
カプセル化回路604は、送信パーサ回路601から送信IPsec処理有無の情報を入力し、送信IPsec処理無の場合は、送信IPsec処理無の情報とともに入力した送信フレームのフレームデータをそのままICV生成制御回路610に出力する。送信IPsec処理有の場合、カプセル化回路604は送信パーサ回路601からSA番号の情報を入力し、カプセル化テーブル読出/更新回路606にSA番号を出力し、カプセル化テーブル読出/更新回路606から、SA番号が示すカプセル化テーブルのエントリに格納されたカプセル化情報を入力する。カプセル化情報は、カプセル化ヘッダを生成するために必要な情報であり、暗号/認証方式を示す情報・外側IPヘッダの宛先IPアドレスおよび送信元IPアドレス・ESP(Encapsulating Security Payload)ヘッダのSPI(Security Pointer Index)およびシーケンス番号等を含む。カプセル化回路604は、入力したカプセル化情報と入力した送信フレームデータに基づいて、カプセル化ヘッダ(外側IPヘッダおよびESPヘッダ)を生成し、入力したカプセル化ヘッダを挿入する位置を示す信号に応じて、生成したカプセル化ヘッダを挿入し、送信フレームデータの先頭からカプセル化ヘッダの終了までのフレームデータを、送信フレームヘッダデータとしてICV生成制御回路610に出力する。カプセル化回路604は、カプセル化ヘッダを生成するために、送信フレームデータから内側IPヘッダ内のIPパケット長を読み取り、カプセル化情報に含まれる暗号/認証方式の情報とIPパケット長から、外側IPヘッダ用のIPパケット長を計算する(カプセル化ヘッダ・ESPトレーラ・ICVの挿入によってフレーム長が長くなる分を補正する)。また、内側IPヘッダ内のDSCP(DiffServ Code Point)値(IPv4ヘッダのType Of Service,IPv6ヘッダのTraffic Class)を読み取り、外側IPヘッダのDSCP値として使用する。また、外側IPヘッダがIPv4の場合はヘッダチェックサムを計算する。なお、カプセル化ヘッダの挿入に加えて、カプセル化回路604は、送信フレームの先頭からカプセル化ヘッダ挿入位置までのフレームデータ内のL3(Layer 3)種別情報(Ethernet(登録商標)タイプやPPPoE(Point−to−point protocol over Ethernet(登録商標))プロトコル)を外側IPヘッダの種別(外側IPヘッダのIPバージョン)を示す値に補正する。また、フレームデータがPPPoEヘッダを含む場合は、ペイロード長をカプセル化ヘッダ・ESPトレーラ・ICVの挿入によってフレーム長が長くなる分を補正する。また、カプセル化回路604は、暗号制御回路607に対して暗号方式を示す情報を、ICV生成制御回路610に対して認証方式を示す情報を、それぞれ出力する。
カプセル化テーブル格納メモリ回路605は、カプセル化テーブルを格納するメモリである。カプセル化テーブル読出/更新回路606が、メモリに対して、SA番号に対応付けられたアドレスをアクセスすることにより、SA番号が示すカプセル化テーブルのエントリについて、カプセル化情報を読み書きすることができる。また、外部からカプセル化テーブルの各エントリについてカプセル化情報を読み書きすることにより、エントリの登録・変更等を行うことができる。
カプセル化テーブル読出/更新回路606は、入力したSA番号が示すカプセル化テーブルのエントリから、カプセル化情報を読み出し、カプセル化回路604に出力する。また、カプセル化情報のうちESPヘッダのシーケンス番号を+1加算した値に更新する。同様に、外側IPヘッダがIPv4の場合はIP識別子を+1加算した値に更新する。また、カプセル化情報に送信フレーム数や送信フレームデータのバイト数を追加しておき、送信毎に値を更新してもよい。
暗号ICV生成テーブル格納メモリ回路602は、暗号ICV生成テーブルを格納するメモリである。暗号ICV生成テーブル読出回路603が、メモリに対して、SA番号に対応付けられたアドレスをアクセスすることにより、SA番号が示す暗号ICV生成テーブルのエントリについて、暗号鍵とICV生成鍵を読み出すことができる。また、外部から暗号ICV生成テーブルの各エントリについて暗号鍵とICV生成鍵を読み書きすることにより、エントリの登録・変更等を行うことができる。
暗号ICV生成テーブル読出回路603は、入力したSA番号が示す暗号ICV生成テーブルのエントリから、暗号鍵とICV生成鍵を読み出し、それぞれ暗号制御回路607とICV生成制御回路610に出力する。
暗号制御回路607は、入力した送信フレームの暗号化対象データを、入力した暗号方式を示す情報に基づいて暗号化しICV生成制御回路610に出力する。暗号方式がNULL(ヌル)の場合は、暗号化対象データにESPトレーラを追加した平文データをそのまま暗号データとしてICV生成制御回路610に出力する。暗号方式が3DESの場合は、入力した暗号鍵とともに平文データを暗号ブロック長(64ビット)ずつに区切った平文データブロックを3DES暗号回路608に出力し、平文データブロックを暗号化した暗号データブロックを3DES暗号回路608から入力して、これを暗号データとしてICV生成制御回路610に出力する。暗号方式がAESの場合は、入力した暗号鍵と入力した暗号方式を示す情報に基づいて生成した暗号鍵長情報を含む暗号制御信号とともに、平文データを暗号ブロック長(128ビット)ずつに区切った平文データブロックをAES暗号回路609に出力し、平文データブロックを暗号化した暗号データブロックをAES暗号回路609から入力して、これを暗号データとしてICV生成制御回路610に出力する。なお、暗号制御回路607は、各送信フレームの初回の平文データブロックを出力する前に、初期化信号を含む暗号制御信号を出力することにより、3DES暗号回路608あるいはAES暗号回路609から暗号ブロック長のIV(Initial Vector)を入力し、ICV生成制御回路610にIVを出力する。
3DES暗号回路608は、入力した暗号鍵と暗号制御信号に基づいて、入力した平文データブロックを3DES−CBC(ciher block chaining)アルゴリズムにより暗号化し、暗号データブロックとして出力する。ただし、初期化信号を含む暗号制御信号を入力した場合は、3DES暗号回路608が保持する3DES用IV(64ビット)を出力する。
AES暗号回路609は、図1等を参照して説明した本発明の実施形態としてのAES暗号回路1に相当する構成であり、入力した暗号鍵と暗号鍵長情報を含む暗号制御信号に基づいて、入力した平文データブロックをAES−CBCアルゴリズムにより暗号化し、暗号データブロックとして出力する。ただし、初期化信号を含む暗号制御信号を入力した場合は、AES暗号回路609が保持するAES用IV(128ビット)を出力する。
ICV生成制御回路610は、カプセル化回路604から送信IPsec処理無を入力した場合、カプセル化回路604から入力した送信フレームデータを、特定のビット幅(例えば32ビット)のデータストリームとして送信フレームFIFO回路613に出力する。送信IPsec処理有を入力した場合、カプセル化回路604から入力した送信フレームヘッダデータ(送信フレームの先頭からカプセル化ヘッダの終了までのフレームデータ)、暗号制御回路607から入力した暗号データ、生成したICVの順に、特定のビット幅のデータストリームとして、送信フレームFIFO回路613に出力する。入力した認証方式を示す情報に基づいて認証対象データ(ESPヘッダと続く暗号データ)から ICVを生成する。ただし、認証方式がNULLの場合は、ICVの生成および出力は行わない。認証方式がHMAC−MD5(Keyed Hashing for Message Authentication Code−Message Digest 5)の場合は、認証対象データを認証対象データブロック長(512ビット)に区切った認証対象データブロックを、認証鍵および認証制御信号(各送信フレームにおける初回/最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む)とともに、MD5回路611に出力し、最終回の認証対象データブロックを出力した後、MD5回路611からICV(96ビット)を入力する。認証方式がHMAC−SHA−1の場合は、認証対象データを認証対象データブロック長(512ビット)に区切った認証データブロックを、認証鍵および認証制御信号(各送信フレームにおける初回/最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む)とともに、SHA−1回路612に出力し、最終回の認証対象データブロックを出力した後、SHA−1回路612からICV(96ビット)を入力する。
MD5回路611は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをHMAC−MD5アルゴリズムによりICV(96ビット)を生成し出力する。
SHA−1回路612は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをHMAC−SHA−1アルゴリズムによりICV(96ビット)を生成し出力する。
送信フレームFIFO回路613は、ICV生成制御回路610から送信フレームデータを入力する。フレームデータは、特定のビット幅(例えば32ビット)のデータストリームとして入力される。データストリームには各フレームの先頭位置・終了位置を示す信号が付加される。送信フレームFIFO回路613は、フレームデータを蓄積し、1個以上のフレームを蓄積しているとき、蓄積フレームデータのうち、最も早く入力されたフレームデータについて、外部(例えばMAC(Media Access Control)回路)にフレームデータの先頭から特定のビット幅(例えば32ビット)で出力を開始し、フレームデータの終了まで、データストリームとして出力を継続する。
次に、図16を参照して、本発明の他の実施の形態としての受信IPsec回路について説明する。図16の受信IPsec回路7は、図8等を参照して説明したAES復号回路2を用いて、IP層で暗号化されたデータを受信して復号する機能を実現する回路である。受信IPsec回路7の構成を図16に示す。受信IPsec回路7は、受信データFIFO回路701、受信パーサ回路702、検索回路703、検索テーブル格納メモリ回路704、検索テーブル読出回路705、ジョブFIFO回路706、デカプセル化回路707、復号認証テーブル格納メモリ回路708、復号認証テーブル読出/更新回路709、復号認証制御回路710、3DES復号回路711、AES復号回路712、MD5回路713、SHA−1回路714、および出力フレームFIFO回路715から構成されている。フレームデータを入力する各回路は、入力許可信号(あるいは入力停止要求信号)を回路にフレームデータを出力する回路に対して出力することにより、フレームデータに対する各処理を完了する前に、次のフレームデータの入力を待たせるバックプレッシャ制御を行う。
受信データFIFO回路701は、受信フレームのフレームデータを入力する。フレームデータは、特定のビット幅(例えば32ビット)のデータストリームとして入力される。データストリームには各フレームの先頭位置・終了位置を示す信号が付加される。受信データFIFO回路701は、フレームデータを蓄積し、デカプセル化回路707に出力する。
受信パーサ回路702は、受信フレームのフレームデータを入力する(受信データFIFO回路701への入力と同じ)。受信パーサ回路702は、入力した受信フレームのヘッダ構造をフレーム先頭から解析し、ESPヘッダの有無(IPsecの有無)を判定し、検索回路において必要となるフレーム抽出情報(宛先IPアドレス値やESPヘッダ内のSPI値など)を抽出し、検索回路703に出力する。また、受信フレームデータをデカプセル化するために必要となる外側IPヘッダの位置やESPヘッダの位置を示すデカプセル化位置情報を生成し、検索回路703に出力する。また受信フレームの外側IPヘッダからパケット長を抽出し、パケット長から外側IPヘッダ長(外側IPヘッダ先頭からESPヘッダ直前までの長さ)を差し引いた値を復号認証対象データ長として、検索回路703に出力する。
検索テーブル格納メモリ回路704は、検索テーブルを格納するメモリである。検索テーブル読出回路705が、メモリに対して、SA番号に対応付けられたアドレスをアクセスすることにより、SA番号が示す検索テーブルのエントリについて、検索情報(検索条件情報、検索結果情報)を読み出すことができる。また、外部から検索テーブルの各エントリについて検索情報を読み書きすることにより、エントリの登録・変更等を行うことができる。なお、検索条件情報には、宛先IPアドレス値・ESP SPI値が含まれる。また検索結果情報には、暗号方式・認証方式が含まれる(暗号方式や認証方式を復号認証テーブル格納メモリ708に記憶しておいてもよい)。
検索テーブル読出回路705は、入力したSA番号が示す検索テーブルのエントリから、検索情報を読み出し、入力したデカプセル化位置とともに検索回路703に出力する。
検索回路703は、入力した受信フレームにESPヘッダが無い(IPsecパケットでない)場合に、受信IPsec処理無の情報を含むジョブ情報をジョブFIFO回路706に出力する。入力した受信フレームにESPヘッダが有る場合は、受信フレームのフレーム抽出情報と、検索テーブルの各エントリの検索条件情報との一致を判定する。SA番号を最小値から最大値まで順に検索テーブル読出回路705に出力し、SA番号が示す検索テーブルのエントリの検索情報を入力する。検索情報の検索条件情報に含まれる宛先IPアドレス値・ESP SPI値等と、フレーム抽出情報に含まれる宛先IPアドレス値・ESP SPI値等が全て一致した場合に、SA番号を、受信フレームのSA番号とする。さらに、SA番号の検索情報に含まれる検索結果情報を取得する。検索回路703は、受信IPsec処理有の情報と入力したデカプセル化位置情報と復号認証対象データ長とともに、SA番号および検索結果情報を、受信フレームのジョブ情報としてジョブFIFO回路706に出力する。
ジョブFIFO回路706は、入力した受信フレームのジョブ情報を蓄積し、蓄積されたジョブ情報のうち、最も早くに蓄積されたジョブ情報を、デカプセル化回路に出力する。
デカプセル化回路707は、入力したジョブ情報に受信IPsec処理無の情報が含まれる場合、受信IPsec処理無の情報とともに、入力した受信フレームのフレームデータを復号認証制御回路710に出力する。ジョブ情報に受信IPsec処理有の情報が含まれる場合は、入力したジョブ情報のうちデカプセル化位置情報に基づいて、入力した受信フレームデータの先頭から外側IPヘッダ直前までのフレームデータを、受信フレームヘッダデータとして復号認証制御回路710に出力する。また、入力したジョブ情報に含まれる復号認証対象データ長とともに、入力した受信フレームのESPヘッダ以後のフレームデータを復号認証対象データとして復号認証制御回路710に出力する。また、受信IPsec処理有の情報と、入力したジョブ情報に含まれるSA番号と検索結果情報とともに、入力した受信フレームのESPヘッダ内のESPシーケンス番号を復号認証テーブル読出/更新回路709に出力する。
復号認証テーブル格納メモリ回路708は、復号認証テーブルを格納するメモリである。復号認証テーブル読出/更新回路709が、メモリに対して、SA番号に対応付けられたアドレスをアクセスすることにより、SA番号が示す復号認証テーブルのエントリに関する、復号認証情報を読み書きすることができる。また、外部から復号認証テーブルの各エントリについて復号認証情報を読み書きすることにより、エントリの登録・変更等を行うことができる。
復号認証テーブル読出/更新回路709は、入力したSA番号が示す復号認証テーブルのエントリから、復号認証情報を読み出し、復号認証情報に含まれる復号鍵および認証鍵を復号認証制御回路710に出力する。また、復号認証の成功を示す復号認証終了信号を入力したとき、デカプセル化回路707から入力したESPシーケンス番号を、読み出した復号認証情報に含まれるESPシーケンス番号およびアンチリプレイウインドウ状態に基づいて、アンチリプレイの判定を行い、アンチリプレイの成功有無を示すアンチリプレイ終了信号を復号認証制御回路710に出力する。併せて、復号認証情報に含まれるESPシーケンス番号およびアンチリプレイウインドウ状態を更新する(アンチリプレイが成功しなかった場合は更新しない)。また、復号認証情報に受信フレーム数や受信フレームデータのバイト数を追加しておき、受信毎に値を更新してもよい。
復号認証制御回路710は、受信IPsec処理無の情報を入力した場合、情報とともに入力した受信フレームのフレームデータを、出力フレームFIFO回路715に出力する。受信IPsec処理有の情報を入力した場合は、情報とともに入力した受信フレームヘッダデータを出力フレームFIFO回路715に出力する。さらに、入力した受信フレームの復号認証対象データのうち、ESPペイロード(ESPヘッダ・IV・ICVを除く復号認証対象データ)に対して、入力した検索結果情に含まれる暗号方式を示す情報に基づいて復号化し、出力フレームFIFO回路715に出力する。暗号方式がNULLの場合は、ESPペイロードをそのまま出力する。暗号方式が3DESの場合は、入力した復号鍵とともにESPペイロードを暗号ブロック長(64ビット)ずつに区切った暗号データブロックを3DES復号回路711に出力し、暗号データブロックを復号化した平文データブロックを3DES復号回路711から入力して、出力する。暗号方式がAESの場合は、入力した復号鍵と入力した復号方式を示す情報に基づいて生成した復号鍵長情報を含む復号制御信号とともに、暗号データを暗号ブロック長(128ビット)ずつに区切った暗号データブロックをAES復号回路712に出力し、暗号データブロックを復号化した平文データブロックをAES復号回路712から入力して、出力する。なお、復号認証制御回路710は、各送信フレームの初回の暗号データブロックを出力する前に、IVおよび初期化信号を含む復号制御信号を出力することにより、3DES復号回路711あるいはAES復号回路712の初期化を行う。復号認証制御回路710は、受信IPsec処理有の情報を入力した場合は、入力した受信フレームの復号認証対象データ中の認証対象データ(ICVを除く復号認証対象データ)に対して、入力した検索結果情に含まれる認証方式を示す情報に基づいてICVを生成し、復号認証対象データに含まれるICVとの一致を判定する。ただし、認証方式がNULLの場合は、ICVの生成および一致判定は行わない(一致したとみなす)。認証方式がHMAC−MD5の場合は、認証対象データを認証対象データブロック長(512ビット)に区切った認証対象データブロックを、認証鍵および認証制御信号(各送信フレームにおける初回/最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む)とともに、MD5回路713に出力し、最終回の認証対象データブロックを出力した後、MD5回路713からICV(96ビット)を入力する。認証方式がHMAC−SHA−1の場合は、認証対象データを認証対象データブロック長(512ビット)に区切った認証データブロックを、認証鍵および認証制御信号(各送信フレームにおける初回/最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む)とともに、SHA−1回路714に出力し、最終回の認証対象データブロックを出力した後、SHA−1回路714からICV(96ビット)を入力する。上記処理が終了したとき、復号認証の成功有無を判定し(復号が正常終了しICVが一致した場合に有)、判定結果(成功有無)を示す復号認証終了信号を出力する。また、入力したアンチリプレイ終了信号を出力フレームFIFO回路715に出力する。
3DES復号回路711は、入力した復号鍵と復号制御信号に基づいて、入力した暗号データブロックを3DES−CBCアルゴリズムにより復号化し、平文データブロックとして出力する。ただし、初期化信号を含む復号制御信号を入力した場合は、3DES復号回路の状態を入力したIV値(64ビット)を用いて初期化する。
AES復号回路712は、図8等を参照して説明した本発明の実施形態としてのAES復号回路2に相当する構成であり、入力した復号鍵と復号鍵長情報を含む復号制御信号に基づいて、入力した暗号データブロックをAES−CBCアルゴリズムにより復号化し、平文データブロックとして出力する。ただし、初期化信号を含む復号制御信号を入力した場合は、3DES復号回路の状態を入力したIV値(128ビット)を用いて初期化する。
MD5回路713は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをHMAC−MD5アルゴリズムによりICV(96ビット)を生成し出力する。
SHA−1回路714は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをHMAC−SHA−1アルゴリズムによりICV(96ビット)を生成し出力する。
出力フレームFIFO回路715は、復号認証制御回路710から入力したフレームデータをフレームの先頭からFIFOバッファに蓄積し、フレームの最後まで蓄積され、かつ、フレームについて受信IPsec処理無を示す情報を入力しているとき、あるいは、アンチリプレイ成功有を示すフレームに対するアンチリプレイ終了信号を入力したとき、外部への出力を許可する。アンチリプレイ成功無を示すフレームに対するアンチリプレイ終了信号を入力したときは、蓄積中のフレームのフレームデータを破棄する。
以上のように、本発明の各実施形態によれば、1クロックで1ラウンドを処理するAES暗号/復号処理における高速なラウンド処理を実現しつつ、SA数の増加に伴うメモリ容量の増加等による回路規模の増大を抑制することができる。
本発明の各実施形態は、暗号/復号のラウンド処理を実施する前に外部から設定された暗号鍵・復号鍵(すなわち共通鍵)から拡大鍵を生成しメモリに格納するのではなく、暗号/復号の各々にラウンドの進行に合わせて拡大鍵を生成する拡大鍵生成回路(暗号用拡大鍵生成回路12あるいは復号用拡大鍵生成回路22)を備えている。
暗号用拡大鍵生成回路12は、256ビット長の暗号用拡大鍵生成レジスタ122と暗号用拡大鍵生成論理回路121と暗号用拡大鍵出力論理回路123とを備える。暗号用拡大鍵出力論理回路123は、暗号用拡大鍵生成レジスタ122から鍵長情報と暗号ラウンドの進行に応じて選択された128ビット長の値を、暗号用拡大鍵として出力する。暗号用拡大鍵生成論理回路121は、暗号用拡大鍵の生成を開始した時に暗号用拡大鍵生成レジスタを入力された暗号鍵の値に初期化し、各暗号ラウンド時に、暗号鍵長情報と暗号ラウンドの進行に応じて定まる所定の暗号用拡大鍵生成演算を暗号用拡大鍵生成レジスタ122の値に対して行い、暗号用拡大鍵生成レジスタ122の値をその演算結果によって更新する。
復号用拡大鍵生成回路22は、256ビット長の復号用拡大鍵生成レジスタ222と復号用拡大鍵生成論理回路221と復号用拡大鍵出力論理回路223とを備える。復号用拡大鍵出力論理回路223は、復号用拡大鍵生成レジスタ222から鍵長情報と暗号ラウンドの進行に応じて選択された128ビット長の値を、復号用拡大鍵として出力する。復号用拡大鍵生成論理回路221は、復号用拡大鍵の生成を開始した時に復号用拡大鍵生成レジスタを入力された復号鍵の値に初期化し、各復号ラウンド時に、鍵長情報と復号ラウンドの進行に応じて定まる所定の復号用拡大鍵生成演算を復号用拡大鍵生成レジスタ222の値に対して行い、復号用拡大鍵生成レジスタ22の値をその演算結果によって更新する。
また、拡大鍵生成論理(暗号用拡大鍵生成論理回路121または復号用拡大鍵生成論理回路221)は、拡大鍵生成レジスタ(暗号用拡大鍵生成レジスタ122または復号用拡大鍵生成レジスタ222)の32ビット単位の各出力(RK0〜RK7)と、それと異なる他の32ビット単位の出力に対応する値(RK0〜RK7あるいはRK0〜RK7の値に応じて出力値が変化する排他的論理和回路405または505の出力)との排他的論理和を演算する複数の排他的論理和回路と、複数の排他的論理和回路の出力と拡大鍵生成レジスタの32ビット単位の各出力とのいずれかを選択して出力する複数の選択回路(セレクタ414〜421または514〜521)とを有し、拡大鍵生成レジスタの値を複数の選択回路の出力によって更新するようにしている。
本発明の各実施形態によれば、拡大鍵を格納するための大容量のメモリが不要となるという効果が得られる。すなわち、IPsec回路が対象とするSA数が増加した場合においても、回路規模を増大させることなく暗号/復号を行うことができる。
また、暗号と復号の各処理に拡大鍵生成回路(暗号用拡大鍵生成回路12あるいは復号用拡大鍵生成回路22)を備えることで、暗号と復号を同時に実行することで全体として処理を高速化することができる。すなわち、暗号処理装置には、暗号処理で用いられる共通鍵が暗号鍵であって、各ラウンド処理で用いられる暗号用拡大鍵を生成するものである暗号用拡大鍵生成回路12と、暗号処理で用いられる共通鍵が復号鍵であって、各ラウンド処理で用いられる復号用拡大鍵を生成するものである復号用拡大鍵生成回路22とを備えるようにすることができる。
また、拡大鍵生成レジスタ(暗号用拡大鍵生成レジスタ122または復号用拡大鍵生成レジスタ222)の値の一部を選択して拡大鍵とするため、拡大鍵生成の論理とラウンド処理の論理を合わせた場合のクリティカルパスの論理段数増大が生じない。すなわち、メモリから拡大鍵を読み出して使用する先行技術と同程度の論理段数でラウンド処理を実現でき、1クロックで1ラウンドを処理する高速なラウンド処理が可能となる。
また、鍵長情報とラウンドの進行に応じて定まる所定の演算を拡大鍵生成レジスタ(暗号用拡大鍵生成レジスタ122または復号用拡大鍵生成レジスタ222)に対して行うため、AESで規定された全ての鍵長に対して対応することが可能であり、IPsecを用いて通信する対向機器のAES実装状態に応じて鍵長を変更することができる。
また、拡大鍵生成回路(暗号用拡大鍵生成回路12あるいは復号用拡大鍵生成回路22)に要するD−FFは、拡大鍵生成レジスタ(暗号用拡大鍵生成レジスタ122または復号用拡大鍵生成レジスタ222)を構成する256個のみで良く、拡大鍵生成アルゴリズムの実装に必要な最小個数であるため、D−FFへのクロック信号供給に要する消費電力と、拡大鍵生成回路の回路規模を、抑制することができる。
なお、本発明の実施の形態は、上記に限定されず、ブロック図においてブロックに分けて表した各構成・機能を、さらに分割して分散させたり、複数のブロックを統合させたりする変更などを適宜行うことができる。また、本発明の暗号処理装置(すなわちAES暗号回路1やAES復号回路2)は、その構成の一部にCPUとCPUによって実行されるプログラムとを用いたり、本発明の暗号処理装置に入出力される制御信号や平文データあるいは暗号文データを外部のCPUとそのCPUによって実行されるプログラムとを用いて制御したりすることができる。そして、その場合に用いられるプログラムは、コンピュータ読み取り可能な記録媒体あるいは通信回線を介して提供することができる。