(57)【要約】【課題】ＩＰｓｅｃ回路が対象とするＳＡ数が増加した場合においても、回路規模を増大させることなく暗号／復号を行うことができる。【解決手段】暗号用拡大鍵生成論理回路１２１は、暗号用拡大鍵の生成を開始する際には、入力された値を暗号用拡大鍵生成レジスタ１２２に記憶し、ＡＥＳ暗号回路が各ラウンド処理を行う際には、暗号鍵の長さを示す鍵長情報とラウンド処理の進行に応じて定まる所定の暗号用拡大鍵生成演算を暗号用拡大鍵生成レジスタ１２２が記憶する値に対して行い、暗号用拡大鍵生成レジスタ１２２が記憶する値を暗号用拡大鍵生成演算の結果に応じて更新する。暗号用拡大鍵出力論理回路１２３は、暗号用拡大鍵生成レジスタ１２２から鍵長情報とラウンド処理の進行とに基づいて選択された１２８ビット長の値を暗号用拡大鍵として出力する。【選択図】図２
2010266751.tif 000002
【特許請求の範囲】
【請求項１】
ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ暗号回路に備えられ、各ラウンド処理で用いられる暗号用拡大鍵を生成する暗号用拡大鍵生成回路であって、
暗号用拡大鍵生成レジスタと、
前記暗号用拡大鍵の生成を開始する際には、入力された値を前記暗号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ暗号回路が各ラウンド処理を行う際には、暗号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の暗号用拡大鍵生成演算を前記暗号用拡大鍵生成レジスタが記憶する値に対して行い、前記暗号用拡大鍵生成レジスタが記憶する値を前記暗号用拡大鍵生成演算の結果に応じて更新する暗号用拡大鍵生成論理回路と、
前記暗号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記暗号用拡大鍵として出力する暗号用拡大鍵出力論理回路と、
を備えることを特徴とする暗号用拡大鍵生成回路。
【請求項２】
ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ復号回路に備えられ、各ラウンド処理で用いられる復号用拡大鍵を生成する復号用拡大鍵生成回路であって、
復号用拡大鍵生成レジスタと、
前記復号用拡大鍵の生成を開始する際には、入力された値を前記復号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ復号回路が各ラウンド処理を行う際には、復号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の復号用拡大鍵生成演算を前記復号用拡大鍵生成レジスタが記憶する値に対して行い、前記復号用拡大鍵生成レジスタが記憶する値を前記復号用拡大鍵生成演算の結果に応じて更新する復号用拡大鍵生成論理回路と、
前記復号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記復号用拡大鍵として出力する復号用拡大鍵出力論理回路と、
を備えることを特徴とする復号用拡大鍵生成回路。
【請求項３】
ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ暗号回路に備えられ、暗号用拡大鍵生成回路による各ラウンド処理で用いられる暗号用拡大鍵を生成する暗号用拡大鍵生成方法であって、
前記暗号用拡大鍵の生成を開始する際には、入力された値を前記暗号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ暗号回路が各ラウンド処理を行う際には、暗号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の暗号用拡大鍵生成演算を前記暗号用拡大鍵生成レジスタが記憶する値に対して行い、前記暗号用拡大鍵生成レジスタが記憶する値を前記暗号用拡大鍵生成演算の結果に応じて更新する暗号用拡大鍵生成論理ステップと、
前記暗号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記暗号用拡大鍵として出力する暗号用拡大鍵出力論理ステップと、
を含むことを特徴とする暗号用拡大鍵生成方法。
【請求項４】
ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ復号回路に備えられ、復号用拡大鍵生成回路による各ラウンド処理で用いられる復号用拡大鍵を生成する復号用拡大鍵生成方法であって、
前記復号用拡大鍵の生成を開始する際には、入力された値を前記復号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ復号回路が各ラウンド処理を行う際には、復号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の復号用拡大鍵生成演算を前記復号用拡大鍵生成レジスタが記憶する値に対して行い、前記復号用拡大鍵生成レジスタが記憶する値を前記復号用拡大鍵生成演算の結果に応じて更新する復号用拡大鍵生成論理ステップと、
前記復号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記復号用拡大鍵として出力する復号用拡大鍵出力論理ステップと、
を含むことを特徴とする復号用拡大鍵生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを暗号化したり暗号化されデータを復号したりする際に用いられる暗号用拡大鍵生成回路、復号用拡大鍵生成回路、暗号用拡大鍵生成方法および復号用拡大鍵生成方法に関する。
【背景技術】
【０００２】
ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）は、共通鍵ブロック暗号アルゴリズムの１つの仕様であり（非特許文献１参照）、１２８、１９２及び２５６ビットの共通鍵（暗号鍵／復号鍵）を使用し、データを１２８ビットのブロック単位で暗号化及び復号するアルゴリズムを規定する。
【０００３】
非特許文献１によると、ＡＥＳでは、データに対して暗号鍵／復号鍵を用いた複数種類の処理（すなわち関数演算処理あるいは変換処理）からなるラウンド処理を繰り返し実行することで暗号化と復号の処理が行われる。その際、ＡＥＳでは、外部から設定された暗号鍵／復号鍵が直接暗号／復号に使用されるのではなく、暗号鍵／復号鍵から（Ｎｒ＋１）個の拡大鍵［０］〜拡大鍵［Ｎｒ］が生成され、この拡大鍵が各ラウンド処理の進行に合わせて順番に用いられる。Ｎｒはラウンド数であり、暗号鍵長／復号鍵長が１２８ビットの場合は１０、暗号鍵長／復号鍵長が１９２ビットの場合は１２、暗号鍵長／復号鍵長が２５６ビットの場合は１４である。また、復号で拡大鍵が使用される順番は暗号化時の逆順であり、また、暗号化時に拡大鍵が使用される順番で暗号鍵から拡大鍵を生成するアルゴリズムが存在する。
【０００４】
特許文献１では、暗号／復号のラウンド処理を実施する前に外部から設定された暗号鍵／復号鍵からＮｒ＋１個の拡大鍵を生成してメモリに格納し、ラウンド処理時にメモリから拡大鍵を読み出して使用するようになっている。特許文献１に記載の技術では、これにより、１クロックで１ラウンドを処理する高速なラウンド処理を可能とした。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−１６６２７９号公報
【非特許文献】
【０００６】
【非特許文献１】ＮＩＳＴ、Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄ  １９７（ＦＩＰＳ  ＰＵＢ  １９７）、  ’Ｔｈｅ  Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ  （ＡＥＳ）’、Ｎａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｓｔａｎｄａｒｄ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ（（米国）国立標準技術研究所）、２００１年１１月２６日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１に記載されている技術では、ＩＰｓｅｃ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ｓｅｃｕｒｉｔｙ  Ｐｒｏｔｏｃｏｌ）回路が、対象とするＳＡ（Ｓｅｃｕｒｉｔｙ  Ａｓｓｏｃｉａｔｉｏｎ）毎に拡大鍵を格納するメモリが必要であり、ＳＡ数の増加に伴って回路規模が増大するという課題があった。
【０００８】
本発明は、上記の事情に鑑みてなされものであり、ＩＰｓｅｃ回路が対象とするＳＡ数が増加した場合においても、回路規模を増大させることなく暗号／復号を行うことができる暗号用拡大鍵生成回路、復号用拡大鍵生成回路、暗号用拡大鍵生成方法および復号用拡大鍵生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ暗号回路に備えられ、各ラウンド処理で用いられる暗号用拡大鍵を生成する暗号用拡大鍵生成回路であって、暗号用拡大鍵生成レジスタと、前記暗号用拡大鍵の生成を開始する際には、入力された値を前記暗号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ暗号回路が各ラウンド処理を行う際には、暗号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の暗号用拡大鍵生成演算を前記暗号用拡大鍵生成レジスタが記憶する値に対して行い、前記暗号用拡大鍵生成レジスタが記憶する値を前記暗号用拡大鍵生成演算の結果に応じて更新する暗号用拡大鍵生成論理回路と、前記暗号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記暗号用拡大鍵として出力する暗号用拡大鍵出力論理回路と、を備えることを特徴とする暗号用拡大鍵生成回路である。
【００１０】
これによれば、暗号用拡大鍵生成論理回路は、暗号用拡大鍵の生成を開始する際には、入力された値を暗号用拡大鍵生成レジスタに記憶し、ＡＥＳ暗号回路が各ラウンド処理を行う際には、暗号鍵の長さを示す鍵長情報とラウンド処理の進行に応じて定まる所定の暗号用拡大鍵生成演算を暗号用拡大鍵生成レジスタが記憶する値に対して行い、暗号用拡大鍵生成レジスタが記憶する値を暗号用拡大鍵生成演算の結果に応じて更新する。暗号用拡大鍵出力論理回路は、暗号用拡大鍵生成レジスタから鍵長情報とラウンド処理の進行とに基づいて選択された１２８ビット長の値を暗号用拡大鍵として出力する。よって、ラウンド処理の進行に合わせて拡大鍵を生成することができる。したがって、拡大鍵生成レジスタのほかには、拡大鍵を格納するためのメモリを用いなくてもよくなる。すなわち、ＩＰｓｅｃ回路が対象とするＳＡ数が増加した場合においても、回路規模を増大させることなく暗号を行うことができる。
【００１１】
また、本発明は、ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ復号回路に備えられ、各ラウンド処理で用いられる復号用拡大鍵を生成する復号用拡大鍵生成回路であって、復号用拡大鍵生成レジスタと、前記復号用拡大鍵の生成を開始する際には、入力された値を前記復号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ復号回路が各ラウンド処理を行う際には、復号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の復号用拡大鍵生成演算を前記復号用拡大鍵生成レジスタが記憶する値に対して行い、前記復号用拡大鍵生成レジスタが記憶する値を前記復号用拡大鍵生成演算の結果に応じて更新する復号用拡大鍵生成論理回路と、前記復号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記復号用拡大鍵として出力する復号用拡大鍵出力論理回路と、を備えることを特徴とする復号用拡大鍵生成回路である。
【００１２】
これによれば、復号用拡大鍵生成論理回路は、復号用拡大鍵の生成を開始する際には、入力された値を復号用拡大鍵生成レジスタに記憶し、ＡＥＳ復号回路が各ラウンド処理を行う際には、復号鍵の長さを示す鍵長情報とラウンド処理の進行に応じて定まる所定の復号用拡大鍵生成演算を複合用拡大鍵生成レジスタが記憶する値に対して行い、復号用拡大鍵生成レジスタが記憶する値を復号用拡大鍵生成演算の結果に応じて更新する。復号用拡大鍵出力論理回路は、復号用拡大鍵生成レジスタから鍵長情報とラウンド処理の進行とに基づいて選択された１２８ビット長の値を復号用拡大鍵として出力する。よって、ラウンド処理の進行に合わせて拡大鍵を生成することができる。したがって、拡大鍵生成レジスタのほかには、拡大鍵を格納するためのメモリを用いなくてもよくなる。すなわち、ＩＰｓｅｃ回路が対象とするＳＡ数が増加した場合においても、回路規模を増大させることなく復号を行うことができる。
【００１３】
また、本発明は、ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ暗号回路に備えられ、暗号用拡大鍵生成回路による各ラウンド処理で用いられる暗号用拡大鍵を生成する暗号用拡大鍵生成方法であって、前記暗号用拡大鍵の生成を開始する際には、入力された値を前記暗号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ暗号回路が各ラウンド処理を行う際には、暗号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の暗号用拡大鍵生成演算を前記暗号用拡大鍵生成レジスタが記憶する値に対して行い、前記暗号用拡大鍵生成レジスタが記憶する値を前記暗号用拡大鍵生成演算の結果に応じて更新する暗号用拡大鍵生成論理ステップと、前記暗号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記暗号用拡大鍵として出力する暗号用拡大鍵出力論理ステップと、を含むことを特徴とする暗号用拡大鍵生成方法である。
【００１４】
また、本発明は、ラウンド処理を繰り返し実行することでＡＥＳアルゴリズムに基づく処理を行うＡＥＳ復号回路に備えられ、復号用拡大鍵生成回路による各ラウンド処理で用いられる復号用拡大鍵を生成する復号用拡大鍵生成方法であって、前記復号用拡大鍵の生成を開始する際には、入力された値を前記復号用拡大鍵生成レジスタに記憶し、前記ＡＥＳ復号回路が各ラウンド処理を行う際には、復号鍵の長さを示す鍵長情報と該ラウンド処理の進行に応じて定まる所定の復号用拡大鍵生成演算を前記復号用拡大鍵生成レジスタが記憶する値に対して行い、前記復号用拡大鍵生成レジスタが記憶する値を前記復号用拡大鍵生成演算の結果に応じて更新する復号用拡大鍵生成論理ステップと、前記復号用拡大鍵生成レジスタから前記鍵長情報と前記ラウンド処理の進行とに基づいて選択された１２８ビット長の値を前記復号用拡大鍵として出力する復号用拡大鍵出力論理ステップと、を含むことを特徴とする復号用拡大鍵生成方法である。
【発明の効果】
【００１５】
本発明によれば、ＩＰｓｅｃ回路が対象とするＳＡ数が増加した場合においても、回路規模を増大させることなく暗号／復号を行うことができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施形態としてのＡＥＳ暗号回路の構成例を示すブロック図である。
【図２】図１の暗号用拡大鍵生成回路１２の構成例を示すブロック図である。
【図３】図２の暗号用拡大鍵生成回路１２の動作例を示すフローチャートである。
【図４】図２の暗号用拡大鍵生成論理回路１２１の構成例を示すブロック図である。
【図５】図２の暗号用拡大鍵生成回路１２の動作例（暗号鍵長＝１２８ビット時のシーケンス）を説明するための図である。
【図６】図２の暗号用拡大鍵生成回路１２の動作例（暗号鍵長＝１９２ビット時のシーケンス）を説明するための図である。
【図７】図２の暗号用拡大鍵生成回路１２の動作例（暗号鍵長＝２５６ビット時のシーケンス）を説明するための図である。
【図８】本発明の一実施形態としてのＡＥＳ復号回路の構成例を示すブロック図である。
【図９】図８の復号用拡大鍵生成回路２２の構成例を示すブロック図である。
【図１０】図９の復号用拡大鍵生成回路２２の動作例を示すフローチャートである。
【図１１】図９の復号用拡大鍵生成論理回路２２１の構成例を示すブロック図である。
【図１２】図９の復号用拡大鍵生成回路２２の動作例（復号鍵長＝１２８ビット時のシーケンス）を説明するための図である。
【図１３】図９の復号用拡大鍵生成回路２２の動作例（復号鍵長＝１９２ビット時のシーケンス）を説明するための図である。
【図１４】図９の復号用拡大鍵生成回路２２の動作例（復号鍵長＝２５６ビット時のシーケンス）を説明するための図である。
【図１５】本発明の一実施形態としての送信ＩＰｓｅｃ回路の構成例を示すブロック図である。
【図１６】本発明の一実施形態としての受信ＩＰｓｅｃ回路の構成例を示すブロック図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本発明の実施の形態について説明する。各図において、図１〜図７が、本発明の一実施の形態としてのＡＥＳ暗号回路に関する図であり、図８〜図１４が、本発明の一実施の形態としてのＡＥＳ復号回路に関する図であり、図１５が本発明の一実施の形態としての送信ＩＰｓｅｃ回路に関する図であり、図１６が本発明の一実施の形態としての受信ＩＰｓｅｃ回路に関する図である。
【００１８】
本発明の一実施の形態としてのＡＥＳ暗号回路１の構成例を図１に示す。ＡＥＳ暗号回路１は、上述したＡＥＳアルゴリズムに従って暗号化処理を行う回路であって、暗号用ラウンド処理回路１１、暗号用拡大鍵生成回路１２、および暗号用ラウンド制御回路１３から構成されている。ＡＥＳ暗号回路１は、１２８ビット長の平文データブロックと２５６ビット長の暗号鍵（暗号鍵長が１２８または１９２ビットの場合は先頭ビットから１２８または１９２ビット分が有効）と暗号制御信号を入力し、１２８ビット長の平文データブロックを暗号鍵を用いて暗号化した１２８ビット長の暗号データブロックを出力する。暗号制御信号には、暗号鍵長を示す暗号鍵長情報と暗号開始や終了を指示する暗号動作情報が含まれている。ただし、図１では、各回路へのクロック信号の入力に係る構成の図示を省略している。なお、図１に示す各回路は、例えば、複数の論理回路などを組み合わせることで構成されていたり、その一部の機能をＣＰＵ（中央処理装置）とそのＣＰＵで実行されるプログラムとを用いて実現することで構成されていたりする（他の実施形態についても同様である）。
【００１９】
図１の暗号用ラウンド制御回路１３は、図示していない他のＣＰＵなどから入力された暗号制御信号を入力し、暗号用拡大鍵生成回路１２の動作を制御する暗号用拡大鍵生成制御信号および暗号用ラウンド処理回路１１の動作を制御する暗号用ラウンド処理制御信号を出力する。暗号用拡大鍵生成回路１２は、図示していない他のＣＰＵなどから入力された暗号鍵と暗号用拡大鍵生成制御信号を入力し、暗号用ラウンド処理回路１１の暗号ラウンドＲ（Ｒ＝０〜Ｎｒ）用の拡大鍵［Ｒ］を、Ｒが０からＮｒの順に１クロックに１個ずつ出力する。暗号用ラウンド処理回路１１は、図示していない他のＣＰＵなどから入力された１２８ビット長の平文データブロックと、暗号ラウンド毎に拡大鍵を入力し、全暗号ラウンドを終了した時点で１２８ビット長の暗号データブロックを図示していない他のＣＰＵなどに対して出力する。
【００２０】
図１の暗号用拡大鍵生成回路１２の構成例を図２に示す。暗号用拡大鍵生成回路１２は、暗号用拡大鍵生成論理回路１２１、２５６ビット長の暗号用拡大鍵生成レジスタ１２２、および暗号用拡大鍵出力論理回路１２３から構成されている。図２に示す暗号用拡大鍵生成回路１２の動作を表すフローチャートを図３に示す。また、図３のフローチャートに基づいて動作する暗号用拡大鍵生成論理回路１２１の構成例を図４に示す。また、図３のフローチャートに基づいて動作する暗号用拡大鍵生成回路１２の動作シーケンスを図５から図７に示す。
【００２１】
図２に示した暗号用拡大鍵生成レジスタ１２２は、２５６個のＤ−ＦＦ（Ｄタイプフリップフロップ）から構成され、各Ｄ−ＦＦに外部からのクロック信号が供給される。図２に示す例では、暗号用拡大鍵生成レジスタ１２２が、各３２個のＤ−ＦＦから構成される８個のレジスタＲＫ０〜ＲＫ７から構成されている。すなわち、レジスタＲＫ０〜ＲＫ７は、各３２ビット長のレジスタとして構成されている。レジスタＲＫ０〜ＲＫ７を構成する全部で２５６個のＤ−ＦＦは、例えばクロック信号の立ち上がり（または立ち下がり）に応じてデータの入力・保持と出力とを行うフリップフロップとして構成されている。すなわち、暗号用拡大鍵生成レジスタ１２２は、外部から供給されるクロック信号の立ち上がり（または立ち下がり）に応じて暗号用拡大鍵生成論理回路１２１から出力された暗号用拡大鍵生成レジスタの更新値（全２５６ビットのデータ）を、２５６個のＤ−ＦＦに入力して保持し、出力する。
【００２２】
図２の暗号用拡大鍵出力論理回路１２３は、暗号用拡大鍵生成レジスタ１２２から出力された２５６ビットのデータから、暗号鍵長情報と暗号ラウンドの進行に応じて選択された１２８ビット長の値を、暗号用拡大鍵（図２の「拡大鍵」）として出力する。
【００２３】
暗号用拡大鍵生成論理回路１２１は、暗号用拡大鍵の生成を開始した時に暗号用拡大鍵生成レジスタ１２２を入力された暗号鍵の値に初期化する。暗号用拡大鍵生成論理回路１２１は、また、各ラウンド時に、暗号鍵長情報と暗号ラウンドの進行に応じて定まる所定の暗号用拡大鍵生成演算を暗号用拡大鍵生成レジスタ１２２の値（図２の「暗号用拡大鍵生成レジスタの現在値」）に対して行い、暗号用拡大鍵生成レジスタ１２２の値をその演算結果の値（図２の「暗号用拡大鍵生成レジスタの更新値」）で更新する。暗号用拡大鍵生成レジスタ１２２の初期化を行うタイミングや、暗号鍵長情報と暗号ラウンドの進行に応じた制御には、図１の暗号用ラウンド制御回路１３から出力された暗号用拡大鍵生成制御信号が用いられる。この暗号用拡大鍵生成制御信号には、上述した暗号ラウンドを示す信号Ｒ（すなわち変数Ｒ）などが含まれている。
【００２４】
次に、図３を参照して、図１および図２の暗号用拡大鍵生成回路１２の動作について説明する。図３に示す各処理におけるフローの制御は、図１の暗号用ラウンド制御回路１３が生成する暗号用拡大鍵生成制御信号に基づいて、図２の暗号用拡大鍵生成論理回路１２１、暗号用拡大鍵出力論理回路１２３等によって行われる。具体的には、図３のフローチャートにおいて、ステップＳ１０２、Ｓ１０８、Ｓ１１５、Ｓ１１９、Ｓ１２１、Ｓ１２６、Ｓ１２９およびＳ１３１の各処理が、暗号用拡大鍵生成論理回路１２１によって実現される処理である。また、ステップＳ１０７、Ｓ１１４、Ｓ１１８、Ｓ１２０、Ｓ１２５、Ｓ１２８およびＳ１３０の各処理が、暗号用拡大鍵出力論理回路１２３によって実現される処理である。また、ステップＳ１０１、Ｓ１０３、Ｓ１０５、Ｓ１０６、Ｓ１０９、Ｓ１１２、Ｓ１１３、Ｓ１１６、Ｓ１１７、Ｓ１２３、Ｓ１２４およびＳ１３２の各処理が、暗号用ラウンド制御回路１３によって実現される処理である。また、ステップＳ１０４、Ｓ１１０、Ｓ１１７およびＳ１２７の各処理は、クロックタイミング待ちを表している。
【００２５】
なお、ステップＳ１０７、Ｓ１１４、Ｓ１１８、Ｓ１２０、Ｓ１２５、Ｓ１２８またはＳ１３０で、暗号用拡大鍵出力論理回路１２３が拡大鍵の出力選択を行う拡大鍵出力選択１〜４の処理は、以下のようにして行われる。なお、拡大鍵出力選択１〜４の処理によって出力される拡大鍵は、各暗号ラウンドに対応するものとして表す場合には拡大鍵［Ｒ］として表すこととする。
【００２６】
【数１】
2010266751.tif 000003
【００２７】
すなわち、ステップＳ１０７、Ｓ１１４、Ｓ１２５およびＳ１２８における暗号用拡大鍵出力論理回路１２３による拡大鍵出力選択１の処理では、拡大鍵の値として、レジスタＲＫ０、ＲＫ１、ＲＫ２およびＲＫ３からの出力がこの順で組み合わせて選択される。ステップＳ１１８における暗号用拡大鍵出力論理回路１２３による拡大鍵出力選択２の処理では、拡大鍵の値として、レジスタＲＫ４、ＲＫ５、ＲＫ０およびＲＫ１からの出力がこの順で組み合わせて選択される。ステップＳ１２０における暗号用拡大鍵出力論理回路１２３による拡大鍵出力選択３の処理では、拡大鍵の値として、レジスタＲＫ２、ＲＫ３、ＲＫ４およびＲＫ５からの出力がこの順で組み合わせて選択される。ステップＳ１３０における暗号用拡大鍵出力論理回路１２３による拡大鍵出力選択４の処理では、拡大鍵の値として、レジスタＲＫ４、ＲＫ５、ＲＫ６およびＲＫ７からの出力がこの順で組み合わせて選択される。
【００２８】
また、ステップＳ１０２、Ｓ１０８、Ｓ１１５、Ｓ１１９、Ｓ１２１、Ｓ１２６、Ｓ１２９およびＳ１３１で、暗号用拡大鍵生成論理回路１２１が拡大鍵の生成演算を行う拡大鍵生成演算０、１．０〜１．３、２〜４の処理は、以下のようにして行われる。
【００２９】
【数２】
2010266751.tif 000004
【００３０】
ここで、ＲＫ０〜ＲＫ７は、暗号用拡大鍵生成レジスタ１２２の現在値、ＲＫ０’〜ＲＫ７’は、暗号用拡大鍵生成レジスタ１２２の更新値である。また、Ｒｃｏｎ（Ｎ）は、変数Ｎを０〜９として次のようにして表される１ワードの定数である。
【００３１】
【数３】
2010266751.tif 000005
【００３２】
なお、本実施形態において１ワードは３２ビット（＝４バイト）である。例えば、Ｒｃｏｎ（０）は、１６進数で「０１００００００」の定数である。また、演算子「＝」は代入演算子を表し（すなわち（左辺）＝（右辺）は（右辺）を（左辺）に代入することを意味し）、演算子「＝＝」は等号による比較演算子を表し、演算子「＋」は排他的論理和を表す。また、ＳｕｂＷｏｒｄ（）は、非特許文献１に規定されている鍵拡張処理で用いられる関数であり、４バイトを入力し、各バイトにＳ−ｂｏｘを適用することで出力ワードを生成する。Ｓ−ｂｏｘは、非線形置換表であり、鍵拡張処理ではバイト値を１対１で置換する。ＲｏｔＷｏｒｄ（）は、非特許文献１に規定されている鍵拡張処理で用いられる関数であり、４バイトのワードに巡回置換を実行する。
【００３３】
次に、図３のフローチャートをステップ毎に説明する。
【００３４】
（Ｓ１０１）暗号用ラウンド制御回路１３が、暗号用拡大鍵生成制御信号の１つである制御信号Ａ（あるいは変数Ａとも呼ぶことができる）を「０」に設定する。制御信号Ａは暗号用拡大鍵生成回路１２に外部から暗号鍵を入力する場合に「０」に設定される信号である。その後、ステップＳ１０２へ進む。
【００３５】
（Ｓ１０２）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算０を実行し、暗号用拡大鍵生成レジスタ１２２の値を更新する。ここで、暗号用拡大鍵生成レジスタ１２２に暗号鍵の値が格納される。その後、ステップＳ１０３へ進む。
【００３６】
（Ｓ１０３）暗号用ラウンド制御回路１３が、制御信号Ａを「１」に設定する。その後、ステップＳ１０４へ進む。
【００３７】
（Ｓ１０４）ここではクロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。その後、ステップＳ１０５へ進む。なお、各ステップの処理は、クロック信号の周期に対して十分短時間で行われるようになっている。したがって、図３に示す処理では、各ラウンドＲに対応した新たな拡大鍵［Ｒ］を１クロック周期毎に生成、出力することができる。
【００３８】
（Ｓ１０５）暗号用ラウンド制御回路１３が、暗号鍵長を検知し、これ以降の制御内容が決定される。すなわち、暗号鍵長が１２８ビットの場合、ステップＳ１０６〜Ｓ１１０とステップＳ１１１の処理が行われ、暗号鍵長が１９２ビットの場合、ステップＳ１１２〜Ｓ１２２とステップＳ１１１の処理が行われ、暗号鍵長が２５６ビットの場合、ステップＳ１２３〜Ｓ１３２とステップＳ１１１の処理が行われることになる。暗号鍵長が１２８ビットの場合、ステップＳ１０６へ進み、暗号鍵長が１９２ビットの場合、ステップＳ１１２へ進み、暗号鍵長が２５６ビットの場合、ステップＳ１２３へ進む。
【００３９】
（Ｓ１０６）暗号用ラウンド制御回路１３が、暗号用拡大鍵生成制御信号の１つである制御信号Ｎ（あるいは変数Ｎとも呼ぶことができる）を「０」に設定する。制御信号Ｎは定数Ｒｃｏｎ（Ｎ）（Ｎ＝０〜９）の値を選択するための信号である。その後、ステップＳ１０７へ進む。なお、ステップＳ１０７〜Ｓ１１０の各ステップは、暗号用ラウンド処理回路１１の暗号ラウンドＲ（Ｒ＝０〜９）に対応して繰り返し実行される。
【００４０】
（Ｓ１０７）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ１０８へ進む。
【００４１】
（Ｓ１０８）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算１．１を行い、暗号用拡大鍵生成レジスタ１２２を更新する。その後、ステップＳ１０９へ進む。
【００４２】
（Ｓ１０９）暗号用ラウンド制御回路１３が、制御信号Ｎの値を「１」だけ増加させる。その後、ステップＳ１１０へ進む。
【００４３】
（Ｓ１１０）クロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。次に、暗号ラウンドＲが９に達していた場合は、ステップＳ１１１へ進み、９に達していなかった場合は、ステップＳ１０７へ戻る。
【００４４】
（Ｓ１１１）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択１の処理を行い、拡大鍵［１０］を出力する。ここで、暗号用拡大鍵生成回路１２の処理が終了する。
【００４５】
（Ｓ１１２）暗号用ラウンド制御回路１３が、制御信号Ｎを「０」に設定する。その後、ステップＳ１１３へ進む。なお、ステップＳ１１３〜Ｓ１２２の各ステップは、暗号用ラウンド処理回路１１の暗号ラウンドＲ（Ｒ＝０〜１１）に対応して繰り返し実行される。
【００４６】
（Ｓ１１３）暗号用ラウンド制御回路１３が判定し、暗号ラウンドＲの値０〜１１に基づき、Ｒが「３の倍数」の場合にはステップＳ１１４へ進み、Ｒが「３の倍数＋１」の場合にはステップＳ１１８へ進み、Ｒが「３の倍数＋２」の場合にはステップＳ１２０へ進む。
【００４７】
（Ｓ１１４）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ１１５へ進む。
【００４８】
（Ｓ１１５）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算１．２を行い、暗号用拡大鍵生成レジスタ１２２を更新する。その後、ステップＳ１１６へ進む。
【００４９】
（Ｓ１１６）暗号用ラウンド制御回路１３が、制御信号Ｎの値を「１」だけ増加させる。その後、ステップＳ１１７へ進む。
【００５０】
（Ｓ１１７）クロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。次に、暗号ラウンドＲが１１に達していた場合は、ステップＳ１１１へ進み、１１に達していなかった場合は、ステップＳ１１３へ戻る。
【００５１】
（Ｓ１１８）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択２の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ１１９へ進む。
【００５２】
（Ｓ１１９）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算２を行い、暗号用拡大鍵生成レジスタ１２２を更新する。その後、ステップＳ１１７へ進む。
【００５３】
（Ｓ１２０）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択３の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ１２１へ進む。
【００５４】
（Ｓ１２１）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算３を行い、暗号用拡大鍵生成レジスタ１２２を更新する。その後、ステップＳ１２２へ進む。
【００５５】
（Ｓ１２２）暗号用ラウンド制御回路１３が、制御信号Ｎの値を「１」だけ増加させる。その後、ステップＳ１１７へ進む。
【００５６】
（Ｓ１２３）暗号用ラウンド制御回路１３が、制御信号Ｎを「０」に設定する。その後、ステップＳ１２４へ進む。なお、ステップＳ１２４〜Ｓ１３２の各ステップは、暗号用ラウンド処理回路１１の暗号ラウンドＲ（Ｒ＝０〜１３）に対応して繰り返し実行される。
【００５７】
（Ｓ１２４）暗号用ラウンド制御回路１３が判定し、暗号ラウンドＲの値０〜１３に基づき、Ｒが「０」の場合にはステップＳ１２５へ進み、Ｒが「０以外の２の倍数」の場合にはステップＳ１２８へ進み、Ｒが「２の倍数＋１」の場合にはステップＳ１３０へ進む。
【００５８】
（Ｓ１２５）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ１２６へ進む。
【００５９】
（Ｓ１２６）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算１．０を行い、暗号用拡大鍵生成レジスタ１２２を更新する。その後、ステップＳ１２７へ進む。
【００６０】
（Ｓ１２７）クロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。次に、暗号ラウンドＲが１３に達していた場合は、ステップＳ１１１へ進み、１３に達していなかった場合は、ステップＳ１２４へ戻る。
【００６１】
（Ｓ１２８）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ１２９へ進む。
【００６２】
（Ｓ１２９）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算１．３を行い、暗号用拡大鍵生成レジスタ１２２を更新する。その後、ステップＳ１２７へ進む。
【００６３】
（Ｓ１３０）暗号用拡大鍵出力論理回路１２３が、拡大鍵出力選択４の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ１３１へ進む。
【００６４】
（Ｓ１３１）暗号用拡大鍵生成論理回路１２１が、拡大鍵生成演算４を行い、暗号用拡大鍵生成レジスタ１２２を更新する。その後、ステップＳ１３２へ進む。
【００６５】
（Ｓ１３２）暗号用ラウンド制御回路１３が、制御信号Ｎの値を「１」だけ増加させる。その後、ステップＳ１２７へ進む。
【００６６】
次に、図４を参照して、図３のフローチャートに基づいて動作する暗号用拡大鍵生成論理回路１２１の構成例について説明する。
【００６７】
図４の暗号用拡大鍵生成論理回路１２１は、定数Ｒｃｏｎを生成するブロック４０１、３入力１出力セレクタ４０２、ＲｏｔＷｏｒｄ関数を用いた処理を行うブロック４０３、ブロック４０３の出力を入力としてＳｕｂＷｏｒｄ関数を用いた処理を行うブロック４０４、排他的論理和回路４０５〜４１３、２入力１出力セレクタ４１４〜４２１、ＳｕｂＷｏｒｄ関数を用いた処理を行うブロック４２２、２入力１出力セレクタ４２３、１入力が負論理入力の論理和回路４２４、および２入力１出力セレクタ４２５〜４３２から構成されている。なお、ブロック４０１の出力、３入力１出力セレクタ４０２の入出力、ブロック４０３の入出力、ブロック４０４の入出力、排他的論理和回路４０５〜４１３の入出力、２入力１出力セレクタ４１４〜４２１の入出力、ブロック４２２の入出力、２入力１出力セレクタ４２３の入出力、および２入力１出力セレクタ４２５〜４３２の入出力には、それぞれ１ワードすなわち３２ビットの信号が入力又は出力される。
【００６８】
また、ＲＫ０〜ＲＫ７は暗号用拡大鍵生成レジスタ１２２の現在値を表し、ＲＫ０’〜ＲＫ７’は暗号用拡大鍵生成レジスタ１２２の更新値を表す。制御信号Ｎ、Ａ、Ｌ、Ｓ、ＸおよびＹは、暗号用拡大鍵制御信号であり、以下の値をとる。Ｎは図３のフローチャート中のＮと同一である。Ａは図３のフローチャート中のＡと同一である。Ｌは暗号鍵長が１２８ビットの場合、「０」、暗号鍵長が１９２ビットの場合、「１」、上記以外（２５６ビット）の場合、「２」となる。Ｓは、暗号鍵長が２５６ビットの場合、「１」、上記以外の場合、「０」となる。Ｘは、暗号鍵長が１９２ビットであり、Ｒが３の倍数＋１の場合、「１」、暗号鍵長が２５６ビットであり、Ｒが２の倍数の場合、「１」、上記以外の場合、「０」となる。Ｙは、暗号鍵長が１２８ビットの場合、「１」、暗号鍵長が１９２ビットであり、Ｒが３の倍数の場合、「１」、暗号鍵長が２５６ビットであり、Ｒが０または２の倍数＋１の場合、「１」、上記以外の場合、「０」となる。Ｒは暗号ラウンドのラウンド値である。
【００６９】
ブロック４０１は、制御信号Ｎに基づいて、上述した定数Ｒｃｏｎ（Ｎ）を生成して出力する。３入力１出力セレクタ４０２は、制御信号Ｌに基づき、Ｌが「０」の場合、レジスタＲＫ３の現在値を選択して出力し、Ｌが「１」の場合、レジスタＲＫ５の現在値を選択して出力し、Ｌが「２」の場合、レジスタＲＫ７の現在値を選択して出力する。ブロック４０３は、３入力１出力セレクタ４０２の出力に対して、ＲｏｔＷｏｒｄ関数を用いた処理を行って処理結果を出力する。ブロック４０４は、ブロック４０３の出力に対してＳｕｂＷｏｒｄ関数を用いた処理を行って処理結果を出力する。
【００７０】
排他的論理和回路４０５は、ブロック４０１の出力とブロック４０４の出力を入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路４０６は、排他的論理和回路４０５の出力とレジスタＲＫ０の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路４０７は、２入力１出力セレクタ４１４の出力とレジスタＲＫ１の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路４０８は、２入力１出力セレクタ４１５の出力とレジスタＲＫ２の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路４０９は、２入力１出力セレクタ４１６の出力とレジスタＲＫ３の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
【００７１】
排他的論理和回路４１０は、２入力１出力セレクタ４２３の出力とレジスタＲＫ４の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路４１１は、２入力１出力セレクタ４１８の出力とレジスタＲＫ５の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路４１２は、２入力１出力セレクタ４１９の出力とレジスタＲＫ６の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路４１３は、２入力１出力セレクタ４２０の出力とレジスタＲＫ７の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
【００７２】
２入力１出力セレクタ４１４は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路４０６の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ０の現在値を選択して出力する。２入力１出力セレクタ４１５は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路４０７の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ１の現在値を選択して出力する。２入力１出力セレクタ４１６は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路４０８の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ２の現在値を選択して出力する。２入力１出力セレクタ４１７は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路４０９の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ３の現在値を選択して出力する。
【００７３】
２入力１出力セレクタ４１８は、制御信号Ｙに基づき、Ｙが「０」の場合、排他的論理和回路４１０の出力を選択して出力し、Ｙが「１」の場合、レジスタＲＫ４の現在値を選択して出力する。２入力１出力セレクタ４１９は、制御信号Ｙに基づき、Ｙが「０」の場合、排他的論理和回路４１１の出力を選択して出力し、Ｙが「１」の場合、レジスタＲＫ５の現在値を選択して出力する。２入力１出力セレクタ４２０は、論理和回路４２４の出力に基づき、論理和回路４２４の出力が「０」の場合、排他的論理和回路４１２の出力を選択して出力し、論理和回路４２４の出力が「１」の場合、レジスタＲＫ６の現在値を選択して出力する。２入力１出力セレクタ４２１は、論理和回路４２４の出力に基づき、論理和回路４２４の出力が「０」の場合、排他的論理和回路４１３の出力を選択して出力し、論理和回路４２４の出力が「１」の場合、レジスタＲＫ７の現在値を選択して出力する。
【００７４】
ブロック４２２は、レジスタＲＫ３の現在値に対してＳｕｂＷｏｒｄ関数を用いた処理を行って処理結果を出力する。２入力１出力セレクタ４２３は、制御信号Ｓに基づき、Ｓが「０」の場合、２入力１出力セレクタ４１７の出力を選択して出力し、Ｓが「１」の場合、ブロック４２２の出力を選択して出力する。論理和回路４２４は、制御信号Ｙと、負論理入力に入力される制御信号Ｓとを入力信号として、論理和演算を行い、演算結果を出力する。
【００７５】
２入力１出力セレクタ４２５〜４３２は、制御信号Ａに基づき、Ａが「０」の場合、２５６ビットの暗号鍵を各３２ビットに順次分割したデータをそれぞれ選択して出力し、Ａが「１」の場合、２入力１出力セレクタ４１４〜４２１の出力をそれぞれ選択して出力する。２入力１出力セレクタ４２５〜４３２の出力が、レジスタＲＫ０〜ＲＫ７の更新値ＲＫ０’〜ＲＫ７’となる。
【００７６】
次に、図５〜図７を参照して、図３のフローチャートに基づいて動作する暗号用拡大鍵生成回路１２の動作シーケンスについて説明する。図５は、図２および図４に示す暗号用拡大鍵生成回路１２の暗号鍵長＝１２８ビットの場合のシーケンスを示し、図６は、図２および図４に示す暗号用拡大鍵生成回路１２の暗号鍵長＝１９２ビットの場合のシーケンスを示し、図７は図２および図４に示す暗号用拡大鍵生成回路１２の暗号鍵長＝２５６ビットの場合のシーケンスを示している。なお、各図において、暗号鍵を（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）で表し、拡大鍵を（Ｋｅ０，Ｋｅ１，Ｋｅ２，Ｋｅ３）で表している。ここで、Ｋｃ０〜Ｋｃ７およびＫｅ０〜Ｋｅ３は各１ワード（すなわち３２ビット）のデータである。
【００７７】
図５に示すように、暗号鍵長＝１２８ビットの場合、暗号用拡大鍵生成レジスタ１２２の各レジスタＲＫ０〜ＲＫ７には初期値として暗号鍵（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）の各ワードＫｃ０〜Ｋｃ７がそれぞれ格納される。そして、暗号ラウンドＲ＝０のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵を構成する各ワードＫｅ０〜Ｋｅ３として出力される。
【００７８】
次に、暗号ラウンドＲ＝１〜１０のとき、レジスタＲＫ０〜ＲＫ３が排他的論理和回路４０６〜４０９の出力で更新された値が、拡大鍵の各ワードＫｅ０〜Ｋｅ３として出力される。なお、更新が行われる際、排他的論理和回路４０６〜４０９には、前回の暗号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路４０５〜４０８の出力とが入力される。また、排他的論理和回路４０５には、定数Ｒｃｏｎ（Ｒ）とブロック４０４の出力が入力される。また、レジスタＲＫ３の現在値をブロック４０３で処理した出力が、ブロック４０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【００７９】
暗号ラウンドＲ＝１〜１０では、拡大鍵を生成する際の処理内容が同一である。各暗号ラウンドに対応する拡大鍵の生成処理は１クロックで行われ、これが１０周期分繰り返されることになる（図５では７回分の図示を省略している）。
【００８０】
次に、図６に示すように、暗号鍵長＝１９２ビットの場合、暗号用拡大鍵生成レジスタ１２２の各レジスタＲＫ０〜ＲＫ７には初期値として暗号鍵（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）の各ワードＫｃ０〜Ｋｃ７がそれぞれ格納される。そして、暗号ラウンドＲ＝０のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵を構成する各ワードＫｅ０〜Ｋｅ３として出力される。
【００８１】
次に、暗号ラウンドＲ＝１のとき、レジスタＲＫ０およびＲＫ１が排他的論理和回路４０７および４０８の出力で更新された値と、レジスタＲＫ４とＲＫ５が現在値によって更新された値とを組み合わせたものが、拡大鍵の各ワードＫｅ２とＫｅ３およびＫｅ０とＫｅ１として出力される。なお、更新が行われる際、排他的論理和回路４０６〜４０９には、前回の暗号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路４０５〜４０８の出力とが入力されている。また、排他的論理和回路４０５には、定数Ｒｃｏｎ（０）とブロック４０４の出力が入力される。また、レジスタＲＫ５の現在値をブロック４０３で処理した出力が、ブロック４０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【００８２】
次に、暗号ラウンドＲ＝２のとき、レジスタＲＫ２とＲＫ３が現在値によって更新された値とレジスタＲＫ４とＲＫ５が排他的論理和回路４１０と４１１の出力で更新された値とを組み合わせたものが、拡大鍵の各ワードＫｅ０〜Ｋｅ３として出力される。なお、拡大鍵Ｋｅ０〜Ｋｅ３を出力する際、排他的論理和回路４１０と４１１には、前回の暗号ラウンドに対応して更新されたレジスタＲＫ４とＲＫ５の現在値と、レジスタＲＫ３の現在値と排他的論理和回路４１０の出力とがそれぞれ入力されている。また、レジスタＲＫ０〜ＲＫ１とレジスタＲＫ６〜ＲＫ７とについては、現在値がそのまま更新値となる。
【００８３】
また、拡大鍵の各ワードＫｅ０〜Ｋｅ３の出力に続いて行われる暗号ラウンドＲ＝２に対応する更新処理では、レジスタＲＫ０〜ＲＫ５が、排他的論理和回路４０６〜４１１の出力によって更新される。その更新が行われる際、排他的論理和回路４０６〜４１１には、前回の暗号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ５の現在値と、排他的論理和回路４０５〜４１０の出力とが入力されている。また、排他的論理和回路４０５には、定数Ｒｃｏｎ（１）とブロック４０４の出力が入力される。また、レジスタＲＫ５の現在値をブロック４０３で処理した出力が、ブロック４０４へ入力される。また、レジスタＲＫ６〜ＲＫ７については、現在値がそのまま更新値となる。この処理で更新されたレジスタＲＫ０〜ＲＫ３の更新値が、暗号ラウンドＲ＝０の場合と同様にして、暗号ラウンドＲ＝３に対応した拡大鍵Ｋｅ０〜Ｋｅ３として出力される（出力部分の構成について図示を省略）。
【００８４】
この暗号ラウンドＲ＝０〜２に対応する３クロック分の処理を１周期として、これを４周期分繰り返すことで、暗号ラウンドＲ＝０〜１２に対応した拡大鍵が生成される（図６では３周期分の図示を省略している）。
【００８５】
次に、図７に示すように、暗号鍵長＝２５６ビットの場合、暗号用拡大鍵生成レジスタ１２２の各レジスタＲＫ０〜ＲＫ７には初期値として暗号鍵（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）の各ワードＫｃ０〜Ｋｃ７がそれぞれ格納される。そして、暗号ラウンドＲ＝０のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵を構成する各ワードＫｅ０〜Ｋｅ３として出力される。
【００８６】
次に、暗号ラウンドＲ＝１のとき、レジスタＲＫ４〜ＲＫ７が現在値によって更新された値が、拡大鍵の各ワードＫｅ０〜Ｋｅ３として出力される。この拡大鍵の各ワードＫｅ０〜Ｋｅ３の出力に続いて行われる暗号ラウンドＲ＝１に対応した更新処理では、レジスタＲＫ０〜ＲＫ３が、排他的論理和回路４０６〜４０９の出力で更新される。排他的論理和回路４０６〜４０９には、前回の暗号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路４０５〜４０８の出力とが入力されている。また、排他的論理和回路４０５には、定数Ｒｃｏｎ（０）とブロック４０４の出力が入力される。また、レジスタＲＫ７の現在値をブロック４０３で処理した出力が、ブロック４０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【００８７】
次に、暗号ラウンドＲ＝２のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵Ｋｅ０〜Ｋｅ３として出力される。なお、拡大鍵Ｋｅ０〜Ｋｅ３を出力した後の更新処理では、排他的論理和回路４１０〜４１３に、前回の暗号ラウンドに対応して更新されたレジスタＲＫ４〜ＲＫ７の現在値と、ブロック４０４の出力および排他的論理和回路４１０〜４１２の出力とがそれぞれ入力される。ブロック４０４には、レジスタＲＫ３の現在値が入力される。また、レジスタＲＫ０〜ＲＫ３については、現在値がそのまま更新値となる。
【００８８】
次に、暗号ラウンドＲ＝３のとき、レジスタＲＫ４〜ＲＫ７の出力が、拡大鍵Ｋｅ０〜Ｋｅ３として出力される。なお、拡大鍵Ｋｅ０〜Ｋｅ３を出力した後の更新処理では、排他的論理和回路４０６〜４０９に、前回の暗号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路４０５〜４０９の出力とがそれぞれ入力されている。また、排他的論理和回路４０５には、定数Ｒｃｏｎ（１）とブロック４０４の出力が入力される。また、レジスタＲＫ７の現在値をブロック４０３で処理した出力が、ブロック４０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【００８９】
この暗号ラウンドＲ＝２および３に対応する２クロック分の処理を１周期として、これを６周期分繰り返すことで、暗号ラウンドＲ＝２〜１４に対応した拡大鍵が生成される（図６では５周期分の図示を省略している）。
【００９０】
次に、本発明の他の実施の形態としてのＡＥＳ復号回路２の構成例を図８に示す。ＡＥＳ復号回路２は、上述したＡＥＳアルゴリズムに従って復号処理を行う回路であって、復号用ラウンド処理回路２１、復号用拡大鍵生成回路２２、および復号用ラウンド制御回路２３から構成されている。ＡＥＳ復号回路２は、１２８ビット長の暗号データブロックと２５６ビット長の復号鍵（復号鍵長が１２８または１９２ビットの場合は先頭ビットから１２８または１９２ビット分が有効）と復号制御信号を入力し、１２８ビット長の暗号データブロックを復号鍵を用いて復号化した１２８ビット長の平文データブロックを出力する。復号制御信号には、復号鍵長を示す復号鍵長情報と復号開始や終了を指示する復号動作情報が含まれている。
【００９１】
図８の復号用ラウンド制御回路２３は、図示していない他のＣＰＵなどから入力された復号制御信号を入力し、復号用拡大鍵生成回路２２の動作を制御する復号用拡大鍵生成制御信号および復号用ラウンド処理回路２１の動作を制御する復号用ラウンド処理制御信号を出力する。復号用拡大鍵生成回路２２は、図示していない他のＣＰＵなどから入力された復号鍵と復号用拡大鍵生成制御信号を入力し、復号用ラウンド処理回路２１の復号ラウンドＲ（Ｒ＝Ｎｒ〜０）用の拡大鍵［Ｒ］を、ＲがＮｒから０の順に１クロックに１個ずつ出力する。暗号用ラウンド処理回路２１は、図示していない他のＣＰＵなどから入力された１２８ビット長の暗号データブロックと、復号ラウンド毎に拡大鍵を入力し、全復号ラウンドを終了した時点で１２８ビット長の平文データブロックを図示していない他のＣＰＵなどに対して出力する。
【００９２】
図８の復号用拡大鍵生成回路２２の構成例を図９に示す。復号用拡大鍵生成回路２２は、復号用拡大鍵生成論理回路２２１、２５６ビット長の復号用拡大鍵生成レジスタ２２２、および復号用拡大鍵出力論理回路２２３から構成されている。図９に示す復号用拡大鍵生成回路２２の動作を表すフローチャートを図１０に示す。図１０のフローチャートに基づいて動作する復号用拡大鍵生成論理回路２２１の構成例を図１１に示す。また、図１０のフローチャートに基づいて動作する復号用拡大鍵生成回路２２の動作シーケンスを図１２から図１４に示す。
【００９３】
図９に示した復号用拡大鍵生成レジスタ２２２は、２５６個のＤ−ＦＦから構成され、各Ｄ−ＦＦに外部からのクロック信号が供給される。図９に示す例では、復号用拡大鍵生成レジスタ２２２が、各３２個のＤ−ＦＦから構成される８個のレジスタＲＫ０〜ＲＫ７から構成されている。すなわち、レジスタＲＫ０〜ＲＫ７は、各３２ビット長のレジスタとして構成されている。レジスタＲＫ０〜ＲＫ７を構成する全部で２５６個のＤ−ＦＦは、例えばクロック信号の立ち上がり（または立ち下がり）に応じてデータの入力・保持と出力とを行うフリップフロップとして構成されている。すなわち、復号用拡大鍵生成レジスタ２２２は、外部から供給されるクロック信号の立ち上がり（または立ち下がり）に応じて復号用拡大鍵生成論理回路２２１から出力された復号用拡大鍵生成レジスタの更新値（全２５６ビットのデータ）を２５６個のＤ−ＦＦに入力して保持し、出力する。
【００９４】
図９の復号用拡大鍵出力論理回路２２３は、復号用拡大鍵生成レジスタ２２２から出力された２５６ビットのデータから、復号鍵長情報と復号ラウンドの進行に応じて選択された１２８ビット長の値を、復号用拡大鍵（図９の「拡大鍵」）として出力する。
【００９５】
復号用拡大鍵生成論理回路２２１は、復号用拡大鍵の生成を開始した時に復号用拡大鍵生成レジスタ２２２を入力された復号鍵の値に初期化する。復号用拡大鍵生成論理回路２２１は、また、各ラウンド時に、復号鍵長情報と復号ラウンドの進行に応じて定まる所定の復号用拡大鍵生成演算を復号用拡大鍵生成レジスタ２２２の値（図９の「復号用拡大鍵生成レジスタの現在値」）に対して行い、復号用拡大鍵生成レジスタ２２２の値をその演算結果の値（図９の「復号用拡大鍵生成レジスタの更新値」））で更新する。復号用拡大鍵生成レジスタ２２２の初期化を行うタイミングや、復号鍵長情報と復号ラウンドの進行に応じた制御には、復号用拡大鍵生成制御信号が用いられる。この復号用拡大鍵生成制御信号には、上述した復号ラウンドを示す信号Ｒ（すなわち変数Ｒ）などが含まれている。
【００９６】
次に、図１０を参照して、図８および図９の復号用拡大鍵生成回路２２の動作について説明する。図１０に示す各処理におけるフローの制御は、図８の復号用ラウンド制御回路２３が生成する復号用拡大鍵生成制御信号に基づいて、図９の復号用拡大鍵生成論理回路２２１、復号用拡大鍵出力論理回路２２３等によって行われる。具体的には、図１０のフローチャートにおいて、ステップＳ２０２、Ｓ２０８、Ｓ２１５、Ｓ２１９、Ｓ２２２、Ｓ２２６、Ｓ２２９およびＳ２３１の各処理が、復号用拡大鍵生成論理回路２２１によって実現される処理である。また、ステップＳ２０７、Ｓ２１４、Ｓ２１８、Ｓ２２１、Ｓ２２５、Ｓ２２８およびＳ２３０の各処理が、復号用拡大鍵出力論理回路２２３によって実現される処理である。また、ステップＳ２０１、Ｓ２０３、Ｓ２０５、Ｓ２０６、Ｓ２０９、Ｓ２１２、Ｓ２１３、Ｓ２１６、Ｓ２２０、Ｓ２２３、Ｓ２２４およびＳ２３２の各処理が、復号用ラウンド制御回路２３によって実現される処理である。また、ステップＳ２０４、Ｓ２１０、Ｓ２１７およびＳ２２７の各処理は、クロックタイミング待ちを表している。
【００９７】
なお、ステップＳ２０７、Ｓ２１４、Ｓ２１８、Ｓ２２１、Ｓ２２５、Ｓ２２８またはＳ２３０で、復号用拡大鍵出力論理回路２２３が拡大鍵の出力選択を行う拡大鍵出力選択１〜４の処理は、以下のようにして行われる。なお、拡大鍵出力選択１〜４の処理によって出力される拡大鍵は、各復号ラウンドに対応するものとして表す場合には拡大鍵［Ｒ］として表すこととする。
【００９８】
【数４】
2010266751.tif 000006
【００９９】
すなわち、ステップＳ２０７、Ｓ２１４、Ｓ２２５およびＳ２２８における復号用拡大鍵出力論理回路２２３による拡大鍵出力選択１の処理では、拡大鍵の値として、レジスタＲＫ０、ＲＫ１、ＲＫ２およびＲＫ３からの出力がこの順で組み合わせて選択される。ステップＳ２１８における復号用拡大鍵出力論理回路２２３による拡大鍵出力選択２の処理では、拡大鍵の値として、レジスタＲＫ４、ＲＫ５、ＲＫ０およびＲＫ１からの出力がこの順で組み合わせて選択される。ステップＳ２２１における復号用拡大鍵出力論理回路２２３による拡大鍵出力選択３の処理では、拡大鍵の値として、レジスタＲＫ２、ＲＫ３、ＲＫ４およびＲＫ５からの出力がこの順で組み合わせて選択される。ステップＳ２３０における復号用拡大鍵出力論理回路２２３による拡大鍵出力選択４の処理では、拡大鍵の値として、レジスタＲＫ４、ＲＫ５、ＲＫ６およびＲＫ７からの出力がこの順で組み合わせて選択される。
【０１００】
また、ステップＳ２０２、Ｓ２０８、Ｓ２１５、Ｓ２１９、Ｓ２２２、Ｓ２２６、Ｓ２２９およびＳ２３１で、復号用拡大鍵生成論理回路２２１が拡大鍵の生成演算を行う拡大鍵生成演算０、１．０〜１．３、２〜４の処理は、以下のようにして行われる。
【０１０１】
【数５】
2010266751.tif 000007
【０１０２】
ここで、ＲＫ０〜ＲＫ７は、復号用拡大鍵生成レジスタ２２２の現在値、ＲＫ０’〜ＲＫ７’は、復号用拡大鍵生成レジスタ２２２の更新値である。また、Ｒｃｏｎ（Ｎ）は、変数Ｎを０〜９として次のようにして表される１ワードの定数である。
【０１０３】
【数６】
2010266751.tif 000008
【０１０４】
なお、本実施形態において１ワードは３２ビット（＝４バイト）である。例えば、Ｒｃｏｎ（０）は、１６進数で「０１００００００」の定数である。また、演算子「＝」は代入演算子を表し（すなわち（左辺）＝（右辺）は（右辺）を（左辺）に代入することを意味し）、演算子「＝＝」は等号による比較演算子を表し、演算子「＋」は排他的論理和を表す。また、ＳｕｂＷｏｒｄ（）は、非特許文献１に規定されている鍵拡張処理で用いられる関数であり、４バイトを入力し、各バイトにＳ−ｂｏｘを適用することで出力ワードを生成する。Ｓ−ｂｏｘは、非線形置換表であり、鍵拡張処理ではバイト値を１対１で置換する。ＲｏｔＷｏｒｄ（）は、非特許文献１に規定されている鍵拡張処理で用いられる関数であり、４バイトのワードに巡回置換を実行する。
【０１０５】
次に、図１０のフローチャートをステップ毎に説明する。
【０１０６】
（Ｓ２０１）復号用ラウンド制御回路２３が、復号用拡大鍵生成制御信号の１つである制御信号Ａ（あるいは変数Ａとも呼ぶことができる）を「０」に設定する。制御信号Ａは復号用拡大鍵生成回路２２に外部から復号鍵を入力する場合に「０」に設定される信号である。その後、ステップＳ２０２へ進む。
【０１０７】
（Ｓ２０２）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算０を実行し、復号用拡大鍵生成レジスタ２２２の値を更新する。ここで、復号用拡大鍵生成レジスタ２２２に復号鍵の値が格納される。その後、ステップＳ２０３へ進む。
【０１０８】
（Ｓ２０３）復号用ラウンド制御回路２３が、制御信号Ａを「１」に設定する。その後、ステップＳ２０４へ進む。
【０１０９】
（Ｓ２０４）ここではクロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。その後、ステップＳ２０５へ進む。なお、各ステップの処理は、クロック信号の周期に対して十分短時間で行われるようになっている。したがって、図１０に示す処理では、各ラウンドＲに対応した新たな拡大鍵［Ｒ］を１クロック周期毎に生成、出力することができる。
【０１１０】
（Ｓ２０５）復号用ラウンド制御回路２３が、復号鍵長を検知し、これ以降の制御内容が決定される。すなわち、復号鍵長が１２８ビットの場合、ステップＳ２０６〜Ｓ２１０とステップＳ２１１の処理が行われ、復号鍵長が１９２ビットの場合、ステップＳ２１２〜Ｓ２２２とステップＳ２１１の処理が行われ、復号鍵長が２５６ビットの場合、ステップＳ２２３〜Ｓ２３２とステップＳ２１１の処理が行われることになる。復号鍵長が１２８ビットの場合、ステップＳ２０６へ進み、復号鍵長が１９２ビットの場合、ステップＳ２１２へ進み、復号鍵長が２５６ビットの場合、ステップＳ２２３へ進む。
【０１１１】
（Ｓ２０６）復号用ラウンド制御回路２３が、復号用拡大鍵生成制御信号の１つである制御信号Ｎ（あるいは変数Ｎとも呼ぶことができる）を「９」に設定する。制御信号Ｎは定数Ｒｃｏｎ（Ｎ）（Ｎ＝０〜９）の値を選択するための信号である。その後、ステップＳ２０７へ進む。なお、ステップＳ２０７〜Ｓ２１０の各ステップは、復号用ラウンド処理回路２１の復号ラウンドＲ（Ｒ＝１０〜１）に対応して繰り返し実行される。
【０１１２】
（Ｓ２０７）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ２０８へ進む。
【０１１３】
（Ｓ２０８）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算１．１を行い、復号用拡大鍵生成レジスタ２２２を更新する。その後、ステップＳ２０９へ進む。
【０１１４】
（Ｓ２０９）復号用ラウンド制御回路２３が、制御信号Ｎの値を「１」だけ減少させる。その後、ステップＳ２１０へ進む。
【０１１５】
（Ｓ２１０）クロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。次に、復号ラウンドＲが１に達していた場合は、ステップＳ２１１へ進み、１に達していなかった場合は、ステップＳ２０７へ戻る。
【０１１６】
（Ｓ２１１）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択１の処理を行い、拡大鍵［０］を出力する。ここで、復号用拡大鍵生成回路２２の処理が終了する。
【０１１７】
（Ｓ２１２）復号用ラウンド制御回路２３が、制御信号Ｎを「７」に設定する。その後、ステップＳ２１３へ進む。なお、ステップＳ２１３〜Ｓ２２２の各ステップは、復号用ラウンド処理回路２１の復号ラウンドＲ（Ｒ＝１２〜１）に対応して繰り返し実行される。
【０１１８】
（Ｓ２１３）復号用ラウンド制御回路２３が判定し、復号ラウンドＲの値１２〜１に基づき、Ｒが「３の倍数」の場合にはステップＳ２１４へ進み、Ｒが「３の倍数＋１」の場合にはステップＳ２１８へ進み、Ｒが「３の倍数＋２」の場合にはステップＳ２２０へ進む。
【０１１９】
（Ｓ２１４）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ２１５へ進む。
【０１２０】
（Ｓ２１５）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算１．２を行い、復号用拡大鍵生成レジスタ２２２を更新する。その後、ステップＳ２１６へ進む。
【０１２１】
（Ｓ２１６）復号用ラウンド制御回路２３が、制御信号Ｎの値を「１」だけ減少させる。その後、ステップＳ２１７へ進む。
【０１２２】
（Ｓ２１７）クロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。次に、復号ラウンドＲが１に達していた場合は、ステップＳ２１１へ進み、１に達していなかった場合は、ステップＳ２１３へ戻る。
【０１２３】
（Ｓ２１８）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択２の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ２１９へ進む。
【０１２４】
（Ｓ２１９）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算２を行い、復号用拡大鍵生成レジスタ２２２を更新する。その後、ステップＳ２２０へ進む。
【０１２５】
（Ｓ２２０）復号用ラウンド制御回路２３が、制御信号Ｎの値を「１」だけ減少させる。その後、ステップＳ２１７へ進む。
【０１２６】
（Ｓ２２１）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択３の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ２２２へ進む。
【０１２７】
（Ｓ２２２）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算３を行い、復号用拡大鍵生成レジスタ２２２を更新する。その後、ステップＳ２１７へ進む。
【０１２８】
（Ｓ２２３）復号用ラウンド制御回路２３が、制御信号Ｎを「６」に設定する。その後、ステップＳ２２４へ進む。なお、ステップＳ２２４〜Ｓ２３２の各ステップは、復号用ラウンド処理回路２１の復号ラウンドＲ（Ｒ＝１４〜１）に対応して繰り返し実行される。
【０１２９】
（Ｓ２２４）復号用ラウンド制御回路２３が判定し、復号ラウンドＲの値１４〜１に基づき、Ｒが「１４」の場合にはステップＳ２２５へ進み、Ｒが「１４以外の２の倍数」の場合にはステップＳ２２８へ進み、Ｒが「２の倍数＋１」の場合にはステップＳ２３０へ進む。
【０１３０】
（Ｓ２２５）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ２２６へ進む。
【０１３１】
（Ｓ２２６）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算１．０を行い、復号用拡大鍵生成レジスタ２２２を更新する。その後、ステップＳ２２７へ進む。
【０１３２】
（Ｓ２２７）クロック信号に従い、クロック信号の立ち上がりを待つ（Ｄ−ＦＦがクロック信号の立ち下がりに応じてデータの入力・保持と出力とを行う場合はクロック信号の立ち下がりを待つ）。次に、復号ラウンドＲが１に達していた場合は、ステップＳ２１１へ進み、１に達していなかった場合は、ステップＳ２２４へ戻る。
【０１３３】
（Ｓ２２８）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択１の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ２２９へ進む。
【０１３４】
（Ｓ２２９）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算１．３を行い、復号用拡大鍵生成レジスタ２２２を更新する。その後、ステップＳ２２７へ進む。
【０１３５】
（Ｓ２３０）復号用拡大鍵出力論理回路２２３が、拡大鍵出力選択４の処理を行い、拡大鍵［Ｒ］を出力する。その後、ステップＳ２３１へ進む。
【０１３６】
（Ｓ２３１）復号用拡大鍵生成論理回路２２１が、拡大鍵生成演算４を行い、復号用拡大鍵生成レジスタ２２２を更新する。その後、ステップＳ２３２へ進む。
【０１３７】
（Ｓ２３２）復号用ラウンド制御回路２３が、制御信号Ｎの値を「１」だけ減少させる。その後、ステップＳ２２７へ進む。
【０１３８】
次に、図１１を参照して、図１０のフローチャートに基づいて動作する復号用拡大鍵生成論理回路２２１の構成例について説明する。
【０１３９】
図１１の復号用拡大鍵生成論理回路２２１は、定数Ｒｃｏｎを生成するブロック５０１、３入力１出力セレクタ５０２、ＲｏｔＷｏｒｄ関数を用いた処理を行うブロック５０３、ブロック５０３の出力を入力としてＳｕｂＷｏｒｄ関数を用いた処理を行うブロック５０４、排他的論理和回路５０５〜５１３、２入力１出力セレクタ５１４〜５２１、ＳｕｂＷｏｒｄ関数を用いた処理を行うブロック５２２、２入力１出力セレクタ５２３、１入力が負論理入力の論理和回路５２４、２入力１出力セレクタ５２５〜５３２、２入力１出力セレクタ５３３、および排他的論理和回路５３４から構成されている。なお、ブロック５０１の出力、３入力１出力セレクタ５０２の入出力、ブロック５０３の入出力、ブロック５０４の入出力、排他的論理和回路５０５〜５１３の入出力、２入力１出力セレクタ５１４〜５２１の入出力、ブロック５２２の入出力、２入力１出力セレクタ５２３の入出力、２入力１出力セレクタ５２５〜５３２の入出力、２入力１出力セレクタ５３３の入出力、および排他的論理和回路５３４の入出力には、それぞれ１ワードすなわち３２ビットの信号が入力又は出力される。
【０１４０】
また、ＲＫ０〜ＲＫ７は復号用拡大鍵生成レジスタ２２２の現在値を表し、ＲＫ０’〜ＲＫ７’は復号用拡大鍵生成レジスタ２２２の更新値を表す。制御信号Ｎ、Ａ、Ｌ、Ｓ、ＸおよびＹは、復号用拡大鍵制御信号であり、以下の値をとる。Ｎは図１０のフローチャート中のＮと同一である。Ａは図１０のフローチャート中のＡと同一である。Ｌは復号鍵長が１２８ビットの場合、「０」、復号鍵長が１９２ビットの場合、「１」、上記以外（２５６ビット）の場合、「２」となる。Ｓは、復号鍵長が２５６ビットの場合、「１」、上記以外の場合、「０」となる。Ｘは、復号鍵長が１９２ビットであり、Ｒが３の倍数＋２の場合、「１」、復号鍵長が２５６ビットであり、Ｒが２の倍数の場合、「１」、上記以外の場合、「０」となる。Ｙは、復号鍵長が１２８ビットの場合、「１」、復号鍵長が１９２ビットであり、Ｒが３の倍数の場合、「１」、復号鍵長が２５６ビットであり、Ｒが０または２の倍数＋１の場合、「１」、上記以外の場合、「０」となる。Ｒは復号ラウンドのラウンド値である。
【０１４１】
ブロック５０１は、制御信号Ｎに基づいて、上述した定数Ｒｃｏｎ（Ｎ）を生成して出力する。３入力１出力セレクタ５０２は、制御信号Ｌに基づき、Ｌが「０」の場合、レジスタＲＫ３の現在値を選択して出力し、Ｌが「１」の場合、２入力１出力セレクタ５３３の出力を選択して出力し、Ｌが「２」の場合、レジスタＲＫ７の現在値を選択して出力する。２入力１出力セレクタ５３３は、制御信号Ｙに基づき、Ｙが「０」の場合、排他的論理和回路５３４の出力を選択して出力し、Ｙが「１」の場合、レジスタＲＫ５の現在値を選択して出力する。排他的論理和回路５３４は、レジスタＲＫ４の現在値とレジスタＲＫ５の現在値を入力として排他的論理和演算を行って演算結果を出力する。ブロック５０３は、３入力１出力セレクタ５０２の出力に対して、ＲｏｔＷｏｒｄ関数を用いた処理を行って処理結果を出力する。ブロック５０４は、ブロック５０３の出力に対してＳｕｂＷｏｒｄ関数を用いた処理を行って処理結果を出力する。
【０１４２】
排他的論理和回路５０５は、ブロック５０１の出力とブロック５０４の出力を入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路５０６は、排他的論理和回路５０５の出力とレジスタＲＫ０の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路５０７は、レジスタＲＫ０の現在値とレジスタＲＫ１の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路５０８は、レジスタＲＫ１の現在値とレジスタＲＫ２の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路５０９は、レジスタＲＫ２の現在値とレジスタＲＫ３の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
【０１４３】
排他的論理和回路５１０は、２入力１出力セレクタ５２３の出力とレジスタＲＫ４の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路５１１は、レジスタＲＫ４の現在値とレジスタＲＫ５の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路５１２は、レジスタＲＫ５の現在値とレジスタＲＫ６の現在値とを入力として排他的論理和演算を行って演算結果を出力する。排他的論理和回路５１３は、レジスタＲＫ６の現在値とレジスタＲＫ７の現在値とを入力として排他的論理和演算を行って演算結果を出力する。
【０１４４】
２入力１出力セレクタ５１４は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路５０６の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ０の現在値を選択して出力する。２入力１出力セレクタ５１５は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路５０７の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ１の現在値を選択して出力する。２入力１出力セレクタ５１６は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路５０８の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ２の現在値を選択して出力する。２入力１出力セレクタ５１７は、制御信号Ｘに基づき、Ｘが「０」の場合、排他的論理和回路５０９の出力を選択して出力し、Ｘが「１」の場合、レジスタＲＫ３の現在値を選択して出力する。
【０１４５】
２入力１出力セレクタ５１８は、制御信号Ｙに基づき、Ｙが「０」の場合、排他的論理和回路５１０の出力を選択して出力し、Ｙが「１」の場合、レジスタＲＫ４の現在値を選択して出力する。２入力１出力セレクタ５１９は、制御信号Ｙに基づき、Ｙが「０」の場合、排他的論理和回路５１１の出力を選択して出力し、Ｙが「１」の場合、レジスタＲＫ５の現在値を選択して出力する。２入力１出力セレクタ５２０は、論理和回路５２４の出力に基づき、論理和回路５２４の出力が「０」の場合、排他的論理和回路５１２の出力を選択して出力し、論理和回路５２４の出力が「１」の場合、レジスタＲＫ６の現在値を選択して出力する。２入力１出力セレクタ５２１は、論理和回路５２４の出力に基づき、論理和回路５２４の出力が「０」の場合、排他的論理和回路５１３の出力を選択して出力し、論理和回路５２４の出力が「１」の場合、レジスタＲＫ７の現在値を選択して出力する。
【０１４６】
ブロック５２２は、レジスタＲＫ３の現在値に対してＳｕｂＷｏｒｄ関数を用いた処理を行って処理結果を出力する。２入力１出力セレクタ５２３は、制御信号Ｓに基づき、Ｓが「０」の場合、レジスタＲＫ３の現在値を選択して出力し、Ｓが「１」の場合、ブロック５２２の出力を選択して出力する。論理和回路５２４は、制御信号Ｙと、負論理入力に入力される制御信号Ｓとを入力信号として、論理和演算を行い、演算結果を出力する。
【０１４７】
２入力１出力セレクタ５２５〜５３２は、制御信号Ａに基づき、Ａが「０」の場合、２５６ビットの復号鍵を各３２ビットに順次分割したデータをそれぞれ選択して出力し、Ａが「１」の場合、２入力１出力セレクタ５１４〜５２１の出力をそれぞれ選択して出力する。２入力１出力セレクタ５２５〜５３２の出力が、レジスタＲＫ０〜ＲＫ７の更新値ＲＫ０’〜ＲＫ７’となる。
【０１４８】
次に、図１２〜図１４を参照して、図１０のフローチャートに基づいて動作する復号用拡大鍵生成回路２２の動作シーケンスについて説明する。図１２は、図９および図１１に示す復号用拡大鍵生成回路２２の復号鍵長＝１２８ビットの場合のシーケンスを示し、図１３は、図９および図１１に示す復号用拡大鍵生成回路２２の復号鍵長＝１９２ビットの場合のシーケンスを示し、図１４は図９および図１１に示す復号用拡大鍵生成回路２２の復号鍵長＝２５６ビットの場合のシーケンスを示している。なお、各図において、復号鍵を（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）で表し、拡大鍵を（Ｋｅ０，Ｋｅ１，Ｋｅ２，Ｋｅ３）で表している。ここで、Ｋｃ０〜Ｋｃ７およびＫｅ０〜Ｋｅ３は各１ワード（すなわち３２ビット）のデータである。
【０１４９】
図１２に示すように、復号鍵長＝１２８ビットの場合、復号用拡大鍵生成レジスタ２２２の各レジスタＲＫ０〜ＲＫ７には初期値として復号鍵（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）の各ワードＫｃ０〜Ｋｃ７がそれぞれ格納される。そして、復号ラウンドＲ＝１０のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵を構成する各ワードＫｅ０〜Ｋｅ３として出力される。
【０１５０】
次に、復号ラウンドＲ＝９〜０のとき、レジスタＲＫ０〜ＲＫ３が排他的論理和回路５０６〜５０９の出力で更新された値が、拡大鍵の各ワードＫｅ０〜Ｋｅ３として出力される。なお、更新が行われる際、排他的論理和回路５０６〜５０９には、前回の復号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路５０５の出力およびレジスタＲＫ０〜ＲＫ２の現在値とが入力されている。また、排他的論理和回路５０５には、定数Ｒｃｏｎ（Ｒ）とブロック５０４の出力が入力される。また、レジスタＲＫ３の現在値をブロック５０３で処理した出力が、ブロック５０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【０１５１】
復号ラウンドＲ＝９〜０では、拡大鍵を生成する際の処理内容が同一である。各復号ラウンドに対応する拡大鍵の生成処理は１クロックで行われ、これが１０周期分繰り返されることになる（図１２では７回分の図示を省略している）。
【０１５２】
次に、図１３に示すように、復号鍵長＝１９２ビットの場合、復号用拡大鍵生成レジスタ２２２の各レジスタＲＫ０〜ＲＫ７には初期値として復号鍵（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）の各ワードＫｃ０〜Ｋｃ７がそれぞれ格納される。そして、復号ラウンドＲ＝１２のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵を構成する各ワードＫｅ０〜Ｋｅ３として出力される。
【０１５３】
次に、復号ラウンドＲ＝１１のとき、レジスタＲＫ２およびＲＫ３が排他的論理和回路５０８および５０９の出力で更新された値と、レジスタＲＫ４とＲＫ５が現在値によって更新された値とを組み合わせたものが、拡大鍵の各ワードＫｅ０〜Ｋｅ３として出力される。なお、更新が行われる際、排他的論理和回路５０６〜５０９には、前回の復号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路５０５の出力およびレジスタＲＫ０〜ＲＫ２の現在値とが入力される。また、排他的論理和回路５０５には、定数Ｒｃｏｎ（７）とブロック５０４の出力が入力される。また、レジスタＲＫ５の現在値をブロック５０３で処理した出力が、ブロック５０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【０１５４】
次に、復号ラウンドＲ＝１０のとき、レジスタＲＫ０とＲＫ１が現在値によって更新された値とレジスタＲＫ４とＲＫ５が排他的論理和回路５１０と５１１の出力で更新された値とを組み合わせたものが、拡大鍵の各ワードＫｅ２およびＫｅ３とＫｅ０およびＫｅ１して出力される。なお、拡大鍵Ｋｅ０〜Ｋｅ３を出力する際、排他的論理和回路５１０と５１１には、前回の復号ラウンドに対応して更新されたレジスタＲＫ４とＲＫ５の現在値と、レジスタＲＫ３とレジスタＲＫ４の現在値とがそれぞれ入力されている。また、レジスタＲＫ２〜ＲＫ３とレジスタＲＫ６〜ＲＫ７とについては、現在値がそのまま更新値となる。
【０１５５】
また、復号ラウンドＲ＝１０に対応する拡大鍵が出力された後の更新処理では、レジスタＲＫ０〜ＲＫ５が、排他的論理和回路５０６〜５１１の出力によって更新される。その更新が行われる際、排他的論理和回路５０６〜５１１には、前回の復号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ５の現在値と、排他的論理和回路５０５とレジスタＲＫ０〜ＲＫ４の現在値とが入力される。また、排他的論理和回路５０５には、定数Ｒｃｏｎ（６）とブロック５０４の出力が入力される。また、レジスタＲＫ５の現在値をブロック５０３で処理した出力が、ブロック５０４へ入力される。また、レジスタＲＫ６〜ＲＫ７については、現在値がそのまま更新値となる。この処理で更新されたレジスタＲＫ０〜ＲＫ３の更新値が、復号ラウンドＲ＝１２の場合と同様にして、復号ラウンドＲ＝９に対応した拡大鍵Ｋｅ０〜Ｋｅ３として出力される（出力部分の構成について図示を省略）。
【０１５６】
この復号ラウンドＲ＝１２〜１０に対応する３クロック分の処理を１周期として、これを４周期分繰り返すことで、復号ラウンドＲ＝１２〜０に対応した拡大鍵が生成される（図１３では３周期分の図示を省略している）。
【０１５７】
次に、図１４に示すように、復号鍵長＝２５６ビットの場合、復号用拡大鍵生成レジスタ２２２の各レジスタＲＫ０〜ＲＫ７には初期値として復号鍵（Ｋｃ０，Ｋｃ１，Ｋｃ２，Ｋｃ３，Ｋｃ４，Ｋｃ５，Ｋｃ６，Ｋｃ７）の各ワードＫｃ０〜Ｋｃ７がそれぞれ格納される。そして、復号ラウンドＲ＝１４のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵を構成する各ワードＫｅ０〜Ｋｅ３として出力される。
【０１５８】
次に、復号ラウンドＲ＝１３のとき、レジスタＲＫ４〜ＲＫ７が現在値によって更新された値が、拡大鍵の各ワードＫｅ０〜Ｋｅ３として出力される。復号ラウンドＲ＝１３の拡大鍵を出力した後の更新処理では、レジスタＲＫ０〜ＲＫ３が、排他的論理和回路５０６〜５０９の出力で更新される。排他的論理和回路５０６〜５０９には、前回の復号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路５０５の出力およびレジスタＲＫ０〜ＲＫ２の現在値とが入力される。また、排他的論理和回路５０５には、定数Ｒｃｏｎ（６）とブロック５０４の出力が入力される。また、レジスタＲＫ７の現在値をブロック５０３で処理した出力が、ブロック５０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【０１５９】
次に、復号ラウンドＲ＝１２のとき、レジスタＲＫ０〜ＲＫ３の出力が、拡大鍵Ｋｅ０〜Ｋｅ３として出力される。なお、拡大鍵Ｋｅ０〜Ｋｅ３を出力した後の更新処理の際には、排他的論理和回路５１０〜５１３に、前回の復号ラウンドに対応して更新されたレジスタＲＫ４〜ＲＫ７の現在値と、ブロック５０４の出力およびレジスタＲＫ４〜ＲＫ６の現在値とがそれぞれ入力される。ブロック５０４には、レジスタＲＫ３の現在値が入力される。また、レジスタＲＫ０〜ＲＫ３については、現在値がそのまま更新値となる。
【０１６０】
次に、復号ラウンドＲ＝１１のとき、レジスタＲＫ４〜ＲＫ７の出力が、拡大鍵Ｋｅ０〜Ｋｅ３として出力される。なお、拡大鍵Ｋｅ０〜Ｋｅ３を出力した後の更新処理する際、排他的論理和回路５０６〜５０９には、前回の復号ラウンドに対応して更新されたレジスタＲＫ０〜ＲＫ３の現在値と、排他的論理和回路５０５の出力およびレジスタＲＫ０〜ＲＫ２の現在値とがそれぞれ入力される。また、排他的論理和回路５０５には、定数Ｒｃｏｎ（５）とブロック５０４の出力が入力される。また、レジスタＲＫ７の現在値をブロック５０３で処理した出力が、ブロック５０４へ入力される。また、レジスタＲＫ４〜ＲＫ７については、現在値がそのまま更新値となる。
【０１６１】
この復号ラウンドＲ＝１２および１１に対応する２クロック分の処理を１周期として、これを６周期分繰り返すことで、復号ラウンドＲ＝１１〜０に対応した拡大鍵が生成される（図１３では５周期分の図示を省略している）。
【０１６２】
次に、図１５を参照して、本発明の他の実施の形態としての送信ＩＰｓｅｃ回路について説明する。図１５の送信ＩＰｓｅｃ回路６は、図１等を参照して説明したＡＥＳ暗号回路１を用いて、送信するデータをＩＰ層で暗号化して送信する機能を実現する回路である。図１５の送信ＩＰｓｅｃ回路６は、送信パーサ回路６０１、暗号ＩＣＶ（Ｉｎｔｅｇｒｉｔｙ  Ｃｈｅｃｋ  Ｖａｌｕｅ）生成テーブル格納メモリ回路６０２、暗号ＩＣＶ生成テーブル読出回路６０３、カプセル化回路６０４、カプセル化テーブル格納メモリ回路６０５、カプセル化テーブル読出／更新回路６０６、暗号制御回路６０７、３ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）暗号回路６０８、ＡＥＳ暗号回路６０９、ＩＣＶ生成制御回路６１０、ＭＤ５（Ｍｅｓｓａｇｅ  Ｄｉｇｅｓｔ  ５）回路６１１、ＳＨＡ−１（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １）回路６１２、および送信フレームＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）回路６１３から構成されている。フレームデータを入力する各回路は、入力許可信号（あるいは入力停止要求信号）を、その各回路にフレームデータを出力する回路に対して出力することによって、フレームデータに対する各処理を完了する前に、次のフレームデータの入力を待たせるバックプレッシャ制御を行う。
【０１６３】
送信パーサ回路６０１は、送信フレームのフレームデータと送信フレーム長と送信フレームに対する送信ＩＰｓｅｃ処理の有無と送信ＩＰｓｅｃ処理有の場合のＳＡ番号（Ｓｅｃｕｒｉｔｙ  Ａｓｓｏｃｉａｔｉｏｎのテーブルのエントリ番号）の各情報を入力する。フレームデータは、特定のビット幅（例えば３２ビット）のデータストリームとして入力される。データストリームには各フレームの先頭位置・終了位置を示す信号が付加される。送信フレーム長と送信ＩＰｓｅｃ処理の有無と送信ＩＰｓｅｃ処理有の場合のＳＡ番号の各情報は、フレーム先頭の直前に挿入される。これらの情報をフレームデータとは別の信号として入力してもよい。送信パーサ回路６０１は、送信ＩＰｓｅｃ処理有無の情報に応じて、以下の処理を行う。送信ＩＰｓｅｃ処理無の場合は、送信ＩＰｓｅｃ処理無の情報とともに、入力した送信フレームのフレームデータをそのままカプセル化回路６０４に出力する。送信ＩＰｓｅｃ処理有の場合は、入力した送信フレームのヘッダ構造をフレーム先頭から解析し、カプセル化回路６０４が送信フレームデータにカプセル化ヘッダを挿入する位置を示す信号を、送信フレーム長とＳＡ番号の情報と送信フレームデータとともに、カプセル化回路６０４に出力する。また、送信フレームのＩＰヘッダ先頭位置からフレームの終了までのフレームデータ（暗号化対象データ）を暗号制御回路６０７に出力する。また、ＳＡ番号の情報を暗号ＩＣＶ生成テーブル読出回路６０３に出力する。
【０１６４】
カプセル化回路６０４は、送信パーサ回路６０１から送信ＩＰｓｅｃ処理有無の情報を入力し、送信ＩＰｓｅｃ処理無の場合は、送信ＩＰｓｅｃ処理無の情報とともに入力した送信フレームのフレームデータをそのままＩＣＶ生成制御回路６１０に出力する。送信ＩＰｓｅｃ処理有の場合、カプセル化回路６０４は送信パーサ回路６０１からＳＡ番号の情報を入力し、カプセル化テーブル読出／更新回路６０６にＳＡ番号を出力し、カプセル化テーブル読出／更新回路６０６から、ＳＡ番号が示すカプセル化テーブルのエントリに格納されたカプセル化情報を入力する。カプセル化情報は、カプセル化ヘッダを生成するために必要な情報であり、暗号／認証方式を示す情報・外側ＩＰヘッダの宛先ＩＰアドレスおよび送信元ＩＰアドレス・ＥＳＰ（Ｅｎｃａｐｓｕｌａｔｉｎｇ  Ｓｅｃｕｒｉｔｙ  Ｐａｙｌｏａｄ）ヘッダのＳＰＩ（Ｓｅｃｕｒｉｔｙ  Ｐｏｉｎｔｅｒ  Ｉｎｄｅｘ）およびシーケンス番号等を含む。カプセル化回路６０４は、入力したカプセル化情報と入力した送信フレームデータに基づいて、カプセル化ヘッダ（外側ＩＰヘッダおよびＥＳＰヘッダ）を生成し、入力したカプセル化ヘッダを挿入する位置を示す信号に応じて、生成したカプセル化ヘッダを挿入し、送信フレームデータの先頭からカプセル化ヘッダの終了までのフレームデータを、送信フレームヘッダデータとしてＩＣＶ生成制御回路６１０に出力する。カプセル化回路６０４は、カプセル化ヘッダを生成するために、送信フレームデータから内側ＩＰヘッダ内のＩＰパケット長を読み取り、カプセル化情報に含まれる暗号／認証方式の情報とＩＰパケット長から、外側ＩＰヘッダ用のＩＰパケット長を計算する（カプセル化ヘッダ・ＥＳＰトレーラ・ＩＣＶの挿入によってフレーム長が長くなる分を補正する）。また、内側ＩＰヘッダ内のＤＳＣＰ（ＤｉｆｆＳｅｒｖ  Ｃｏｄｅ  Ｐｏｉｎｔ）値（ＩＰｖ４ヘッダのＴｙｐｅ  Ｏｆ  Ｓｅｒｖｉｃｅ，ＩＰｖ６ヘッダのＴｒａｆｆｉｃ  Ｃｌａｓｓ）を読み取り、外側ＩＰヘッダのＤＳＣＰ値として使用する。また、外側ＩＰヘッダがＩＰｖ４の場合はヘッダチェックサムを計算する。なお、カプセル化ヘッダの挿入に加えて、カプセル化回路６０４は、送信フレームの先頭からカプセル化ヘッダ挿入位置までのフレームデータ内のＬ３（Ｌａｙｅｒ  ３）種別情報（Ｅｔｈｅｒｎｅｔ（登録商標）タイプやＰＰＰｏＥ（Ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ  ｐｒｏｔｏｃｏｌ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（登録商標））プロトコル）を外側ＩＰヘッダの種別（外側ＩＰヘッダのＩＰバージョン）を示す値に補正する。また、フレームデータがＰＰＰｏＥヘッダを含む場合は、ペイロード長をカプセル化ヘッダ・ＥＳＰトレーラ・ＩＣＶの挿入によってフレーム長が長くなる分を補正する。また、カプセル化回路６０４は、暗号制御回路６０７に対して暗号方式を示す情報を、ＩＣＶ生成制御回路６１０に対して認証方式を示す情報を、それぞれ出力する。
【０１６５】
カプセル化テーブル格納メモリ回路６０５は、カプセル化テーブルを格納するメモリである。カプセル化テーブル読出／更新回路６０６が、メモリに対して、ＳＡ番号に対応付けられたアドレスをアクセスすることにより、ＳＡ番号が示すカプセル化テーブルのエントリについて、カプセル化情報を読み書きすることができる。また、外部からカプセル化テーブルの各エントリについてカプセル化情報を読み書きすることにより、エントリの登録・変更等を行うことができる。
【０１６６】
カプセル化テーブル読出／更新回路６０６は、入力したＳＡ番号が示すカプセル化テーブルのエントリから、カプセル化情報を読み出し、カプセル化回路６０４に出力する。また、カプセル化情報のうちＥＳＰヘッダのシーケンス番号を＋１加算した値に更新する。同様に、外側ＩＰヘッダがＩＰｖ４の場合はＩＰ識別子を＋１加算した値に更新する。また、カプセル化情報に送信フレーム数や送信フレームデータのバイト数を追加しておき、送信毎に値を更新してもよい。
【０１６７】
暗号ＩＣＶ生成テーブル格納メモリ回路６０２は、暗号ＩＣＶ生成テーブルを格納するメモリである。暗号ＩＣＶ生成テーブル読出回路６０３が、メモリに対して、ＳＡ番号に対応付けられたアドレスをアクセスすることにより、ＳＡ番号が示す暗号ＩＣＶ生成テーブルのエントリについて、暗号鍵とＩＣＶ生成鍵を読み出すことができる。また、外部から暗号ＩＣＶ生成テーブルの各エントリについて暗号鍵とＩＣＶ生成鍵を読み書きすることにより、エントリの登録・変更等を行うことができる。
【０１６８】
暗号ＩＣＶ生成テーブル読出回路６０３は、入力したＳＡ番号が示す暗号ＩＣＶ生成テーブルのエントリから、暗号鍵とＩＣＶ生成鍵を読み出し、それぞれ暗号制御回路６０７とＩＣＶ生成制御回路６１０に出力する。
【０１６９】
暗号制御回路６０７は、入力した送信フレームの暗号化対象データを、入力した暗号方式を示す情報に基づいて暗号化しＩＣＶ生成制御回路６１０に出力する。暗号方式がＮＵＬＬ（ヌル）の場合は、暗号化対象データにＥＳＰトレーラを追加した平文データをそのまま暗号データとしてＩＣＶ生成制御回路６１０に出力する。暗号方式が３ＤＥＳの場合は、入力した暗号鍵とともに平文データを暗号ブロック長（６４ビット）ずつに区切った平文データブロックを３ＤＥＳ暗号回路６０８に出力し、平文データブロックを暗号化した暗号データブロックを３ＤＥＳ暗号回路６０８から入力して、これを暗号データとしてＩＣＶ生成制御回路６１０に出力する。暗号方式がＡＥＳの場合は、入力した暗号鍵と入力した暗号方式を示す情報に基づいて生成した暗号鍵長情報を含む暗号制御信号とともに、平文データを暗号ブロック長（１２８ビット）ずつに区切った平文データブロックをＡＥＳ暗号回路６０９に出力し、平文データブロックを暗号化した暗号データブロックをＡＥＳ暗号回路６０９から入力して、これを暗号データとしてＩＣＶ生成制御回路６１０に出力する。なお、暗号制御回路６０７は、各送信フレームの初回の平文データブロックを出力する前に、初期化信号を含む暗号制御信号を出力することにより、３ＤＥＳ暗号回路６０８あるいはＡＥＳ暗号回路６０９から暗号ブロック長のＩＶ（Ｉｎｉｔｉａｌ  Ｖｅｃｔｏｒ）を入力し、ＩＣＶ生成制御回路６１０にＩＶを出力する。
【０１７０】
３ＤＥＳ暗号回路６０８は、入力した暗号鍵と暗号制御信号に基づいて、入力した平文データブロックを３ＤＥＳ−ＣＢＣ（ｃｉｈｅｒ  ｂｌｏｃｋ  ｃｈａｉｎｉｎｇ）アルゴリズムにより暗号化し、暗号データブロックとして出力する。ただし、初期化信号を含む暗号制御信号を入力した場合は、３ＤＥＳ暗号回路６０８が保持する３ＤＥＳ用ＩＶ（６４ビット）を出力する。
【０１７１】
ＡＥＳ暗号回路６０９は、図１等を参照して説明した本発明の実施形態としてのＡＥＳ暗号回路１に相当する構成であり、入力した暗号鍵と暗号鍵長情報を含む暗号制御信号に基づいて、入力した平文データブロックをＡＥＳ−ＣＢＣアルゴリズムにより暗号化し、暗号データブロックとして出力する。ただし、初期化信号を含む暗号制御信号を入力した場合は、ＡＥＳ暗号回路６０９が保持するＡＥＳ用ＩＶ（１２８ビット）を出力する。
【０１７２】
ＩＣＶ生成制御回路６１０は、カプセル化回路６０４から送信ＩＰｓｅｃ処理無を入力した場合、カプセル化回路６０４から入力した送信フレームデータを、特定のビット幅（例えば３２ビット）のデータストリームとして送信フレームＦＩＦＯ回路６１３に出力する。送信ＩＰｓｅｃ処理有を入力した場合、カプセル化回路６０４から入力した送信フレームヘッダデータ（送信フレームの先頭からカプセル化ヘッダの終了までのフレームデータ）、暗号制御回路６０７から入力した暗号データ、生成したＩＣＶの順に、特定のビット幅のデータストリームとして、送信フレームＦＩＦＯ回路６１３に出力する。入力した認証方式を示す情報に基づいて認証対象データ（ＥＳＰヘッダと続く暗号データ）から  ＩＣＶを生成する。ただし、認証方式がＮＵＬＬの場合は、ＩＣＶの生成および出力は行わない。認証方式がＨＭＡＣ−ＭＤ５（Ｋｅｙｅｄ  Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ−Ｍｅｓｓａｇｅ  Ｄｉｇｅｓｔ  ５）の場合は、認証対象データを認証対象データブロック長（５１２ビット）に区切った認証対象データブロックを、認証鍵および認証制御信号（各送信フレームにおける初回／最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む）とともに、ＭＤ５回路６１１に出力し、最終回の認証対象データブロックを出力した後、ＭＤ５回路６１１からＩＣＶ（９６ビット）を入力する。認証方式がＨＭＡＣ−ＳＨＡ−１の場合は、認証対象データを認証対象データブロック長（５１２ビット）に区切った認証データブロックを、認証鍵および認証制御信号（各送信フレームにおける初回／最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む）とともに、ＳＨＡ−１回路６１２に出力し、最終回の認証対象データブロックを出力した後、ＳＨＡ−１回路６１２からＩＣＶ（９６ビット）を入力する。
【０１７３】
ＭＤ５回路６１１は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをＨＭＡＣ−ＭＤ５アルゴリズムによりＩＣＶ（９６ビット）を生成し出力する。
【０１７４】
ＳＨＡ−１回路６１２は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをＨＭＡＣ−ＳＨＡ−１アルゴリズムによりＩＣＶ（９６ビット）を生成し出力する。
【０１７５】
送信フレームＦＩＦＯ回路６１３は、ＩＣＶ生成制御回路６１０から送信フレームデータを入力する。フレームデータは、特定のビット幅（例えば３２ビット）のデータストリームとして入力される。データストリームには各フレームの先頭位置・終了位置を示す信号が付加される。送信フレームＦＩＦＯ回路６１３は、フレームデータを蓄積し、１個以上のフレームを蓄積しているとき、蓄積フレームデータのうち、最も早く入力されたフレームデータについて、外部（例えばＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）回路）にフレームデータの先頭から特定のビット幅（例えば３２ビット）で出力を開始し、フレームデータの終了まで、データストリームとして出力を継続する。
【０１７６】
次に、図１６を参照して、本発明の他の実施の形態としての受信ＩＰｓｅｃ回路について説明する。図１６の受信ＩＰｓｅｃ回路７は、図８等を参照して説明したＡＥＳ復号回路２を用いて、ＩＰ層で暗号化されたデータを受信して復号する機能を実現する回路である。受信ＩＰｓｅｃ回路７の構成を図１６に示す。受信ＩＰｓｅｃ回路７は、受信データＦＩＦＯ回路７０１、受信パーサ回路７０２、検索回路７０３、検索テーブル格納メモリ回路７０４、検索テーブル読出回路７０５、ジョブＦＩＦＯ回路７０６、デカプセル化回路７０７、復号認証テーブル格納メモリ回路７０８、復号認証テーブル読出／更新回路７０９、復号認証制御回路７１０、３ＤＥＳ復号回路７１１、ＡＥＳ復号回路７１２、ＭＤ５回路７１３、ＳＨＡ−１回路７１４、および出力フレームＦＩＦＯ回路７１５から構成されている。フレームデータを入力する各回路は、入力許可信号（あるいは入力停止要求信号）を回路にフレームデータを出力する回路に対して出力することにより、フレームデータに対する各処理を完了する前に、次のフレームデータの入力を待たせるバックプレッシャ制御を行う。
【０１７７】
受信データＦＩＦＯ回路７０１は、受信フレームのフレームデータを入力する。フレームデータは、特定のビット幅（例えば３２ビット）のデータストリームとして入力される。データストリームには各フレームの先頭位置・終了位置を示す信号が付加される。受信データＦＩＦＯ回路７０１は、フレームデータを蓄積し、デカプセル化回路７０７に出力する。
【０１７８】
受信パーサ回路７０２は、受信フレームのフレームデータを入力する（受信データＦＩＦＯ回路７０１への入力と同じ）。受信パーサ回路７０２は、入力した受信フレームのヘッダ構造をフレーム先頭から解析し、ＥＳＰヘッダの有無（ＩＰｓｅｃの有無）を判定し、検索回路において必要となるフレーム抽出情報（宛先ＩＰアドレス値やＥＳＰヘッダ内のＳＰＩ値など）を抽出し、検索回路７０３に出力する。また、受信フレームデータをデカプセル化するために必要となる外側ＩＰヘッダの位置やＥＳＰヘッダの位置を示すデカプセル化位置情報を生成し、検索回路７０３に出力する。また受信フレームの外側ＩＰヘッダからパケット長を抽出し、パケット長から外側ＩＰヘッダ長（外側ＩＰヘッダ先頭からＥＳＰヘッダ直前までの長さ）を差し引いた値を復号認証対象データ長として、検索回路７０３に出力する。
【０１７９】
検索テーブル格納メモリ回路７０４は、検索テーブルを格納するメモリである。検索テーブル読出回路７０５が、メモリに対して、ＳＡ番号に対応付けられたアドレスをアクセスすることにより、ＳＡ番号が示す検索テーブルのエントリについて、検索情報（検索条件情報、検索結果情報）を読み出すことができる。また、外部から検索テーブルの各エントリについて検索情報を読み書きすることにより、エントリの登録・変更等を行うことができる。なお、検索条件情報には、宛先ＩＰアドレス値・ＥＳＰ  ＳＰＩ値が含まれる。また検索結果情報には、暗号方式・認証方式が含まれる（暗号方式や認証方式を復号認証テーブル格納メモリ７０８に記憶しておいてもよい）。
【０１８０】
検索テーブル読出回路７０５は、入力したＳＡ番号が示す検索テーブルのエントリから、検索情報を読み出し、入力したデカプセル化位置とともに検索回路７０３に出力する。
【０１８１】
検索回路７０３は、入力した受信フレームにＥＳＰヘッダが無い（ＩＰｓｅｃパケットでない）場合に、受信ＩＰｓｅｃ処理無の情報を含むジョブ情報をジョブＦＩＦＯ回路７０６に出力する。入力した受信フレームにＥＳＰヘッダが有る場合は、受信フレームのフレーム抽出情報と、検索テーブルの各エントリの検索条件情報との一致を判定する。ＳＡ番号を最小値から最大値まで順に検索テーブル読出回路７０５に出力し、ＳＡ番号が示す検索テーブルのエントリの検索情報を入力する。検索情報の検索条件情報に含まれる宛先ＩＰアドレス値・ＥＳＰ  ＳＰＩ値等と、フレーム抽出情報に含まれる宛先ＩＰアドレス値・ＥＳＰ  ＳＰＩ値等が全て一致した場合に、ＳＡ番号を、受信フレームのＳＡ番号とする。さらに、ＳＡ番号の検索情報に含まれる検索結果情報を取得する。検索回路７０３は、受信ＩＰｓｅｃ処理有の情報と入力したデカプセル化位置情報と復号認証対象データ長とともに、ＳＡ番号および検索結果情報を、受信フレームのジョブ情報としてジョブＦＩＦＯ回路７０６に出力する。
【０１８２】
ジョブＦＩＦＯ回路７０６は、入力した受信フレームのジョブ情報を蓄積し、蓄積されたジョブ情報のうち、最も早くに蓄積されたジョブ情報を、デカプセル化回路に出力する。
【０１８３】
デカプセル化回路７０７は、入力したジョブ情報に受信ＩＰｓｅｃ処理無の情報が含まれる場合、受信ＩＰｓｅｃ処理無の情報とともに、入力した受信フレームのフレームデータを復号認証制御回路７１０に出力する。ジョブ情報に受信ＩＰｓｅｃ処理有の情報が含まれる場合は、入力したジョブ情報のうちデカプセル化位置情報に基づいて、入力した受信フレームデータの先頭から外側ＩＰヘッダ直前までのフレームデータを、受信フレームヘッダデータとして復号認証制御回路７１０に出力する。また、入力したジョブ情報に含まれる復号認証対象データ長とともに、入力した受信フレームのＥＳＰヘッダ以後のフレームデータを復号認証対象データとして復号認証制御回路７１０に出力する。また、受信ＩＰｓｅｃ処理有の情報と、入力したジョブ情報に含まれるＳＡ番号と検索結果情報とともに、入力した受信フレームのＥＳＰヘッダ内のＥＳＰシーケンス番号を復号認証テーブル読出／更新回路７０９に出力する。
【０１８４】
復号認証テーブル格納メモリ回路７０８は、復号認証テーブルを格納するメモリである。復号認証テーブル読出／更新回路７０９が、メモリに対して、ＳＡ番号に対応付けられたアドレスをアクセスすることにより、ＳＡ番号が示す復号認証テーブルのエントリに関する、復号認証情報を読み書きすることができる。また、外部から復号認証テーブルの各エントリについて復号認証情報を読み書きすることにより、エントリの登録・変更等を行うことができる。
【０１８５】
復号認証テーブル読出／更新回路７０９は、入力したＳＡ番号が示す復号認証テーブルのエントリから、復号認証情報を読み出し、復号認証情報に含まれる復号鍵および認証鍵を復号認証制御回路７１０に出力する。また、復号認証の成功を示す復号認証終了信号を入力したとき、デカプセル化回路７０７から入力したＥＳＰシーケンス番号を、読み出した復号認証情報に含まれるＥＳＰシーケンス番号およびアンチリプレイウインドウ状態に基づいて、アンチリプレイの判定を行い、アンチリプレイの成功有無を示すアンチリプレイ終了信号を復号認証制御回路７１０に出力する。併せて、復号認証情報に含まれるＥＳＰシーケンス番号およびアンチリプレイウインドウ状態を更新する（アンチリプレイが成功しなかった場合は更新しない）。また、復号認証情報に受信フレーム数や受信フレームデータのバイト数を追加しておき、受信毎に値を更新してもよい。
【０１８６】
復号認証制御回路７１０は、受信ＩＰｓｅｃ処理無の情報を入力した場合、情報とともに入力した受信フレームのフレームデータを、出力フレームＦＩＦＯ回路７１５に出力する。受信ＩＰｓｅｃ処理有の情報を入力した場合は、情報とともに入力した受信フレームヘッダデータを出力フレームＦＩＦＯ回路７１５に出力する。さらに、入力した受信フレームの復号認証対象データのうち、ＥＳＰペイロード（ＥＳＰヘッダ・ＩＶ・ＩＣＶを除く復号認証対象データ）に対して、入力した検索結果情に含まれる暗号方式を示す情報に基づいて復号化し、出力フレームＦＩＦＯ回路７１５に出力する。暗号方式がＮＵＬＬの場合は、ＥＳＰペイロードをそのまま出力する。暗号方式が３ＤＥＳの場合は、入力した復号鍵とともにＥＳＰペイロードを暗号ブロック長（６４ビット）ずつに区切った暗号データブロックを３ＤＥＳ復号回路７１１に出力し、暗号データブロックを復号化した平文データブロックを３ＤＥＳ復号回路７１１から入力して、出力する。暗号方式がＡＥＳの場合は、入力した復号鍵と入力した復号方式を示す情報に基づいて生成した復号鍵長情報を含む復号制御信号とともに、暗号データを暗号ブロック長（１２８ビット）ずつに区切った暗号データブロックをＡＥＳ復号回路７１２に出力し、暗号データブロックを復号化した平文データブロックをＡＥＳ復号回路７１２から入力して、出力する。なお、復号認証制御回路７１０は、各送信フレームの初回の暗号データブロックを出力する前に、ＩＶおよび初期化信号を含む復号制御信号を出力することにより、３ＤＥＳ復号回路７１１あるいはＡＥＳ復号回路７１２の初期化を行う。復号認証制御回路７１０は、受信ＩＰｓｅｃ処理有の情報を入力した場合は、入力した受信フレームの復号認証対象データ中の認証対象データ（ＩＣＶを除く復号認証対象データ）に対して、入力した検索結果情に含まれる認証方式を示す情報に基づいてＩＣＶを生成し、復号認証対象データに含まれるＩＣＶとの一致を判定する。ただし、認証方式がＮＵＬＬの場合は、ＩＣＶの生成および一致判定は行わない（一致したとみなす）。認証方式がＨＭＡＣ−ＭＤ５の場合は、認証対象データを認証対象データブロック長（５１２ビット）に区切った認証対象データブロックを、認証鍵および認証制御信号（各送信フレームにおける初回／最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む）とともに、ＭＤ５回路７１３に出力し、最終回の認証対象データブロックを出力した後、ＭＤ５回路７１３からＩＣＶ（９６ビット）を入力する。認証方式がＨＭＡＣ−ＳＨＡ−１の場合は、認証対象データを認証対象データブロック長（５１２ビット）に区切った認証データブロックを、認証鍵および認証制御信号（各送信フレームにおける初回／最終回の認証対象データブロックであるか否かを示す信号と認証対象データ長を含む）とともに、ＳＨＡ−１回路７１４に出力し、最終回の認証対象データブロックを出力した後、ＳＨＡ−１回路７１４からＩＣＶ（９６ビット）を入力する。上記処理が終了したとき、復号認証の成功有無を判定し（復号が正常終了しＩＣＶが一致した場合に有）、判定結果（成功有無）を示す復号認証終了信号を出力する。また、入力したアンチリプレイ終了信号を出力フレームＦＩＦＯ回路７１５に出力する。
【０１８７】
３ＤＥＳ復号回路７１１は、入力した復号鍵と復号制御信号に基づいて、入力した暗号データブロックを３ＤＥＳ−ＣＢＣアルゴリズムにより復号化し、平文データブロックとして出力する。ただし、初期化信号を含む復号制御信号を入力した場合は、３ＤＥＳ復号回路の状態を入力したＩＶ値（６４ビット）を用いて初期化する。
【０１８８】
ＡＥＳ復号回路７１２は、図８等を参照して説明した本発明の実施形態としてのＡＥＳ復号回路２に相当する構成であり、入力した復号鍵と復号鍵長情報を含む復号制御信号に基づいて、入力した暗号データブロックをＡＥＳ−ＣＢＣアルゴリズムにより復号化し、平文データブロックとして出力する。ただし、初期化信号を含む復号制御信号を入力した場合は、３ＤＥＳ復号回路の状態を入力したＩＶ値（１２８ビット）を用いて初期化する。
【０１８９】
ＭＤ５回路７１３は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをＨＭＡＣ−ＭＤ５アルゴリズムによりＩＣＶ（９６ビット）を生成し出力する。
【０１９０】
ＳＨＡ−１回路７１４は、入力した認証鍵と認証制御信号に基づいて、入力した認証対象データをＨＭＡＣ−ＳＨＡ−１アルゴリズムによりＩＣＶ（９６ビット）を生成し出力する。
【０１９１】
出力フレームＦＩＦＯ回路７１５は、復号認証制御回路７１０から入力したフレームデータをフレームの先頭からＦＩＦＯバッファに蓄積し、フレームの最後まで蓄積され、かつ、フレームについて受信ＩＰｓｅｃ処理無を示す情報を入力しているとき、あるいは、アンチリプレイ成功有を示すフレームに対するアンチリプレイ終了信号を入力したとき、外部への出力を許可する。アンチリプレイ成功無を示すフレームに対するアンチリプレイ終了信号を入力したときは、蓄積中のフレームのフレームデータを破棄する。
【０１９２】
以上のように、本発明の各実施形態によれば、１クロックで１ラウンドを処理するＡＥＳ暗号／復号処理における高速なラウンド処理を実現しつつ、ＳＡ数の増加に伴うメモリ容量の増加等による回路規模の増大を抑制することができる。
【０１９３】
本発明の各実施形態は、暗号／復号のラウンド処理を実施する前に外部から設定された暗号鍵・復号鍵（すなわち共通鍵）から拡大鍵を生成しメモリに格納するのではなく、暗号／復号の各々にラウンドの進行に合わせて拡大鍵を生成する拡大鍵生成回路（暗号用拡大鍵生成回路１２あるいは復号用拡大鍵生成回路２２）を備えている。
【０１９４】
暗号用拡大鍵生成回路１２は、２５６ビット長の暗号用拡大鍵生成レジスタ１２２と暗号用拡大鍵生成論理回路１２１と暗号用拡大鍵出力論理回路１２３とを備える。暗号用拡大鍵出力論理回路１２３は、暗号用拡大鍵生成レジスタ１２２から鍵長情報と暗号ラウンドの進行に応じて選択された１２８ビット長の値を、暗号用拡大鍵として出力する。暗号用拡大鍵生成論理回路１２１は、暗号用拡大鍵の生成を開始した時に暗号用拡大鍵生成レジスタを入力された暗号鍵の値に初期化し、各暗号ラウンド時に、暗号鍵長情報と暗号ラウンドの進行に応じて定まる所定の暗号用拡大鍵生成演算を暗号用拡大鍵生成レジスタ１２２の値に対して行い、暗号用拡大鍵生成レジスタ１２２の値をその演算結果によって更新する。
【０１９５】
復号用拡大鍵生成回路２２は、２５６ビット長の復号用拡大鍵生成レジスタ２２２と復号用拡大鍵生成論理回路２２１と復号用拡大鍵出力論理回路２２３とを備える。復号用拡大鍵出力論理回路２２３は、復号用拡大鍵生成レジスタ２２２から鍵長情報と暗号ラウンドの進行に応じて選択された１２８ビット長の値を、復号用拡大鍵として出力する。復号用拡大鍵生成論理回路２２１は、復号用拡大鍵の生成を開始した時に復号用拡大鍵生成レジスタを入力された復号鍵の値に初期化し、各復号ラウンド時に、鍵長情報と復号ラウンドの進行に応じて定まる所定の復号用拡大鍵生成演算を復号用拡大鍵生成レジスタ２２２の値に対して行い、復号用拡大鍵生成レジスタ２２の値をその演算結果によって更新する。
【０１９６】
また、拡大鍵生成論理（暗号用拡大鍵生成論理回路１２１または復号用拡大鍵生成論理回路２２１）は、拡大鍵生成レジスタ（暗号用拡大鍵生成レジスタ１２２または復号用拡大鍵生成レジスタ２２２）の３２ビット単位の各出力（ＲＫ０〜ＲＫ７）と、それと異なる他の３２ビット単位の出力に対応する値（ＲＫ０〜ＲＫ７あるいはＲＫ０〜ＲＫ７の値に応じて出力値が変化する排他的論理和回路４０５または５０５の出力）との排他的論理和を演算する複数の排他的論理和回路と、複数の排他的論理和回路の出力と拡大鍵生成レジスタの３２ビット単位の各出力とのいずれかを選択して出力する複数の選択回路（セレクタ４１４〜４２１または５１４〜５２１）とを有し、拡大鍵生成レジスタの値を複数の選択回路の出力によって更新するようにしている。
【０１９７】
本発明の各実施形態によれば、拡大鍵を格納するための大容量のメモリが不要となるという効果が得られる。すなわち、ＩＰｓｅｃ回路が対象とするＳＡ数が増加した場合においても、回路規模を増大させることなく暗号／復号を行うことができる。
【０１９８】
また、暗号と復号の各処理に拡大鍵生成回路（暗号用拡大鍵生成回路１２あるいは復号用拡大鍵生成回路２２）を備えることで、暗号と復号を同時に実行することで全体として処理を高速化することができる。すなわち、暗号処理装置には、暗号処理で用いられる共通鍵が暗号鍵であって、各ラウンド処理で用いられる暗号用拡大鍵を生成するものである暗号用拡大鍵生成回路１２と、暗号処理で用いられる共通鍵が復号鍵であって、各ラウンド処理で用いられる復号用拡大鍵を生成するものである復号用拡大鍵生成回路２２とを備えるようにすることができる。
【０１９９】
また、拡大鍵生成レジスタ（暗号用拡大鍵生成レジスタ１２２または復号用拡大鍵生成レジスタ２２２）の値の一部を選択して拡大鍵とするため、拡大鍵生成の論理とラウンド処理の論理を合わせた場合のクリティカルパスの論理段数増大が生じない。すなわち、メモリから拡大鍵を読み出して使用する先行技術と同程度の論理段数でラウンド処理を実現でき、１クロックで１ラウンドを処理する高速なラウンド処理が可能となる。
【０２００】
また、鍵長情報とラウンドの進行に応じて定まる所定の演算を拡大鍵生成レジスタ（暗号用拡大鍵生成レジスタ１２２または復号用拡大鍵生成レジスタ２２２）に対して行うため、ＡＥＳで規定された全ての鍵長に対して対応することが可能であり、ＩＰｓｅｃを用いて通信する対向機器のＡＥＳ実装状態に応じて鍵長を変更することができる。
【０２０１】
また、拡大鍵生成回路（暗号用拡大鍵生成回路１２あるいは復号用拡大鍵生成回路２２）に要するＤ−ＦＦは、拡大鍵生成レジスタ（暗号用拡大鍵生成レジスタ１２２または復号用拡大鍵生成レジスタ２２２）を構成する２５６個のみで良く、拡大鍵生成アルゴリズムの実装に必要な最小個数であるため、Ｄ−ＦＦへのクロック信号供給に要する消費電力と、拡大鍵生成回路の回路規模を、抑制することができる。
【０２０２】
なお、本発明の実施の形態は、上記に限定されず、ブロック図においてブロックに分けて表した各構成・機能を、さらに分割して分散させたり、複数のブロックを統合させたりする変更などを適宜行うことができる。また、本発明の暗号処理装置（すなわちＡＥＳ暗号回路１やＡＥＳ復号回路２）は、その構成の一部にＣＰＵとＣＰＵによって実行されるプログラムとを用いたり、本発明の暗号処理装置に入出力される制御信号や平文データあるいは暗号文データを外部のＣＰＵとそのＣＰＵによって実行されるプログラムとを用いて制御したりすることができる。そして、その場合に用いられるプログラムは、コンピュータ読み取り可能な記録媒体あるいは通信回線を介して提供することができる。
【符号の説明】
【０２０３】
１、６０９…ＡＥＳ暗号回路、１１…暗号用ラウンド処理回路、１２…暗号用拡大鍵生成回路、１３…暗号用ラウンド制御回路、１２１…暗号用拡大鍵生成論理回路、１２２…暗号用拡大鍵生成レジスタ、１２３…暗号用拡大鍵出力論理回路、４０２…３入力１出力セレクタ、４０５〜４１３…排他的論理和回路、４１４〜４２１…２入力１出力セレクタ、４２５〜４３２…２入力１出力セレクタ、ＲＫ０、ＲＫ１、ＲＫ２、ＲＫ３、ＲＫ４、ＲＫ５、ＲＫ６、ＲＫ７…３２ビットのレジスタ（またはその格納値）、２、７１２…ＡＥＳ復号回路、２１…復号用ラウンド処理回路、２２…復号用拡大鍵生成回路、２３…復号用ラウンド制御回路、２２１…復号用拡大鍵生成論理回路、２２２…復号用拡大鍵生成レジスタ、２２３…復号用拡大鍵出力論理回路、５０２…３入力１出力セレクタ、５０５〜５１３…排他的論理和回路、５１４〜５２１…２入力１出力セレクタ、５２５〜５３２…２入力１出力セレクタ
【図１】
2010266751.tif 000009
【図２】
2010266751.tif 000010
【図３】
2010266751.tif 000011
【図４】
2010266751.tif 000012
【図５】
2010266751.tif 000013
【図６】
2010266751.tif 000014
【図７】
2010266751.tif 000015
【図８】
2010266751.tif 000016
【図９】
2010266751.tif 000017
【図１０】
2010266751.tif 000018
【図１１】
2010266751.tif 000019
【図１２】
2010266751.tif 000020
【図１３】
2010266751.tif 000021
【図１４】
2010266751.tif 000022
【図１５】
2010266751.tif 000023
【図１６】
2010266751.tif 000024