(57)【要約】【課題】ＡＥＳ暗号処理回路の性能を保ちつつ、換字テーブル（Ｓ−ｂｏｘ）の容量を削減する。【解決手段】列マルチプレクサ１０２、行マルチプレクサ１０４により、入力ステート１０１上の８ビットの１要素が選択される。選択された要素は、Ｓ−ｂｏｘテーブル１０５により換字処理され、ガロア体乗算器１０７に入力される。ガロア体乗算器１０７により、Ｓ−ｂｏｘテーブル１０５の出力と係数テーブル１０６出力とを４並列乗算し、３２ビット出力を演算結果レジスタ１０８に格納する。演算結果レジスタ１０８の出力は、ガロア体加算器１０９により、累算レジスタ１１０と加算され累算レジスタ１１０に格納される。【選択図】      図１
2004233427.tif 000002
【特許請求の範囲】
【請求項１】
ステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を暗号化用に変換する換字テーブルと、選択された要素の行に応じた係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を連結して累算するガロア体加算器とを有することを特徴とするＡＥＳ暗号処理装置。
【請求項２】
ＡＥＳ暗号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令を実行するＡＥＳ暗号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段とを有することを特徴とするＡＥＳ暗号処理装置。
【請求項３】
ＡＥＳ暗号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令、排他的論理和演算命令を実行するＡＥＳ暗号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段と、排他的論理和演算を実行する演算器とを有することを特徴とするＡＥＳ暗号処理装置。
【請求項４】
即値部分が、第０行を指定すると、係数｛０２｝，｛０１｝，｛０１｝，｛０３｝を出力し、第１行を指定すると、係数｛０３｝，｛０２｝，｛０１｝，｛０１｝を出力し、第２行を指定すると、係数｛０１｝，｛０３｝，｛０２｝，｛０１｝を出力し、第３行を指定すると、係数｛０１｝，｛０１｝，｛０３｝，｛０２｝を出力する前記係数テーブルを有することを特徴とする請求項２、または、請求項３記載のＡＥＳ暗号処理装置。
【請求項５】
ステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を復号化用に変換する換字テーブルと、選択された要素の行に応じた係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を連結して累算するガロア体加算器とを有することを特徴とするＡＥＳ復号処理装置。
【請求項６】
ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ復号化命令を実行するＡＥＳ復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段とを有することを特徴とするＡＥＳ復号処理装置。
【請求項７】
ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ復号化命令、排他的論理和演算命令を実行するＡＥＳ復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段と、排他的論理和演算を実行する演算器とを有することを特徴とするＡＥＳ復号処理装置。
【請求項８】
即値部分が、第０行を指定すると、係数｛０ｅ｝，｛０９｝，｛０ｄ｝，｛０ｂ｝を出力し、第１行を指定すると、係数｛０ｂ｝，｛０ｅ｝，｛０９｝，｛０ｄ｝を出力し、第２行を指定すると、係数｛０ｄ｝，｛０ｂ｝，｛０ｅ｝，｛０９｝を出力し、第３行を指定すると、係数｛０９｝，｛０ｄ｝，｛０ｂ｝，｛０ｅ｝を出力する前記係数テーブルを有することを特徴とする請求項６、または、請求項７記載のＡＥＳ復号処理装置。
【請求項９】
ステートの１要素を取り出す第１の選択手段と、前記第１の選択手段により取り出された要素を逆アフィン変換する逆アフィン変換回路と、暗号化の場合には前記第１の選択手段の出力を選択し、復号化の場合には前記逆アフィン変換回路の出力を選択する第２の選択手段と、前記第２の選択手段の出力を暗号化・復号化用に変換する逆数換字テーブルと、前記逆数換字テーブルの出力をアフィン変換するアフィン変換回路と、暗号化の場合には前記アフィン変換回路の出力を選択し、復号化の場合には前記逆数換字テーブルの出力を選択する第３の選択手段と、選択された要素の行に応じた係数を出力する係数テーブルと、前記第３の選択手段の出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を連結して累算するガロア体加算器とを有することを特徴とするＡＥＳ暗号・復号処理装置。
【請求項１０】
ＡＥＳ暗号化命令、ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令、ＡＥＳ復号化命令を実行するＡＥＳ暗号・復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す第１の選択手段と、前記第１の選択手段により取り出された要素を逆アフィン変換する逆アフィン変換回路と、暗号化の場合には前記第１の選択手段の出力を選択し、復号化の場合には前記逆アフィン変換回路の出力を選択する第２の選択手段と、前記第２の選択手段の出力を暗号化・復号化用に変換する逆数換字テーブルと、前記逆数換字テーブルの出力をアフィン変換するアフィン変換回路と、暗号化の場合には前記アフィン変換回路の出力を選択し、復号化の場合には前記逆数換字テーブルの出力を選択する第３の選択手段と、選択された要素の行に応じた係数を出力する係数テーブルと、前記第３の選択手段の出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段とを有することを特徴とするＡＥＳ暗号・復号処理装置。
【請求項１１】
ＡＥＳ暗号化命令、ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令、ＡＥＳ復号化命令を実行するＡＥＳ暗号・復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す第１の選択手段と、前記第１の選択手段により取り出された要素を逆アフィン変換する逆アフィン変換回路と、暗号化の場合には前記第１の選択手段の出力を選択し、復号化の場合には前記逆アフィン変換回路の出力を選択する第２の選択手段と、前記第２の選択手段の出力を暗号化・復号化用に変換する逆数換字テーブルと、前記逆数換字テーブルの出力をアフィン変換するアフィン変換回路と、暗号化の場合には前記アフィン変換回路の出力を選択し、復号化の場合には前記逆数換字テーブルの出力を選択する第３の選択手段と、選択された要素の行に応じた係数を出力する係数テーブルと、前記第３の選択手段の出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段と、排他的論理和演算を実行する演算器とを有することを特徴とするＡＥＳ暗号・復号処理装置。
【請求項１２】
前記第１の選択手段、前記逆アフィン変換回路、前記第２の選択手段、前記逆数換字テーブル、前記アフィン変換回路、第３の選択手段を多重化し、複数列を同時に処理することを特徴とする請求項１０、または、請求項１１記載のＡＥＳ暗号・復号処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＡＥＳ暗号処理装置、ＡＥＳ復号処理装置、および、ＡＥＳ暗号・復号処理装置に関し、特に、所要テーブル容量を削減したＡＥＳ暗号処理装置、ＡＥＳ復号処理装置、および、ＡＥＳ暗号・復号処理装置に関する。
【０００２】
【従来の技術】
光ファイバ、ＡＤＳＬ，ＣＡＴＶなど安価なブロードバンド・インターネット・アクセス手段の普及にともない、インターネット上に暗号で保護された仮想的な通信チャネル（Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ，  ＶＰＮ）を用意して高価な専用線を代替し、通信費用の削減を図る動きが加速しつつある。
【０００３】
現在ＶＰＮに用いられている暗号は、５６ｂｉｔ長の共通鍵を用いる米国標準暗号（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ，ＤＥＳ）やその拡張である３ＤＥＳである。しかし、今後は、３ＤＥＳと同等の演算量でより暗号強度が強いと言われている次期米国標準暗号ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）暗号に置き換えられていくと思われる。たとえば、企業の本支店など遠隔地にあるネットワーク間をＶＰＮで結ぶルータにＡＥＳ暗号化機能を実装する方法としては、ＡＥＳ専用ハードウェア・アクセラレータを内蔵する、内蔵マイクロプロセッサに暗号処理専用命令を追加するなどいくつか考えられるが、いずれの場合でも、構成要素として小型かつ高速なＡＥＳ処理回路が必要となる。
【０００４】
以下、ＡＥＳ暗号の概要と従来の実装例を説明する。まず、図２１〜図２６を用い、米国の連邦情報処理規格（Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄｓ  Ｐｕｂｌｉｃａｔｉｏｎ，ＦＩＰＳ）１９７（非特許文献１、以下、ＦＩＰＳ１９７と記す）で規定されているＡＥＳの暗号化手順を説明する。
【０００５】
ＡＥＳで用いられるデータ構造である「ステート」を図２１に示す。ＡＥＳでは、入力データを１２８ビット単位のブロックに区切り、１２８，１９２，２５６ビット長の共通鍵で暗号化する。１２８ビット入力は、１６個のバイト（８ビット）データに分解され、４行４列の配列に格納される。この配列を「ステート」と呼ぶ。入力データに対する操作は全てこのステート上で行われる。入力ブロック中の各バイトを早い順にｉｎ０からｉｎ１５で表すと、図２１（ａ）に示すように、連続したバイトは同一列に格納される。以下の説明では、ステート上の第ｉ行ｊ列の要素を、Ｓｉ，ｊ（０≦ｉ，ｊ≦３）と表す（図２１（ｂ））。
【０００６】
ＡＥＳの暗号化処理は非特許文献１（ＦＩＰＳ１９７，Ｆｉｇｕｒｅ５）に疑似コードで示されているが、これをフローチャート化したものを図２２に示す。図２２に示すように、ＡＥＳ暗号化では、「ラウンド（１４０３）」と呼ばれるひとまとまりの処理を繰り返すことで暗号化する。ラウンドの回数（Ｎｒ）は鍵長により決まり、鍵長が１２８，１９２，２５６ビット時のラウンドの回数はそれぞれ１０，１２，１４回である。原則としてラウンドはＳｕｂＢｙｔｅｓ（１４０４，バイト置換）、ＳｈｉｆｔＲｏｗｓ（１４０５，同一行内のシフト），ＭｉｘＣｏｌｕｍｎｓ（１４０６，同一列内の相互演算），ＡｄｄＲｏｕｎｄＫｅｙ（１４０７，拡大鍵の加算）から構成される。ただし、第１ラウンドの前にもＡｄｄＲｏｕｎｄＫｅｙがあり（１４０２）、最終ラウンド１４０８にＭｉｘＣｏｌｕｍｎｓはない。以下単に「ラウンド」と表記するときは、最終ラウンド以外のラウンドを指すこととする。
【０００７】
ラウンドを構成する各処理について説明する。ＳｕｂＢｙｔｅｓ１４０４は、ステート上の各要素を１バイト入出力の換字テーブルにより１対１に変換する処理である。８ビット２５６語の換字テーブルの内容は、非特許文献１（ＦＩＰＳ１９７，Ｆｉｇｕｒｅ７）で与えられているが、数学的には、入力値のガロア体ＧＦ（２８）上の逆数をとり、その結果にビット間の排他的論理和によるアフィン変換（非特許文献１（ＦＩＰＳ１９７，式（５．１）、または、式（５．２）））を施した結果を予め計算しておいたものである。以下、この換字テーブルを、非特許文献１（ＦＩＰＳ１９７，Ｆｉｇｕｒｅ７）のキャプションにならいＳ−ｂｏｘと記す。ＳｈｉｆｔＲｏｗｓ１４０５は、同一行内のシフト処理である。第ｉ行（０≦ｉ≦３）の４要素をｉ要素左ローテイト処理する。ＭｉｘＣｏｌｕｍｎｓ１４０６では、非特許文献１（ＦＩＰＳ１９７，式（５．６））で与えられている係数を用い、同一行内で積和演算（乗算と加算）処理を行う。ＡｄｄＲｏｕｎｄＫｅｙ１４０７は、共通鍵から生成した拡大鍵を加算する。ここで、ＭｉｘＣｏｌｕｍｎｓで用いる乗算と加算、ＡｄｄＲｏｕｎｄＫｅｙで用いる加算は、ガロア体ＧＦ（２８）上で８ビットの数値間に定義された演算を用いる。ガロア体ＧＦ（２８）上の加算はビットごとの排他的論理和で行えるため加算器はゲート数個で構成できるが、ガロア体乗算器を構成するには数十ゲート必要である。
【０００８】
ラウンドを構成する処理のうち、ＳｕｂＢｙｔｅｓ１４０４，ＳｈｉｆｔＲｏｗｓ１４０５，ＭｉｘＣｏｌｕｍｎｓ１４０６処理を高速化する従来の技術を説明する。これら３つの処理に注目するのは、ＳｕｂＢｙｔｅｓは、テーブル参照を多く含み、またＭｉｘＣｏｌｕｍｎｓは、ガロア体ＧＦ（２８）上の乗算を多く含むために実装方法によっては演算量を要求すること、またＳｈｉｆｔＲｏｗｓはＳｕｂＢｙｔｅｓと一体化して処理できることによる。一方、ＡｄｄＲｏｕｎｄＫｅｙは単純であり独立性が高いので、別に処理しても問題がない。
【０００９】
ＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓ処理を一体化したシグナルフローを図２３に示す。この図には、ステートを構成する１６要素のうち、１列分４要素のラウンド処理結果を出力するためのシグナルフローを示してある。従って、ステートの全１６要素（４列）について１ラウンド分の結果を得るには、図２３に示したのと同等の演算を、ステート上の入出力位置をシフトしながら合計４回繰り返す必要がある。なお、図２３において、ＳｕｂＢｙｔｅｓ１５０１とＳｈｉｆｔＲｏｗｓとの処理順序は入れ替えてある。ＳｕｂＢｙｔｅｓは場所を保存したまま値を変える処理、ＳｈｉｆｔＲｏｗｓは値を保存したまま場所を変える処理なので、順序を入れ替えても同一の結果が得られる。また、ＳｈｉｆｔＲｏｗｓは、ＳｕｂＢｙｔｅｓの各入力の取得位置を指定する操作で実現されている。ＭｉｘＣｏｌｕｍｎｓでは、各Ｓ−ｂｏｘ出力に個別に係数を乗算１５０２したうえで加算１５０３する。係数の値は、非特許文献１（ＦＩＰＳ１９７，式（５．６））に示された通りである。ここで、ＧＦ（２８）上の係数との乗算であることを明示するため、非特許文献１（ＦＩＰＳ１９７，４章）での記述にならい「・｛１６進数｝」と表記してある。
【００１０】
次に、ＡＥＳラウンド処理の高速ハードウェア実装手法について説明する。
【００１１】
従来の高速化手法としては、複数のＳ−ｂｏｘを用意し並列処理することが行われてきた。たとえば、非特許文献２では、同一内容のＳ−ｂｏｘを１６個用意し、ステートの全１６要素を同時に処理している。類似例では、非特許文献３でも、ＡＥＳに選定されたＲｉｊｎｄａｅｌのデータブロック長１２８ビット・モードにおいては、同一内容のＳ−ｂｏｘを１６個用意し、ステート上の全１６要素を同時に処理している。
【００１２】
さらに、並列度を上げた例として、非特許文献４がある。非特許文献４において、ＭｃＬｏｏｎｅらは、ステートの全１６要素分、かつ１２８ｂｉｔ鍵時の全１０ラウンド分のハードウェアを用意し並列処理しているが、そこから図２３に対応する１ラウンド４要素分のＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓ処理回路を抜き出したものを図２４に示す。図２４に示したように、Ｓ−ｂｏｘの内容を定数倍する代わりに予め係数倍した内容を格納したＳ−ｂｏｘを係数の種類だけ用意し、ガロア体乗算器１５０２を不要としている。具体的には、Ｓ−ｂｏｘ出力を｛０２｝，｛０３｝倍する代わりに、Ｓ−ｂｏｘをそのまま実装したテーブルに加え、Ｓ−ｂｏｘテーブル上の各値を｛０２｝，｛０３｝倍した値を格納したテーブルも用意している。
【００１３】
このように、既存のハードウェア実装ではＳ−ｂｏｘの容量を増やすことで並列度を上げ、高速化を図ってきた。
【００１４】
次に、大容量テーブルを使ったＡＥＳラウンド処理の高速ソフトウェア実装手法について説明する。
【００１５】
非特許文献５に、市販マイクロプロセッサ上のアセンブリ言語でＡＥＳを実装したソースコード例ａｅｓｃｒｙｐｔ．ａｓｍがある。ここでは、図２５に示すシグナルフロー図に従った演算が行われている。
【００１６】
この手法では、８ビット２５６語のＳ−ｂｏｘ（１５０１，１６０１）の代わりに、３２ビット２５６語の拡張Ｓ−ｂｏｘ０，拡張Ｓ−ｂｏｘ１，拡張Ｓ−ｂｏｘ２，拡張Ｓ−ｂｏｘ３を予め計算し主記憶上に保持しておく（１７０１）。テーブル中のすべての語について、拡張Ｓ−ｂｏｘ０ではビット０〜７，８〜１５，１６〜２３，２４〜３１に、同じインデックス位置のＳ−ｂｏｘテーブル値をそれぞれ｛０２｝，｛０１｝，｛０１｝，｛０３｝倍した値を格納しておく。同様にテーブル各出力の、ビット０〜７，８〜１５，１６〜２３，２４〜３１に、同じインデックス位置のＳ−ｂｏｘ値を、拡張Ｓ−ｂｏｘ１ではそれぞれ｛０３｝，｛０２｝，｛０１｝，｛０１｝倍した値を、拡張Ｓ−ｂｏｘ２ではそれぞれ｛０１｝，｛０３｝，｛０２｝，｛０１｝倍した値を、拡張Ｓ−ｂｏｘ３ではそれぞれ｛０１｝，｛０１｝，｛０３｝，｛０２｝倍した値を格納しておく。このような拡張Ｓ−ｂｏｘ０〜３を用意すれば、４回の拡張Ｓ−ｂｏｘ読み出し１７０２と、４回のＧＦ（２８）上の加算１７０３で図２３と同等のシグナルフローが実現でき、１ラウンド１列（４要素）分のＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓ処理が行える。
【００１７】
非特許文献５の方法（Ｇｌａｄｍａｎの方法）は、１個の３２ビット長レジスタに８ビット長の要素を４個パックして４並列ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）演算を行うため高速である。
【００１８】
最後に、ＡＥＳ復号化について述べる。
【００１９】
ＡＥＳ復号化は、非特許文献１（ＦＩＰＳ１９７，Ｆｉｇｕｒｅ１５）に疑似コードで示されているが、これをフローチャート化したものを図２６に示す。
【００２０】
ここで、ＩｎｖＳｕｂＢｙｔｅｓ１８０４は、ＳｕｂＢｙｔｅｓ１４０４の逆処理、ＩｎｖＳｈｉｆｔＲｏｗｓ１８０５は、ＳｈｉｆｔＲｏｗｓ１４０５の逆処理、ＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６は、ＭｉｘＣｏｌｕｍｎｓ１４０６の逆処理である。ＡｄｄＲｏｕｎｄＫｅｙ１４０７の逆処理はＡｄｄＲｏｕｎｄＫｅｙ自身であるが、区別のためＡｄｄＲｏｕｎｄＫｅｙ’１８０７と表記してある。
【００２１】
復号化は、単純に暗号化の逆処理である。ただし、図２６に示した復号化では、図２２に示した暗号化の各処理を逆順に行うだけでなく、次に述べるように処理順序の最適化を施している。まず、ＩｎｖＳｈｉｆｔＲｏｗｓ１８０５とＩｎｖＳｕｂＢｙｔｅｓ１８０４とを入れ替えている。ＩｎｖＳｈｉｆｔＲｏｗｓ１８０５は、値を保ったまま場所を変える処理であり、ＩｎｖＳｕｂＢｙｔｅｓ１８０４は、場所を保ったまま値を変える処理なので、順番を入れ替えても結果は同一である。
【００２２】
次に、ＡｄｄＲｏｕｎｄＫｅｙ’１８０７とＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６を入れ替えている。ＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６は、線形処理なので、本来、ＡｄｄＲｏｕｎｄＫｅｙ’１８０７の出力に、ＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６を施すべきところ、ＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６の出力に、ＡｄｄＲｏｕｎｄＫｅｙ’１８０７を施しても同一の結果が得られる。
【００２３】
ただし、順序を入れ替えたＡｄｄＲｏｕｎｄＫｅｙ’１８０７では、暗号化時と同じ拡大鍵ではなく、ＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６を施した拡大鍵を使う必要がある。
【００２４】
ＡＥＳ暗号化処理のフローチャート図２２と復号化処理のフローチャート図２６を比較すると、ラウンド内の処理は暗号化と復号化で良く似ていることがわかる。違いはＳｕｂＢｙｔｅｓ１４０４とＩｎｖＳｕｂＢｙｔｅｓ１８０４で用いる換字テーブルの内容とＭｉｘＣｏｌｕｍｎｓ１４０６とＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６で用いる係数である。ＩｎｖＳｕｂＢｙｔｅｓ１８０４ではＦＩＰＳ１９７，Ｆｉｇｕｒｅ１４で示されている換字テーブル（以下ＩｎｖｅｒｓｅＳ−ｂｏｘ）を、ＩｎｖＭｉｘＣｏｌｕｍｎｓ１８０６ではＦＩＰＳ１９７，式（５．１０）で与えられている係数を用いる。
【００２５】
ＡＥＳ復号化の実装を説明する。暗号化と復号化のフローチャートは似ているので、図２４に示したＭｃＬｏｏｎｅらの方法を復号化のうちＩｎｖＳｕｂＢｙｔｅｓ１８０４，ＩｎｖＳｈｉｆｔＲｏｗｓ１８０５，ＩｎｖＭｉｘＣｏｌｏｍｎｓ１８０６の高速処理に適用できる。この場合、１ラウンド１列あたりＩｎｖＳｂｏｘの内容を｛０９｝，｛０ｂ｝，｛０ｄ｝，｛０ｅ｝倍した４種類のテーブルを要素ごとに用意する、すなわち８ビット２５６語のテーブルを１列あたり１６個、１ラウンド１要素あたりに換算して４個（８Ｋビット）使用する。これらの復号化に用いるテーブルは、暗号化とは共用できない。
【００２６】
図２５に示したＧｌａｄｍａｎの方法も復号化ＩｎｖＳｕｂＢｙｔｅｓ１８０４，ＩｎｖＳｈｉｆｔＲｏｗｓ１８０５，ＩｎｖＭｉｘＣｏｌｏｍｎｓ１８０６の高速処理に適用できる。この場合、暗号化と同様、復号化でも１ラウンド１列あたり３２ビット２５６語のテーブルを４個（３２ｋビット）用意しなければならない。これらの復号化に用いるテーブルは、暗号化とは共用できない。
【００２７】
また、ガロア体上の演算器を利用する技術としては、特許文献１記載の技術がある。
【００２８】
【特許文献１】
特開２０００−３２２２８０号公報
【非特許文献１】
連邦情報処理規格（Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄｓ  Ｐｕｂｌｉｃａｔｉｏｎ）、ＦＩＰＳ１９７、（米国）
【非特許文献２】
清家秀律ほか、「ＦＰＧＡを用いたＡＥＳ暗号の試作」、電子情報通信学会技術報告、ＶＬＤ２００１−９１，ＩＣＤ２００１−３５，ＦＴＳ２００１−３８，２００１年１１月
【非特許文献３】
Ｐａｔｒｉｃｋ  Ｒ．  Ｓｃｈａｕｍｏｎｔほか、“Ｕｎｌｏｃｋｉｎｇ  ｔｈｅ  Ｄｅｓｉｇｎ  Ｓｅｃｒｅｔｓ  ｏｆ  ａ  ２．２９  Ｇｂ／ｓＲｉｊｎｄａｅｌ  Ｐｒｏｃｅｓｓｏｒ”，  Ｐｒｏｃ．  ３９ｔｈ  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ，講演番号４１．１，  Ｊｕｎｅ  ２００２
【非特許文献４】
Ｍ．  ＭｃＬｏｏｎｅほか、“Ｒｉｊｎｄａｅｌ  ＦＰＧＡ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  Ｕｔｉｌｉｚｉｎｇ  Ｌｏｏｋ−Ｕｐ  Ｔａｂｌｅｓ”，ＩＥＥＥ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｉｎｇ
Ｓｙｓｔｅｍｓ，  ２００１年，ｐ．３４９〜ｐ．３６０
【非特許文献５】
Ｂｒｉａｎ  Ｇｌａｄｍａｎ、ソフトウェア・アーカイブａｅｓｓｒｃ．ｚｉｐ、［ｏｎｌｉｎｅ］、［平成１５年１月１０日検索］、インターネット＜ｈｔｔｐ：／／ｆｐ．ｇｌａｄｍａｎ．ｐｌｕｓ．ｃｏｍ／ｃｒｙｐｔｏｇｒａｐｈｙ＿ｔｅｃｈｎｏｌｏｇｙ／ｒｉｊｎｄａｅｌ／＞
【００２９】
【発明が解決しようとする課題】
非特許文献２の方法では、暗号化のために１ラウンドあたり８ビット２５６語のテーブル１６個、計３２ｋビットを用意し、ステート上の全１６要素を同時に計算している。１ラウンド１要素あたりに換算すれば２ｋビットのテーブルを使用している。
【００３０】
非特許文献４の方法では、暗号化のために１６０１のようにステート１列あたり８ビット２５６語のテーブルを１２個（２４ｋビット）、１ラウンド１要素あたりに換算して３個（６ｋビット）使用している。復号化のためには８ビット２５６語のテーブルを１６個（３２ｋビット）、１ラウンド１要素あたりに換算して４個（８ｋビット）使用する。
【００３１】
非特許文献５の方法では、暗号化のために、３２ビット２５６語のテーブルを４個（３２ｋビット）用意する必要がある。１ラウンド１要素あたりに換算すれば、８ｋビット使用している。復号化のためにも同じく３２ビット２５６語のテーブルを４個（３２ｋビット）、１ラウンド１要素あたりに換算すれば、８ｋビットのテーブルを用意する必要がある。
【００３２】
このように、従来の技術では、処理に用いるテーブル容量を増やすことで高速化を図ってきた。しかし、テーブル容量の増加はＡＥＳ演算器のハードウェア規模の増大に直結する。たとえば、非特許文献４の方法では、ガロア体乗算器を削除する替わりに、Ｓ−ｂｏｘテーブルの個数を増やしているが、ガロア体乗算器は、数十ゲート規模で構成できるのに対し、８ビット２５６語のＳ−ｂｏｘテーブルは、数千〜１万ゲート規模もあるため、高速化の代償としてハードウェア規模が飛躍的に増えている。しかし、高速化は重要だが、ハードウェア規模が増大するのでは実用的とはいえない。
【００３３】
同様、特許文献１にも、効果的なハードウェア量削減の技術は、開示されていない。
【００３４】
本発明の目的は、処理性能を保ちつつ、Ｓ−ｂｏｘテーブル容量を削減した、小型かつコストパフォーマンスの良いＡＥＳ暗号処理装置を実現することである。
【００３５】
【課題を解決するための手段】
本発明の第１のＡＥＳ暗号処理装置は、ステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を暗号化用に変換する換字テーブルと、選択された要素の行に応じた係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を連結して累算するガロア体加算器とを有することを特徴とする。
【００３６】
本発明の第２のＡＥＳ暗号処理装置は、ＡＥＳ暗号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令を実行するＡＥＳ暗号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段とを有することを特徴とする。
【００３７】
本発明の第３のＡＥＳ暗号処理装置は、ＡＥＳ暗号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令、排他的論理和演算命令を実行するＡＥＳ暗号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段と、排他的論理和演算を実行する演算器とを有することを特徴とする。
【００３８】
本発明の第４のＡＥＳ暗号処理装置は、前記第２、または、第３のＡＥＳ暗号処理装置であって、即値部分が、第０行を指定すると、係数｛０２｝，｛０１｝，｛０１｝，｛０３｝を出力し、第１行を指定すると、係数｛０３｝，｛０２｝，｛０１｝，｛０１｝を出力し、第２行を指定すると、係数｛０１｝，｛０３｝，｛０２｝，｛０１｝を出力し、第３行を指定すると、係数｛０１｝，｛０１｝，｛０３｝，｛０２｝を出力する前記係数テーブルを有することを特徴とする。
【００３９】
本発明の第１のＡＥＳ復号処理装置は、ステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を復号化用に変換する換字テーブルと、選択された要素の行に応じた係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を連結して累算するガロア体加算器とを有することを特徴とする。
【００４０】
本発明の第２のＡＥＳ復号処理装置は、ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ復号化命令を実行するＡＥＳ復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段とを有することを特徴とする。
【００４１】
本発明の第３のＡＥＳ復号処理装置は、ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ復号化命令、排他的論理和演算命令を実行するＡＥＳ復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す選択手段と、前記選択手段により取り出された要素を変換する換字テーブルと、即値部分にしたがい４個の係数を出力する係数テーブルと、前記換字テーブルの出力と前記係数テーブルからの各係数とを乗算し、連結して出力するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段と、排他的論理和演算を実行する演算器とを有することを特徴とする。
【００４２】
本発明の第４のＡＥＳ復号処理装置は、前記第２、または、第３のＡＥＳ復号処理装置であって、即値部分が、第０行を指定すると、係数｛０ｅ｝，｛０９｝，｛０ｄ｝，｛０ｂ｝を出力し、第１行を指定すると、係数｛０ｂ｝，｛０ｅ｝，｛０９｝，｛０ｄ｝を出力し、第２行を指定すると、係数｛０ｄ｝，｛０ｂ｝，｛０ｅ｝，｛０９｝を出力し、第３行を指定すると、係数｛０９｝，｛０ｄ｝，｛０ｂ｝，｛０ｅ｝を出力する前記係数テーブルを有することを特徴とする。
【００４３】
本発明の第１のＡＥＳ暗号・復号処理装置は、ステートの１要素を取り出す第１の選択手段と、前記第１の選択手段により取り出された要素を逆アフィン変換する逆アフィン変換回路と、暗号化の場合には前記第１の選択手段の出力を選択し、復号化の場合には前記逆アフィン変換回路の出力を選択する第２の選択手段と、前記第２の選択手段の出力を暗号化・復号化用に変換する逆数換字テーブルと、前記逆数換字テーブルの出力をアフィン変換するアフィン変換回路と、暗号化の場合には前記アフィン変換回路の出力を選択し、復号化の場合には前記逆数換字テーブルの出力を選択する第３の選択手段と、選択された要素の行に応じた係数を出力する係数テーブルと、前記第３の選択手段の出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を連結して累算するガロア体加算器とを有することを特徴とする。
【００４４】
本発明の第２のＡＥＳ暗号・復号処理装置は、ＡＥＳ暗号化命令、ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令、ＡＥＳ復号化命令を実行するＡＥＳ暗号・復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す第１の選択手段と、前記第１の選択手段により取り出された要素を逆アフィン変換する逆アフィン変換回路と、暗号化の場合には前記第１の選択手段の出力を選択し、復号化の場合には前記逆アフィン変換回路の出力を選択する第２の選択手段と、前記第２の選択手段の出力を暗号化・復号化用に変換する逆数換字テーブルと、前記逆数換字テーブルの出力をアフィン変換するアフィン変換回路と、暗号化の場合には前記アフィン変換回路の出力を選択し、復号化の場合には前記逆数換字テーブルの出力を選択する第３の選択手段と、選択された要素の行に応じた係数を出力する係数テーブルと、前記第３の選択手段の出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段とを有することを特徴とする。
【００４５】
本発明の第３のＡＥＳ暗号・復号処理装置は、ＡＥＳ暗号化命令、ＡＥＳ復号化命令であることを示す部分、入力レジスタを指定する第１オペランド部分、出力レジスタを指定する第２オペランド部分、行を指定する即値部分を含むＡＥＳ暗号化命令、ＡＥＳ復号化命令を実行するＡＥＳ暗号・復号処理装置であって、第１オペランド部分、即値部分にしたがい前記入力レジスタからステートの１要素を取り出す第１の選択手段と、前記第１の選択手段により取り出された要素を逆アフィン変換する逆アフィン変換回路と、暗号化の場合には前記第１の選択手段の出力を選択し、復号化の場合には前記逆アフィン変換回路の出力を選択する第２の選択手段と、前記第２の選択手段の出力を暗号化・復号化用に変換する逆数換字テーブルと、前記逆数換字テーブルの出力をアフィン変換するアフィン変換回路と、暗号化の場合には前記アフィン変換回路の出力を選択し、復号化の場合には前記逆数換字テーブルの出力を選択する第３の選択手段と、選択された要素の行に応じた係数を出力する係数テーブルと、前記第３の選択手段の出力と前記係数テーブルからの各係数とを乗算するガロア体乗算器と、前記ガロア体乗算器の出力を第２オペランド部分で指令された出力レジスタに格納する格納手段と、排他的論理和演算を実行する演算器とを有することを特徴とする。
【００４６】
本発明の第４のＡＥＳ暗号・復号処理装置は、前記第２、または、第３のＡＥＳ暗号・復号処理装置であって、前記第１の選択手段、前記逆アフィン変換回路、前記第２の選択手段、前記逆数換字テーブル、前記アフィン変換回路、第３の選択手段を多重化し、複数列を同時に処理することを特徴とする。
【００４７】
【発明の実施の形態】
ＡＥＳでは、ガロア体（Ｇａｌｏｉｓ  ｆｉｅｌｄ，ＧＦ）上の演算を、アルゴリズムの定義に用いている。
【００４８】
まず、ＧＦ（２８）上の数について説明する。
【００４９】
一般に、ＧＦ（ｐ）上の元を係数とするｍ次の多項式は、既約多項式（ｉｒｒｅｄｕｃｉｂｌｅ  ｐｏｌｙｎｏｍｉｎａｌ）を法とする加算と乗算について体をなし、この体をＧＦ（ｐｍ）と表記する。ＧＦ（２８）上の多項式は、一般に次のように書ける。
【００５０】
ｂ７ｘ７＋ｂ６ｘ６＋ｂ５ｘ５＋ｂ４ｘ４＋ｂ３ｘ３＋ｂ２ｘ２＋ｂ１ｘ１＋ｂ０（１）。
【００５１】
ここで、ｂｉ（０≦ｉ≦７）は、ガロア体ＧＦ（２）上の要素なので、０か１である。式（１）は、係数のみ取り出し｛ｂ７ｂ６ｂ５ｂ４ｂ３ｂ２ｂ１ｂ０｝とベクトル表現でも書ける。かっこ内部を１６進表記することもある。
【００５２】
ＧＦ（２８）上には３０個余りの既約多項式があるが、ＡＥＳでは次式（２）を採用している。
【００５３】
ｍ（ｘ）＝ｘ８＋ｘ４＋ｘ３＋ｘ＋１（２）。
【００５４】
次に、ＡＥＳにおけるＧＦ（２８）上の加算について説明する。
【００５５】
ＧＦ（２８）上の加算は、ベクトル表現された数のビットごとの排他的論理和（ＸＯＲ）をとるだけでよい。すなわち、｛ａ７ａ６ａ５ａ４ａ３ａ２ａ１ａ０｝と｛ｂ７ｂ６ｂ５ｂ４ｂ３ｂ２ｂ１ｂ０｝との和｛ｃ７ｃ６ｃ５ｃ４ｃ３ｃ２ｃ１ｃ０｝は次式（３）で表される。多項式の加算は、同次数の係数どうしを加算すればよく、ＧＦ（２）上の加算は排他的論理和（ＸＯＲ）だからである。ここで、＜ＸＯＲ＞は、排他的論理和を示す。
【００５６】
ｃｉ＝ａｉ＜ＸＯＲ＞ｂｉ（０≦ｉ≦７）（３）。
【００５７】
図１３は、ガロア体ＧＦ（２８）上の加算器の例を示すブロック図である。
【００５８】
図１３を参照すると、ハードウェアによるＧＦ（２８）上の加算器は、ＸＯＲゲート８個で簡単に構成できる。通常の２進数とは異なり、桁上げ処理は不要である。
【００５９】
次に、ＡＥＳにおけるＧＦ（２８）上の乗算について説明する。
【００６０】
図１４は、ガロア体ＧＦ（２８）上の２倍回路の例を示すブロック図である。
【００６１】
乗算は、被乗数の２のべき乗倍と加算の組み合わせで実現する。まず、入力を２倍する方法を説明する。式（１）を２＝｛００００００１０｝倍することは、ｘ倍することに等しいので、次式（５）で表せる。これは、ベクトル表現を左１ｂｉｔシフトすることに等しい。
【００６２】
ｂ７ｘ８＋ｂ６ｘ７＋ｂ５ｘ６＋ｂ４ｘ５＋ｂ３ｘ４＋ｂ１ｘ３＋ｂ１ｘ２＋ｂ０ｘ１（５）。
【００６３】
次に、この式（５）を、式（２）で定義したｍ（ｘ）に対して既約にする。ｂ７＝０ならば既約であるが、ｂ７＝１の場合は既約ではないので、式（５）からｍ（ｘ）を減算する、すなわち、｛１ｂ｝＝｛０００１１０１１｝とＸＯＲする必要がある。この一連の操作は、たとえば、図１４に示した回路で行える。
【００６４】
任意の数との乗算は、部分積を発生する２倍回路とＡＮＤゲート、部分積を加算する回路の組み合わせで実現できる。
【００６５】
図１５は、ガロア体ＧＦ（２８）上のガロア体乗算器の例を示すブロック図である。
図１５において、「２×」は、図１４の２倍回路を示す。また、「ＸＯＲ」は、図１３の加算器である。実装方法にもよるが、暗号化時は｛０２｝、｛０３｝倍の回路が必要になる。復号化時は｛０９｝、｛０ｂ｝、｛０ｄ｝、｛０ｅ｝倍の回路が必要になる。
【００６６】
次に、本発明の第１の実施の形態について図面を参照して詳細に説明する。
【００６７】
図１は、本発明の第１の実施の形態の構成を示すブロック図である。
【００６８】
図１を参照すると、本発明の第１の発明の実施の形態は、入力ステート１０１と、列マルチプレクサ１０２と、演算入力レジスタ１０３と、行マルチプレクサ１０４と、Ｓ−ｂｏｘテーブル１０５と、係数テーブル１０６と、ガロア体ＧＦ（２８）上のガロア体乗算器１０７と、演算結果レジスタ１０８と、ガロア体加算器１０９と、累算レジスタ１１０とから構成されるＡＥＳ暗号化装置である。また、演算入力レジスタ１０３、行マルチプレクサ１０４、Ｓ−ｂｏｘテーブル１０５、係数テーブル１０６、ガロア体ＧＦ（２８）上のガロア体乗算器１０７、および、演算結果レジスタ１０８を含む部分をＡＥＳ暗号回路１１１とする。
【００６９】
ガロア体ＧＦ（２８）上のガロア体乗算器１０７は、図１５に示すものであり、図１５のｂ７〜ｂ０には、Ｓ−ｂｏｘテーブル１０５の出力８ビットが入力され、ａ１〜ａ０には、係数テーブル１０６の出力２ビット（たとえば、図２の行指定０の整数１の｛０１｝を示す２ビット“０１”）が接続される。ａ７〜ａ２の部分の回路は、設けなくてよい。ガロア体ＧＦ（２８）上のガロア体乗算器１０７には、図１５の乗算器が４個設けられる。
【００７０】
演算入力レジスタ１０３、演算結果レジスタ１０８は、遅延時間、パイプライン制御等を考慮したものであり、必ずしも必要はない。
【００７１】
入力ステート１０１は、Ｓ０，０〜Ｓ３，３の１６個の要素（データ）であり、それぞれの要素は、８ビットである。また、たとえば、入力ステート１０１の１列ずつが、ソフトウェア可視のレジスタに格納される。
【００７２】
列マルチプレクサ１０２は、４列ある入力ステート１０１から指定された１列４要素を選択し出力する。演算入力レジスタ１０３は、列マルチプレクサ１０２の出力である１列４要素を保持する。行マルチプレクサ１０４は、入力レジスタ１０３の４要素から指定された行にある１要素（８ビット）を選択し出力する。Ｓ−ｂｏｘテーブル１０５は、行マルチプレクサ１０４の出力（８ビット）をインデックスとして８ビットのデータを出力する。Ｓ−ｂｏｘテーブル１０５は、たとえば、２５６語×８ビットのＲＯＭ、ＲＡＭ、または、組み合わせ回路等で構成される。
【００７３】
Ｓ−ｂｏｘテーブル１０５の出力は、ＧＦ（２８）上のガロア体乗算器１０７（４個の部分乗算器を含む）に入力される。各部分乗算器には、行指定に従って、係数テーブル１０６から係数が供給され、ＧＦ（２８）上の乗算が実行される。演算結果レジスタ１０８は、ＧＦ（２８）上のガロア体乗算器１０７の出力の連結された４×８ビットのデータを格納する。ガロア体加算器１０９は、演算結果レジスタ１０８の４×８ビットの値と累算レジスタ１１０上の値とのＧＦ（２８）上の加算を実行する。累算レジスタ１１０は、ガロア体加算器１０９の出力（４×８ビット）を格納する。このようにして、ステート１列分のＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓ処理のうち１／４（１要素分）が完了する。
【００７４】
図１６は、図１のＳ−ｂｏｘテーブル１０５の内容を示す説明図である。
【００７５】
図１６を参照すると、Ｓ−ｂｏｘテーブル１０５の内容は、非特許文献１（ＦＩＰＳ１９７，Ｆｉｇｕｒｅ７）に示されているものであり、たとえば、インデックスが、｛ｂ３｝であれば、内容は、｛６ｄ｝である。
【００７６】
図２は、図１の係数テーブル１０６の内容を示す説明図である。
【００７７】
図２を参照すると、係数テーブル１０６の内容は、非特許文献１（ＦＩＰＳ１９７，式（５．６））に示される係数行列を転置したものである。
【００７８】
次に、本発明の第１の実施の形態の動作について図面を参照して詳細に説明する。
【００７９】
図３は、本発明の第１の実施の形態の動作を示す説明図である。
【００８０】
図３を参照すると、事前に累算レジスタ１１０をゼロクリアしておく（図３Ｓ３０１）。まず、第０列、第０行を処理する。列マルチプレクサ１０２はステート１０１から第０列を選択、出力する（図３Ｓ３０２）。その中から行マルチプレクサ１０４は、第０行のＳ０，０を選択、出力する（図３Ｓ３０３）。Ｓ０，０をＳ−ｂｏｘテーブル１０５により変換した結果をＳ’’０，０とする（図３Ｓ３０４）。Ｓ’’０，０を係数テーブル１０６の第０行の４個の出力と乗算し、連結して出力する（図３Ｓ３０５）。４バイト長のガロア体乗算器１０７の出力は、累算レジスタ１１０の内容に加算される（図３Ｓ３０６）。
【００８１】
同様に、第１列第１行Ｓ１，１，第２列第２行Ｓ２，２，第３列第３行Ｓ３，３も順次処理する。列マルチプレクサ１０２は、入力ステート１０１から、それぞれ、第１，２，３列を選択、出力する。その中から、行マルチプレクサ１０４は、それぞれ、第１行のＳ１，１，第２行のＳ２，２，第３行のＳ３，３を選択、出力する。Ｓ１，１，Ｓ２，２，Ｓ３，３をそれぞれＳ−ｂｏｘテーブル１０５により変換した結果をＳ’’１，１，Ｓ’’２，２，Ｓ’’３，３とし、それぞれ係数テーブル１０６の第１，２，３行の４個の出力と乗算し、連結して出力する。４バイト長のガロア体乗算器１０７の出力は、累算レジスタ１１０の内容にガロア体加算機１０９により加算される。ガロア体乗算器１０７からの第３行の出力を累算レジスタ１１０に加算し終わると、累算レジスタ１１０に、１列４要素分のＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓ結果が得られる（図３Ｓ３０７）。この得られた結果は、図２５示す非特許文献５の方法（Ｇｌａｄｍａｎの方法）の結果に等しい。
【００８２】
本発明の第１の実施の形態の特長は、図２５に示した非特許文献５（Ｇｌａｄｍａｎ）の方法における拡張Ｓ−ｂｏｘ１７０１と同等の出力を得るために必要なハードウェア量を約１／１６に削減した点にある。図２５に示した方法では、３２ビット２５６語のテーブルを４種類、計３２ｋビットのハードウェア資源が必要である。一方、図１に示した本発明の方法では、８ビット２５６語の１個のＳ−ｂｏｘテーブル１０５（計２ｋビット）とガロア体乗算器１０７とで同等の出力が得られる。
【００８３】
８ビット２５６語のＳ−ｂｏｘテーブル１０５の規模は数千〜１万ゲートあり、これと比較して１個あたり数十ゲート規模でしかないガロア体乗算器１０７のコストは無視できるため、必要なハードウェア量はＳ−ｂｏｘテーブル１０５の容量に比例するとしてよい。したがって、２ｋビットのＳ−ｂｏｘテーブル１０５を使う本発明の第１の実施の形態は、３２ｋビットのテーブルを使う非特許文献５（Ｇｌａｄｍａｎ）の方法に比べ、１／１６のハードウェア規模で同等の演算が行える効率の良い方法といえる。
【００８４】
以上、本発明の第１の実施の形態によれば、ＡＥＳ暗号化に必要なハードウェア量を大幅に削減できることを示した。その理由は、本発明の第１の実施の形態では、拡張Ｓ−ｂｏｘ１７０１の内容を全て予め計算しておく非特許文献５（Ｇｌａｄｍａｎ）の方法とは異なり、小さなＳ−ｂｏｘテーブル１０５と小規模な演算器群とを組み合わせ実行時に値を生成しているからである。
【００８５】
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【００８６】
図４は、本発明の第２の実施の形態の構成を示すブロック図である。
【００８７】
図５は、ＡＥＳ暗号化専用命令のニーモニック表記例を示す説明図である。
【００８８】
図６は、入力レジスタｒｓ、出力レジスタｒｔのデータ配置を示す説明図である。
【００８９】
図７は、ＡＥＳ暗号化命令の即値と出力との関係を示す説明図である。
【００９０】
本発明は、非特許文献５（Ｇｌａｄｍａｎ）のソフトウェア向けアルゴリズムと同等のシグナルフローを実現しているので、マイクロプロセッサのＡＥＳ暗号化専用命令により本発明を利用してＡＥＳ暗号の符号化、復号化の実行させることができる。本発明の第２の実施の形態は、マイクロプロセッサにＡＥＳ暗号化専用命令を追加し、図１に示した本発明の第１の実施の形態を演算器として利用し、ＡＥＳ暗号化処理を実施するものである。
【００９１】
図５に示すように、ＡＥＳ暗号化命令の名称は説明文中で参照する都合上、たとえば、“ＡＥＳ＿ＳＳＭ（ＡＥＳＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓ）”とする。この命令は入力レジスタｒｓ，出力レジスタｒｔ，即値ｉｍｍの３個のオペランドをとる。入力レジスタｒｓ、出力レジスタｒｔとも、３２ビット長以上あり、ステートの要素を１列分４個連結して格納できるものとする。
【００９２】
それぞれ、図６（ａ）は、入力レジスタｒｓのデータ配置を、図６（ｂ）は、出力レジスタｒｔのデータ配置を示す。図５に示す“ＡＥＳ＿ＳＳＭ”命令は、入力レジスタｒｓの即値ｉｍｍによって指定された行の１バイトをＳ−ｂｏｘテーブル１０５で変換し（Ｓ−ｂｏｘ（）と表記）、ガロア体乗算器１０７によるＧＦ（２８）上の乗算により｛０１｝，｛０２｝，または，｛０３｝倍し、図７に示す順序で連結して出力レジスタｒｔに格納する。
【００９３】
図４を参照すると、本発明の第２の実施の形態は、レジスタファイル等で構成されるソフトウェア可視の汎用レジスタｒ０〜汎用レジスタｒｎ（“ＡＥＳ＿ＳＳＭ”命令のｒｓ、ｒｔによりｒ０〜ｒｎから、入力レジスタｒｓ、出力レジスタｒｔが１つずつ指定される）を含む汎用レジスタ群４０１と、“ＡＥＳ＿ＳＳＭ”命令コード等が格納される命令バッファ４０２と、デコーダ４０３と、補助レジスタ４０４と、補助レジスタ４０５と、補助レジスタ４０６と、補助レジスタ４０７と、補助レジスタ４０８と、補助レジスタ４０９と、ＸＯＲの演算が可能な汎用演算回路４１０と、演算結果レジスタ４１１と、書き込みマルチプレクサ４１２と、行マルチプレクサ１０４と、Ｓ−ｂｏｘテーブル１０５と、係数テーブル１０６と、ガロア体乗算器１０７と、演算結果レジスタ１０８とから構成される。
【００９４】
点線で囲まれた部分が、図１のＡＥＳ暗号回路１１１にほほ相当する。補助レジスタ４０４、補助レジスタ４０５、補助レジスタ４０６、補助レジスタ４０７、補助レジスタ４０８、補助レジスタ４０９、演算結果レジスタ４１１、演算結果レジスタ１０８は、パイプライン制御のために設けたものであり、必ずしも必要ない。
【００９５】
それぞれ３２ビットであり、入力ステート１０１の１列、ＡＥＳ暗号化命令の結果が格納される。また、汎用レジスタｒ０〜汎用レジスタｒｎは、入力レジスタｒｓ、出力レジスタｒｔに割り当てられる。
【００９６】
次に、本発明の実施の第２の形態の動作について図面を参照して説明する。
【００９７】
図４を参照すると、命令バッファ４０２に格納されたＡＥＳ暗号化命令がデコーダ４０３でデコードされ、ｒｓにより、汎用レジスタ群４０１から処理される列の格納されている入力レジスタｒｓの１列４バイトのデータが選択され行マルチプレクサ１０４に入力される。行マルチプレクサ１０４では、デコーダ４０３からのｉｍｍ（行指定）にしたがって１列４バイトから１バイトのデータが選択され、補助レジスタ４０４に格納される。また、ｉｍｍは、補助レジスタ４０５に格納される。
【００９８】
Ｓ−ｂｏｘテーブル１０５では、補助レジスタ４０４からの１バイトのデータにしたがい１バイトのデータが出力され、補助レジスタ４０７に格納される。係数テーブル１０６では、補助レジスタ４０５からの行指定にしたがい図２に示す２ビット×４ビット、合計８ビットの係数が出力され、補助レジスタ４０６に格納される。
【００９９】
ガロア体乗算器１０７では、補助レジスタ４０７からの１バイトのデータと補助レジスタ４０６からの係数との乗算が実行され、８ビット×４の乗算結果が演算結果レジスタ１０８に格納される。演算結果レジスタ１０８内の８ビット×４の乗算結果は、書き込みマルチプレクサ４１２で選択され、デコーダ４０３からのｒｔにしたがい汎用レジスタ群４０１の出力レジスタｒｔに格納される。
【０１００】
図８は、ＡＥＳ＿ＳＳＭ命令を用い、ＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓを実現する命令列を示す説明図である。
【０１０１】
ここで、入力ステート１０１は、事前に、汎用レジスタ群４０１の汎用レジスタに１列ずつ格納されているとする。すなわち、レジスタｒ３にＳ３，３，Ｓ２，３，Ｓ１，３，Ｓ０，３が、レジスタｒ２にＳ３，２，Ｓ２，２，Ｓ１，２，Ｓ０，２が、レジスタｒ１にＳ３，１，Ｓ２，１，Ｓ１，１，Ｓ０，１が、レジスタｒ０にＳ３，０，Ｓ２，０，Ｓ１，０，Ｓ０，０が、この順に上位バイトから下位バイトに向かって格納されているとする。図８において、ビットごとの排他的論理和演算命令をＸＯＲと表記する。このとき、１ラウンド１列分のＳｕｂＢｙｔｅｓ，ＳｈｉｆｔＲｏｗｓ，ＭｉｘＣｏｌｕｍｎｓ処理は、図８に示す命令列で処理できる。図１と比較すると、列マルチプレクサ１０２に対する入力ステート１０１の列の指定をその列を収めたレジスタ番号の指定に、ガロア体加算器１０９を排他的論理和演算命令に置き換えることにより、図１と同等のシグナルフローを実現している。
【０１０２】
ＡＥＳ命令と同様、排他的論理和演算命令は、命令バッファ４０２からデコーダ４０３でデコードされ、汎用レジスタ群４０１の２つの汎用レジスタからそれぞれ４バイトのデータが読み出され、補助レジスタ４０８、補助レジスタ４０９に格納される。汎用演算回路４１０で、補助レジスタ４０８と補助レジスタ４０９からのデータの排他的論理輪演算が実施され、排他的論理輪演算結果の４バイトのデータが演算結果レジスタ４１１に格納される。
【０１０３】
演算結果レジスタ４１１内の４バイトの排他的論理輪演算結果は、書き込みマルチプレクサ４１２で選択され、デコーダ４０３から出力にしたがい汎用レジスタ群４０１の１つの出力レジスタｒｔに格納される。
【０１０４】
図５に示したＡＥＳ専用命令を導入すれば、ＡＥＳ暗号化処理は、１ラウンド１列あたり、図８に示した７命令で処理できる。すなわち、入力ステート１０１全体（４列）を処理しても１ラウンドあたり２８命令で済む。たとえば１２８ビット鍵時に必要な全１０ラウンド分の処理を、これまで説明を省いたＡｄｄＲｏｕｎｄＫｅｙ１４０７を含めて行っても計３００命令程度で済む。従来の非特許文献５（Ｇｌａｄｍａｎの方法）と比較すると、本発明の第２の実施の形態によれば、Ｓ−ｂｏｘテーブル１０５の容量を１／１６と削減しながら、同等の処理速度が達成できる。
【０１０５】
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。
【０１０６】
図９は、本発明の第３の実施の形態で使用する係数テーブル１０６の内容を示す説明図である。
【０１０７】
図１０は、ＡＥＳ複号化命令の即値と出力との関係を示す説明図である。
【０１０８】
図１７は、ＩｎｖｅｒｓｅＳ−ｂｏｘの内容を示す説明図である。
【０１０９】
本発明の第３の実施の形態は、ＡＥＳ復号化に関するものである。これらは、図１〜図８で説明したＡＥＳ暗号化処理装置、およびＡＥＳ暗号化命令と同様に構成できる。
【０１１０】
ＡＥＳ復号化装置は、図１の係数テーブル１０６の内容を、非特許文献１（ＦＩＰＳ１９７，式（５．１０））の係数行列を転置したもの（図９）に変更し、Ｓ−ｂｏｘテーブル１０５の内容を非特許文献１（ＦＩＰＳ１９７，Ｆｉｇｕｒｅ１４）に示されたＩｎｖｅｒｓｅＳ−ｂｏｘに変更したもの（図１７）である。この変更にともない、ＡＥＳ暗号化装置では係数テーブル１０６の出力が２ビット×４組であったのに対し、ＡＥＳ復号化装置では係数テーブル１０６の出力が４ビット×４組になるので、ガロア体乗算器１０７の各部分乗算器は、８×４ビット構成とする必要もある。
【０１１１】
ＡＥＳ復号化命令は、図４のうち係数テーブル１０６の内容を図９に示した非特許文献１（ＦＩＰＳ１９７，式（５．１０））の係数行列を転置したものに変更し、Ｓ−ｂｏｘの内容を非特許文献１（ＦＩＰＳ１９７，Ｆｉｇｕｒｅ１４）に示されたＩｎｖｅｒｓｅＳ−ｂｏｘに変更したものである。この変更にともない、係数テーブル１０６の出力が４ビット×４組になるので、ガロア体乗算器１０７を各８×４ビット構成とする必要もある。ＡＥＳ復号化命令の入出力関係を図１０に示す。ここでＩｎｖＳ−ｂｏｘ（）はＩｎｖｅｒｓｅＳ−ｂｏｘテーブルによる換字を表す。
【０１１２】
次に、本発明の第４の実施の形態について図面を参照して詳細に説明する。
【０１１３】
図１１は、本発明の第４の実施の形態の構成を示すブロック図である。
【０１１４】
ＡＥＳ暗号化装置とＡＥＳ復号化装置は、Ｓ−ｂｏｘおよび係数テーブルの内容が異なり、ガロア体乗算器１０７のビット幅が異なるだけなので、ＡＥＳ暗号化と復号化の両方が行える装置が容易に構成できる。また、ＡＥＳ暗号化と復号化の両方が行えるＡＥＳ暗号化・復号化統合命令も容易に構成できる。
【０１１５】
図１１を参照すると、本発明の第４の実施の形態は、図４に示したＡＥＳ暗号化命令のための演算器と、図９，図１０を参照して説明したＡＥＳ復号化命令のための演算器を統合し、ＡＥＳ暗号化と復号化の双方に対応させた演算器である。詳細には、逆アフィン変換回路１１０１と、暗号化マルチプレクサ１１０２と、逆数テーブル１１０３と、アフィン変換回路１１０４と、暗号化マルチプレクサ１１０５と、行マルチプレクサ１０４と、係数テーブル１０６と、ガロア体乗算器１０７と、演算結果レジスタ１０８とから構成される。
【０１１６】
図１８は、逆アフィン変換回路１１０１の内容を示す説明図である。
【０１１７】
図１８を参照すると、０≦ｉ≦７であり、ｂｉは、入力バイトの第ｉビット、Ｃｉは、｛０５｝の第ｉビットであり、ｂ’ｉは、出力の第ｉビットである。＜ＸＯＲ＞は、排他的論理和である。
【０１１８】
図１９は、逆数テーブル１１０３の内容を示す説明図である。
【０１１９】
図２０は、アフィン変換回路１１０４の内容を示す説明図である。
【０１２０】
図２０を参照すると、０≦ｉ≦７であり、ｂｉは、入力バイトの第ｉビット、Ｃｉは、｛６３｝の第ｉビットであり、ｂ’ｉは、出力の第ｉビットである。＜ＸＯＲ＞は、排他的論理和である。
【０１２１】
非特許文献１（ＦＩＰＳ１９７，５．１．１節）に記述されているように、暗号化で用いるＳ−ｂｏｘテーブル１０５は入力値のＧＦ（２８）上の逆数に、非特許文献１（ＦＩＰＳ１９７，式（５．１））に示されるアフィン変換を施したものである。また、復号化で用いるＩｎｖｅｒｓｅＳ−ｂｏｘテーブルは、Ｓ−ｂｏｘテーブル１０５の逆関数なので、入力値に、非特許文献１（ＦＩＰＳ１９７，式（５．１））に示されるアフィン変換の逆変換（以下「逆アフィン変換」）を施した後、ＧＦ（２８）上の逆数をとったものである。したがって、逆数テーブル１１０３を１個用意し、暗号化時においては、逆数テーブル１１０３の出力にアフィン変換回路１１０４による変換を施してＳ−ｂｏｘテーブル１０５と同等の出力を得ることが可能であり、復号化時においては、逆数テーブル１１０３の入力に逆アフィン変換回路１１０１による変換を施してＩｎｖｅｒｓｅＳ−ｂｏｘテーブルと同等の出力を得ることが可能である。
【０１２２】
暗号化と復号化の切り替えは、命令語の即値（ｉｍｍ）を１ビット増やして指定することで行える。このビットにしたがい、暗号化マルチプレクサ１１０２、暗号化マルチプレクサ１１０５により、暗号化時は逆数テーブル１１０３の出力にアフィン変換を、復号化時は、逆数テーブル１１０３の入力に逆アフィン変換を施す。また、このビットは係数テーブル１０６の出力を、暗号化時は図２に示した内容を、復号化時は図９に示した内容を出力するよう切り替える。
【０１２３】
以上、図１１を参照しながら、ＡＥＳ暗号化および復号化で共用できる演算器を構成するため、図１、または、図４に施した変更点を説明した。図１１に示す本発明の第４の実施の形態によれば、８ビット×２５６ワード（２ｋビット）のテーブル１個で、ＡＥＳ暗号化または復号化を４並列で処理できる。
【０１２４】
従来の技術で説明した非特許文献５（Ｇｌａｄｍａｎの方法）では、暗号化のために３２ｋビットのテーブルを用意する必要があったが、このテーブルは復号化とは共用できず、復号化用にも別に３２ｋビットのテーブルを用意する必要がある。すなわち、非特許文献５（Ｇｌａｄｍａｎの方法）により暗号化と復号化を行おうとすると、計６４ｋビットのテーブルを用意する必要がある。
【０１２５】
一方、本発明の第４の実施の形態では、同等の演算を２ｋビットのテーブルで行うため、必要なテーブル容量を１／３２まで削減できる。
【０１２６】
次に、本発明の第２〜第４の実施の形態で説明したＡＥＳ暗号化・復号化命令のバリエーションについて説明する。
【０１２７】
ＡＥＳ暗号化命令では、図４において、即値が、行マルチプレクサ１０４、および、係数テーブル１０６に対し処理対象となる行番号そのものを指定するとしたが、４種類の出力を区別できるなら、図７に示した即値のビットパターンに縛られるものではない。同様の議論はＡＥＳ復号化命令、ＡＥＳ暗号化・復号化統合命令にも適用可能である。
【０１２８】
ＡＥＳ暗号化命令が演算対象とする要素のレジスタ上のバイト位置を指定するため、図４では、ＡＥＳ暗号化命令の引数に即値を与えるとしたが、その代わりに命令コードの一部を用いて選択すべき行を指定することもできる。言い換えれば、扱う行別に４種類の命令を用意し、入力レジスタ番号と出力レジスタ番号のみを引数に与えてもよい。同様の議論は、ＡＥＳ復号化命令、ＡＥＳ暗号化・復号化統合命令にも適用可能である。
【０１２９】
図５に示したＡＥＳ暗号化命令では、ロード・ストア・アーキテクチャのマイクロプロセッサを想定したため、入出力データはレジスタファイルで構成される汎用レジスタに置き、命令の引数にレジスタ番号を指定するとしたが、演算の入出力データの片方、または、両方をメモリ上に置けるマイクロプロセッサを想定し、専用命令の引数に何らかのメモリ・アドレス指定を取るよう変更しても、本発明の第２の実施例の本質に影響を与えないため、同様の効果が得られる。同様の議論はＡＥＳ復号化命令、ＡＥＳ暗号化・復号化統合命令にも適用可能である。
【０１３０】
図８で示したように、ＡＥＳ暗号化命令の出力に対しＸＯＲ命令を発行することが多い。したがって、図４では、ＡＥＳ暗号化命令が、ガロア体乗算器１０７出力と同等の結果を生成するとしたが、累算レジスタ（図８のｒ５）も入力に取る３レジスタ命令とし、図１のガロア体加算器１０９出力と同等の結果を生成するよう変更し、高速化を図ることもできる。同様の議論はＡＥＳ復号化命令、ＡＥＳ暗号化・復号化統合命令にも適用可能である。
【０１３１】
図６に示したように、ＡＥＳ暗号化命令、ＡＥＳ復号化命令、ＡＥＳ暗号化・復号化統合命令では、現在、一般的なレジスタ幅が３２ビットのマイクロプロセッサを想定したが、レジスタ幅が３２ビットよりも広いマイクロプロセッサでも、レジスタの下位３２ビットのみ使用することで同様の命令を導入することができる。
【０１３２】
次に、本発明の第５の実施の形態について図面を参照して詳細に説明する。
【０１３３】
図１２は、本発明の第５の実施の形態の構成を示すブロック図である。
【０１３４】
本発明の第５の実施の形態では、６４ビット・レジスタを持つマイクロプロセッサに適用され、暗号化・復号化演算器を２重化し、レジスタの上位と下位で同時に演算することで、性能を約２倍にできる。
【０１３５】
図１２において、６４ビット長の入力レジスタ１２０１（汎用レジスタに割り当てられる）は、ｂｉ０〜ｂｉ７までの８要素を保持する。図１１の構成をＡＥＳ処理命令向けの演算器コアとして多重化し（演算器コア１２０２，演算器コア１２０３）、上位４要素をひとつの演算器コア１２０２へ、下位４要素をもうひとつの演算器コア１２０３へ入力する。演算器コア１２０２、演算器コア１２０３の出力は連結され、６４ビット長の出力レジスタ１２０４（汎用レジスタに割り当てられる）へ格納される。
【０１３６】
係数テーブル１０６と、行、暗号化・復号化を指定する即値とは、演算器コア１２０２、演算器コア１２０３で共用できる。６４ビットより幅広のレジスタを持つマイクロプロセッサでも、同様の演算器コア多重化による性能拡張が可能である。入力レジスタ１２０１に置く複数のステートの列は、同一ステート内の異なる列でもよいし、別のステートの列でも構わない。
【０１３７】
【発明の効果】
本発明の効果は、ＡＥＳ暗号化および復号化に必要なテーブル容量を従来に比べ削減できることである。たとえば、非特許文献５（Ｇｌａｄｍａｎの方法）では、暗号化と復号化を併せると６４ｋビットのテーブルを必要としていた。
【０１３８】
本発明では、２ｋビットのテーブル１個で暗号化、復号化の双方に対応しており、必要テーブル容量を１／３２に削減できる。これはＡＥＳ専用のアクセラレータや、マイクロプロセッサに専用ＡＥＳ命令を実装するための演算器が小面積で構成できることを示している。
【０１３９】
さらに、マイクロプロセッサに本発明のＡＥＳ演算器コアを使ったＡＥＳ処理専用命令を導入すれば外部メモリに置くＳ−ｂｏｘテーブルは不要になる。
【０１４０】
従って組み込み機器など外部メモリ容量に制限がある場合でもＡＥＳ暗号化機能を組み込めるようになるという利点がある。外部メモリ容量に強い制限のないハイエンド機器においても、メモリ上のテーブルをアクセスする替わりに、ＡＥＳ処理専用命令を使えば、キャッシュ汚染を防ぎ高速化につながるという利点がある。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態の構成を示すブロック図である。
【図２】図１の係数テーブルの内容を示す説明図である。
【図３】本発明の第１の実施の形態の動作を示す説明図である。
【図４】本発明の第２の実施の形態の構成を示すブロック図である。
【図５】ＡＥＳ暗号化専用命令のニーモニック表記例を示す説明図である。
【図６】入力レジスタ、出力レジスタのデータ配置を示す説明図である。
【図７】ＡＥＳ暗号化命令の即値と出力との関係を示す説明図である。
【図８】ＡＥＳ＿ＳＳＭ命令を含む命令列を示す説明図である。
【図９】本発明の第３の実施の形態で使用する係数テーブルの内容を示す説明図である。
【図１０】ＡＥＳ複号化命令の即値と出力との関係を示す説明図である。
【図１１】本発明の第４の実施の形態の構成を示すブロック図である。
【図１２】本発明の第５の実施の形態の構成を示すブロック図である。
【図１３】ＧＦ（２８）上の加算器の例を示すブロック図である。
【図１４】ＧＦ（２８）上の２倍回路の例を示すブロック図である。
【図１５】ＧＦ（２８）上のガロア体乗算器の例を示すブロック図である。
【図１６】図１のＳ−ｂｏｘテーブルの内容を示す説明図である。
【図１７】ＩｎｖｅｒｓｅＳ−ｂｏｘの内容を示す説明図である。
【図１８】逆アフィン変換回路の内容を示す説明図である。
【図１９】逆数テーブルの内容を示す説明図である。
【図２０】アフィン変換回路の内容を示す説明図である。
【図２１】ＡＥＳ暗号のデータ構造であるステートを示す説明図である。
【図２２】ＡＥＳ暗号化の手順を示すフローチャートである。
【図２３】ＡＥＳ暗号化のラウンド処理の一部を示すシグナルフローである。
【図２４】従来の非特許文献４（ＭｃＬｏｏｎｅら）の高速化手法を示すシグナルフローである。
【図２５】非特許文献５の高速化手法を示すシグナルフローである。
【図２６】ＡＥＳ復号化の手順を示すフローチャートである。
【符号の説明】
１０１    入力ステート
１０２    列マルチプレクサ
１０３    演算入力レジスタ
１０４    行マルチプレクサ
１０５    Ｓ−ｂｏｘテーブル
１０６    係数テーブル
１０７    ガロア体乗算器
１０８    演算結果レジスタ
１０９    ガロア体加算器
１１０    累算レジスタ
１１１    ＡＥＳ暗号回路
４０１    汎用レジスタ群
４０２    命令バッファ
４０３    デコーダ
４０４    補助レジスタ
４０５    補助レジスタ
４０６    補助レジスタ
４０７    補助レジスタ
４０８    補助レジスタ
４０９    補助レジスタ
４１０    汎用演算回路
４１１    演算結果レジスタ
４１２    書き込みマルチプレクサ
１１０１    逆アフィン変換回路
１１０２    暗号化マルチプレクサ
１１０３    逆数テーブル
１１０４    アフィン変換回路
１１０５    暗号化マルチプレクサ
１２０１    入力レジスタ
１２０２    演算器コア
１２０３    演算器コア
１２０４    出力レジスタ
【図１】
2004233427.tif 000003
【図２】
2004233427.tif 000004
【図３】
2004233427.tif 000005
【図４】
2004233427.tif 000006
【図５】
2004233427.tif 000007
【図６】
2004233427.tif 000008
【図７】
2004233427.tif 000009
【図８】
2004233427.tif 000010
【図９】
2004233427.tif 000011
【図１０】
2004233427.tif 000012
【図１１】
2004233427.tif 000013
【図１２】
2004233427.tif 000014
【図１３】
2004233427.tif 000015
【図１４】
2004233427.tif 000016
【図１５】
2004233427.tif 000017
【図１６】
2004233427.tif 000018
【図１７】
2004233427.tif 000019
【図１８】
2004233427.tif 000020
【図１９】
2004233427.tif 000021
【図２０】
2004233427.tif 000022
【図２１】
2004233427.tif 000023
【図２２】
2004233427.tif 000024
【図２３】
2004233427.tif 000025
【図２４】
2004233427.tif 000026
【図２５】
2004233427.tif 000027
【図２６】
2004233427.tif 000028