(57)【要約】【課題】擬似乱数生成器ＭＵＧＩとハッシュ関数Ｌｅｓａｍｎｔａの処理速度を向上する。【解決手段】本発明の擬似乱数生成器ＭＵＧＩの暗号アルゴリズムの計算方法及び装置であって、１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の第１の計算と、第１の計算の前後にバイト単位でデータを並べ替える第２の計算とを含み、擬似乱数発生器ＭＵＧＩの２つのＦ関数の計算を、第１の計算において、並列に計算する。具体的には、２つのＦ関数の並列計算は、２つの関数への入力データを第１の計算過程への２つの１２８ビット入力データに並べ替え、２つの１２８ビット入力データのビット単位の排他的論理和を計算し、排他的論理和結果に対して第１の計算を実行し、第１の計算の実行結果に対してバイト単位の置換変換を実行する。【選択図】図２
2011085739.tif 000002
【特許請求の範囲】
【請求項１】
擬似乱数生成器の暗号アルゴリズムの計算方法であって、
１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の第１の計算過程と、
前記第１の計算過程の前後にバイト単位でデータを並べ替える第２の計算過程とを含み、
前記擬似乱数生成器の２つのＦ関数の計算を、前記第１の計算過程において、並列に計算することを特徴とする暗号アルゴリズムの計算方法。
【請求項２】
前記２つのＦ関数の並列計算は、２つの前記Ｆ関数への入力データを前記第１の計算過程への２つの１２８ビット入力データに並べ替え、前記２つの１２８ビット入力データのビット単位の排他的論理和を計算し、前記排他的論理和結果に対して前記第１の計算過程を実行し、前記第１の計算過程の実行結果に対してバイト単位の置換変換を実行することを特徴とする請求項１に記載の暗号アルゴリズムの計算方法。
【請求項３】
２５６ｂｉｔ長のハッシュ値を計算するハッシュ関数であるＬｅｓａｍｎｔａの暗号アルゴリズムの計算方法であって、
１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の第１の計算過程と、
前記第１の計算過程の前後にバイト単位でデータを並べ替える第２の計算過程とを含み、
前記ハッシュ関数ＬｅｓａｍｎｔａのＢｙｔｅ Ｔｒａｎｓｐｏｓｅ関数の計算を、前記第２の計算過程との合成関数で計算することを特徴とするハッシュ関数Ｌｅｓａｍｎｔａの暗号アルゴリズムの計算方法。
【請求項４】
前記ハッシュ関数Ｌｅｓａｍｎｔａのラウンド鍵を生成する処理において、
初期入力データを前記第１の計算過程への入力データとして並べ替え、
並べ替えた前記入力データに対して、ビット単位の第１の排他的論理和を計算し、
前記第１の排他的論理和結果に対して、前記第１の計算過程を実行し、
前記第１の計算過程を実行結果から、出力データを選択し、
前記ハッシュ関数Ｌｅｓａｍｎｔａのデータを圧縮する処理において、
初期入力データを前記第１の計算過程への第１の入力データとして並べ替え、
選択した前記出力データを前記第１の計算過程への第２の入力データとして並べ替え、
前記第１の入力データと前記第２の入力データとのビット単位の第２の排他的論理和を計算し、
前記第２の排他的論理和結果に対して、前記第１の計算過程を実行し、
前記第１の計算過程を実行結果を前記第１の入力データとして並べ替えて、前記第２の排他的論理和の計算と前記第２の排他的論理和結果に対する前記第１の計算過程の実行を繰り返すことを特徴とするハッシュ関数Ｌｅｓａｍｎｔａの暗号アルゴリズムの計算方法。
【請求項５】
入力値に対する擬似乱数生成器の処理結果を出力する暗号アルゴリズムの計算装置であって、
１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の第１の計算手段と、
前記第１の計算手段の動作の前後にバイト単位でデータを並べ替える第２の計算手段とを含み、
前記擬似乱数生成器の２つのＦ関数の計算を、前記第１の計算手段により並列に計算する手段を有することを特徴とする暗号アルゴリズムの計算装置。
【請求項６】
前記２つのＦ関数を並列計算する手段は、２つの前記Ｆ関数への入力データを前記第１の計算手段への２つの１２８ビット入力データに並べ替える手段、前記２つの１２８ビット入力データのビット単位の排他的論理和を計算する手段、前記排他的論理和結果に対して前記第１の計算過程を実行する手段、および、前記第１の計算手段の実行結果に対してバイト単位の置換変換を実行する手段を含むことを特徴とする請求項５に記載の暗号アルゴリズムの計算装置。
【請求項７】
２５６ｂｉｔ長のハッシュ値を計算するハッシュ関数であるＬｅｓａｍｎｔａの暗号アルゴリズムの計算装置であって、
１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の第１の計算手段と、
前記第１の計算手段の動作の前後にバイト単位でデータを並べ替える第２の計算手段とを含み、
前記ハッシュ関数ＬｅｓａｍｎｔａのＢｙｔｅ Ｔｒａｎｓｐｏｓｅ関数の計算を、前記第２の計算手段との合成関数で計算する手段を有することを特徴とするハッシュ関数Ｌｅｓａｍｎｔａの暗号アルゴリズムの計算装置。
【請求項８】
前記ハッシュ関数Ｌｅｓａｍｎｔａのラウンド鍵を生成する手段が、
初期入力データを前記第１の計算過程への入力データとして並べ替える手段、
並べ替えた前記入力データに対して、ビット単位の第１の排他的論理和を計算する手段、及び、
前記第１の排他的論理和結果に対して前記第１の計算手段を動作させ、前記第１の計算手段の実行結果から、出力データを選択する手段を有し、並びに、
前記ハッシュ関数Ｌｅｓａｍｎｔａのデータを圧縮する手段が、
初期入力データを前記第１の計算手段への第１の入力データとして並べ替える手段、
選択した前記出力データを前記第１の計算手段への第２の入力データとして並べ替える手段、
前記第１の入力データと前記第２の入力データとのビット単位の第２の排他的論理和を計算する手段、及び、
前記第２の排他的論理和結果に対して前記第１の計算手段を動作させ、前記第１の計算手段の実行結果を前記第１の入力データとして並べ替えて、前記第２の排他的論理和の計算手段と前記第２の排他的論理和結果に対する前記第１の計算手段の動作を繰り返す手段を有することを特徴とするハッシュ関数Ｌｅｓａｍｎｔａの暗号アルゴリズムの計算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号アルゴリズムを高速にソフトウェア処理する技術に関する。
【背景技術】
【０００２】
情報の秘匿を目的として、平文データから推測が困難な暗号文データを生成する暗号アルゴリズムが用いられる。暗号アルゴリズムの実装は各種の形態で実現されているが、ソフトウェアでの暗号機能の実現に着目すると、通常、ソフトウェアが実行されるＣＰＵの持つ汎用命令の組み合わせで実現される。暗号アルゴリズムは一般的に複雑な処理であることから、実現に必要な汎用命令数が多く、その結果として、処理速度が上がらないという問題がある。この問題を解決するため、Ｉｎｔｅｌ社（登録商標）は、暗号機能の一つであるＡＥＳ（Advanced Encryption Standard）の処理に特化した専用命令(以下、ＡＥＳ命令)をＣＰＵの命令セットに追加する技術を公開している(非特許文献１)。これにより、Ｉｎｔｅｌ社のＣＰＵ上でのＡＥＳのソフトウェア処理性能の大きな向上の実現が見込まれている。
【０００３】
又、このＩｎｔｅｌ社のＣＰＵに搭載されるＡＥＳ命令を利用することで、ＡＥＳだけでなく、ＡＥＳの構成要素の一部を、その内部構成要素として利用した「ＡＥＳ型ラウンド関数を利用した暗号アルゴリズム」の処理速度を向上させる技術が公開されている(非特許文献２)。
【０００４】
非特許文献１では、幾つかの「ＡＥＳ型ラウンド関数を利用した暗号アルゴリズム」を取り上げ、各「ＡＥＳ型ラウンド関数を利用した暗号アルゴリズム」の内部処理の内、ＡＥＳ命令を直接適用できる内部処理に対してＡＥＳ命令を適用することでＩｎｔｅｌのＣＰＵ上での、「ＡＥＳ型ラウンド関数を利用した暗号アルゴリズム」のソフトウェア処理性能の向上が実現されるとしている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】S.Gueron “Intel (R)’s Advanced Encryption Standard (AES) Instructions Set" 2009年4月
【非特許文献２】R.Benadjila, O.Billet, S.Gueron,and M.J.B.Robshaw “The Intel AES Instructions Set and the SHA-3 Candidates” 2009年6月15日
【発明の概要】
【発明が解決しようとする課題】
【０００６】
非特許文献２の技術を用いることで、例えば、ハッシュ関数Ｌｅｓａｍｎｔａ(S.Hirose, H.Kuwakado, H.Yoshida “SHA-3 Proposal: Lesamnta” 2009年1月15日参照)のソフトウェア処理性能の向上が見込まれる。
【０００７】
しかし、非特許文献１では、ＡＥＳ命令を直接適用できることを前提としており、擬似乱数生成器ＭＵＧＩ(登録商標、特開2003-37482参照、擬似乱数生成アルゴリズムMUGIを用いた擬似乱数生成器を、本明細書では擬似乱数生成器ＭＵＧＩと呼ぶ。)のようなＡＥＳ命令を直接適用できないソフトウェア処理手順については言及されていない。
【０００８】
また、Ｌｅｓａｍｎｔａ(登録商標)のアルゴリズムは、ＡＥＳと異なることから、ＡＥＳ命令では処理が困難な処理も含んでいる。したがって、非特許文献１の技術では、ＡＥＳ命令では困難な処理の処理速度向上が不十分である。
【課題を解決するための手段】
【０００９】
本発明は上記の課題に鑑みてなされたものであり、以下のような擬似乱数生成器ＭＵＧＩとハッシュ関数Ｌｅｓａｍｎｔａの暗号アルゴリズムの計算方法及び装置を提供する。
【００１０】
本発明の態様は、擬似乱数生成器ＭＵＧＩの暗号アルゴリズムの計算方法及び装置であって、１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の第１の計算と、第１の計算の前後にバイト単位でデータを並べ替える第２の計算とを含み、擬似乱数生成器ＭＵＧＩの２つのＦ関数の計算を、第１の計算において、並列に計算する。
【００１１】
本発明の具体的な態様は、２つのＦ関数の並列計算は、２つの関数への入力データを第１の計算過程への２つの１２８ビット入力データに並べ替え、２つの１２８ビット入力データのビット単位の排他的論理和を計算し、排他的論理和結果に対して第１の計算を実行し、第１の計算の実行結果に対してバイト単位の置換変換を実行する。
【００１２】
本発明の他の態様は、２５６ｂｉｔ長のハッシュ値を計算するハッシュ関数であるＬｅｓａｍｎｔａの暗号アルゴリズムの計算方法及び装置であって、１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の第１の計算と、第１の計算の前後にバイト単位でデータを並べ替える第２の計算とを含み、ハッシュ関数ＬｅｓａｍｎｔａのＢｙｔｅ Ｔｒａｎｓｐｏｓｅ関数の計算を、第２の計算との合成関数で計算する。
【００１３】
本発明の他の具体的な態様は、ハッシュ関数Ｌｅｓａｍｎｔａのラウンド鍵を生成する処理において、初期入力データを第１の計算への入力データとして並べ替え、並べ替えた入力データに対して、ビット単位の第１の排他的論理和を計算し、第１の排他的論理和結果に対して、第１の計算過程を実行し、第１の計算過程を実行結果から、出力データを選択し、ハッシュ関数Ｌｅｓａｍｎｔａのデータを圧縮する処理において、初期入力データを第１の計算過程への第１の入力データとして並べ替え、選択した出力データを第１の計算への第２の入力データとして並べ替え、第１の入力データと第２の入力データとのビット単位の第２の排他的論理和を計算し、第２の排他的論理和結果に対して、第１の計算過程を実行し、第１の計算過程を実行結果を第１の入力データとして並べ替えて、第２の排他的論理和の計算と第２の排他的論理和結果に対する第１の計算過程の実行を繰り返す。
【発明の効果】
【００１４】
本発明によれば、擬似乱数生成器ＭＵＧＩとハッシュ関数Ｌｅｓａｍｎｔａのいずれにおいても、ＡＥＳ命令を利用した処理速度の向上が可能な、暗号アルゴリズムの計算方法と装置を提供できる。
【図面の簡単な説明】
【００１５】
【図１】実施例１の擬似乱数生成器ＭＵＧＩのアルゴリズムの構成図である。
【図２】実施例１の鍵ストリーム生成ユニットの構成図である。
【図３】実施例１の鍵ストリーム生成ユニットの処理フローチャートである。
【図４】実施例２のハッシュ関数Ｌｅｓａｍｎｔａの暗号アルゴリズムの構成図である。
【図５】実施例２のハッシュラウンド処理ユニットの構成図である。
【図６】実施例１の鍵ストリーム生成部の構成図である。
【図７】実施例２のラウンド鍵生成部の構成図である。
【図８】実施例２のラウンド鍵前処理ユニットの構成図である。
【図９】実施例２のデータ圧縮処理ユニットの構成図である。
【図１０】実施例２のデータ圧縮処理ユニットの処理フローチャートである。
【図１１】実施例２のデータ撹拌処理ユニットの構成図である。
【図１２】実施例２のデータ撹拌処理ユニットの処理フローチャートである。
【図１３】実施例２のラウンド前処理ユニットの構成図である。
【図１４】実施例２の最終処理ユニットの構成図である。
【図１５】データ前処理ユニットの構成図である。
【図１６】鍵前処理ユニットの構成図である。
【図１７】論理演算処理ユニットの構成図である。
【図１８】非線形処理演算処理ユニットの構成図である。
【図１９】巡回変換処理ユニットの構成図である。
【図２０】行列演算処理ユニットの構成図である。
【図２１】実施例１の置換処理ユニットの構成図である。
【図２２】実施例２の拡張処理ユニットの構成図である。
【図２３】実施例２のデータ整形処理ユニットの構成図である。
【発明を実施するための形態】
【００１６】
本発明の実施の形態について図面を参照して説明する。
【実施例１】
【００１７】
図１は、擬似乱数生成器ＭＵＧＩのアルゴリズムの構成図である。擬似乱数生成器ＭＵＧＩ（擬似乱数生成アルゴリズムMUGIを用いた擬似乱数生成器）は、秘密鍵１２８ビットと初期ベクトル１２８ビットを初期値とし、これらの合計２５６ビットの内部状態を、所定の内部状態撹拌処理を用いて撹拌しながら、内部状態のビット列の一部に出力フィルタ処理を施したものを、６４ビットずつ擬似乱数として出力するものである。
【００１８】
擬似乱数生成器ＭＵＧＩ１００は、内部状態として所定の値を保持するバッファ１０４及びステート１０５、並びに、バッファ１０４及びステート１０５に保持される内部状態を更新するための内部状態撹拌処理を実行する線形変換部１０２及び鍵ストリーム生成部１０１を有する。図１に示すように、線形変換部１０２、鍵ストリーム生成部１０１は共に、バッファ１０４、ステート１０５に保持される内部状態を入力とする。又、線形変換部１０２は線形変換を実行する。鍵ストリーム生成部１０１は、非線形変換を含む変換処理を実行する。
【００１９】
出力フィルタ１０３は、ステート１０５に保持される内部状態の一部に対して出力フィルタ処理を実行する。擬似乱数生成器ＭＵＧＩ１００は、出力フィルタ１０３の出力であり、擬似乱数である出力データ１０６を出力する。
【００２０】
以下では、擬似乱数生成器ＭＵＧＩ１００のアルゴリズムのうち、鍵ストリーム生成部１０１の処理を対象としている。図６を用いて、鍵ストリーム生成部１０１の構成を説明する。入力１〜５（６０１〜６０５）は、各々、６４ビットの入力データである。出力１〜３（６０６〜６０８）は、各々、６４ビットの出力データである。Ｆ関数６０９は入力２（６０２）と入力４（６０４）との排他的論理和の結果を入力データとし、Ｆ関数６１０は入力２（６０２）と入力５（６０５）との排他的論理和の結果を入力データとして、入力データに対して変換処理を実行する。鍵ストリーム生成部１０１は、予め所定の定数６１１、６１２を有する。
【００２１】
Ｆ関数は６４ビットの２入力に対して、変換処理として、非線形変換、行列演算、論理演算の処理を実行し、６４ビットの出力データを出力する。一方、ＡＥＳ命令（１２８ビットの鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の計算）は、１２８ビットの２入力に対して、非線形変換、巡回変換、行列演算、論理演算の処理を１命令として実行し、１２８ビットの出力データを出力する。
【００２２】
このように、Ｆ関数とＡＥＳ命令とは、入出力データのビット幅が６４ビットと１２８ビットとに相違し、ＡＥＳ命令はＦ関数と比べて非線形変換と行列演算との間で巡回変換を実行する点が相違する。
【００２３】
図６のＦ関数６０９の入力データとＦ関数６１０の入力データとの間には依存関係が存在しない(互いに影響しない)ため、Ｆ関数６０９と６１０の処理は並列して実行することが可能である。すなわち、Ｆ関数６０９とＦ関数６１０への入力データを合わせて１２８ビットの入力データと見なし、並列処理することにより、Ｆ関数とＡＥＳ命令とのビット幅の相違を解消した鍵ストリーム生成部１０１を実現する。
【００２４】
他の相違である、非線形変換と行列演算との間で巡回変換を実行する点を解消する鍵ストリーム生成部１０１の処理を実行する処理ユニット２２３を図２を用いて説明する。
【００２５】
図２は、ＡＥＳ命令を適用できるように構成した鍵ストリーム生成処理ユニット２２３の構成図である。鍵ストリーム生成処理ユニット２２３は、図６の鍵ストリーム生成部１０１の一部である。一部であることを、入出力データを対応させて説明する。
【００２６】
６４ビットの入力データ２０１及び１２８ビットのラウンド鍵データ２０２は、鍵ストリーム生成ユニット２２３に対する入力データである。入力データ２０１は、図６の入力２（６０２）に対応し、ラウンド鍵データ２０２は、図６の入力４（６０４）及び入力５（６０５）に対応する。図示を省略するが、鍵ストリーム生成部２２３は、入力されるタイミング信号（クロック）に応じて、以下に説明する各処理ユニットが各々の動作を進める。出力データ２０４は、鍵ストリーム生成ユニット２２３からの出力データであり、図６のＦ関数６０９、６１０の出力データを並列したものに対応する。
【００２７】
定数２０５は、あらかじめ鍵ストリーム生成ユニット２２３が具備する所定の定数である。
【００２８】
データ前処理ユニット２０６は、入力データ２０１を入力として所定の並べ替え処理を実行し、その結果を中間データ２１５として出力する。鍵前処理ユニット２０７は、ラウンド鍵データ２０２を入力として所定の並べ替え処理を実行し、その結果を中間データ２１６として出力する。置換処理ユニット２０８は、定数２０５を入力として所定の並べ替え処理を実行し、その結果を中間データ２２２として出力する。
【００２９】
論理演算処理ユニット２０９は、中間データ２１５、２１６を入力としてビット毎の排他的論理和を計算し、その結果を中間データ２１７として出力する。論理演算処理ユニット２０９の処理は、図６のＦ関数６０９及びＦ関数６１０の入力段の排他的論理和の処理に対応する。非線形変換処理ユニット２１０は、中間データ２１７を入力として所定の非線形置換を実行し、その結果を中間データ２１８として出力する。巡回変換処理ユニット２１１は、中間データ２１８を入力として所定の巡回シフト演算を実行し、その結果を中間データ２１９として出力する。行列演算処理ユニット２１２は、中間データ２１９を入力として所定の定数乗算とビット毎の排他的論理和による線形変換を実行し、その結果を中間データ２２０として出力する。論理演算処理ユニット２１３は、中間データ２２０、２２２を入力としてビット毎の排他的論理和を計算し、その結果を中間データ２２１として出力する。置換処理ユニット２１４は、中間データ２２１を入力として所定の並び替え処理を実行し、その結果を出力データ２０４として出力する。
【００３０】
以上のように、鍵ストリーム生成ユニット２２３は、入力データ２０１及びラウンド鍵データ２０２を入力として、内部ユニット２０６〜２１４による処理を実行し、出力データ２０４を出力する。
【００３１】
なお、内部ユニット２０６〜２１４による処理は、ＣＰＵ上で実行されるソフトウェアとして実現される。このソフトウェアが、どのような命令の組合せで記述されるかはＣＰＵの命令セットに依存するものであり、ここでは問わない。又、内部ユニット２０６〜２１４がＣＰＵ内でどのようなハードウェアで実現されるかも、ＣＰＵのアーキテクチャに依存するものであり、ここでは問わない。
【００３２】
以上のように鍵ストリーム生成ユニット２２３を構成することにより、非線形変換処理ユニット２１０、巡回変換処理ユニット２１１、行列演算処理ユニット２１２及び論理演算処理ユニット２１３の一連の処理にＡＥＳ命令を用いることができる。逆に言えば、ＡＥＳ命令を適用すると、前述のようにＦ関数の処理にとって巡回変換処理ユニット２１１が余分になるので、この余分な巡回変換処理ユニット２１１の処理を相殺するために他の内部処理ユニットを設けている。この他の内部処理ユニットとは、データ前処理ユニット２０６、鍵前処理ユニット２０７、及び置換処理ユニット２１４であり、これらにより並べ替え処理を実行することにより、巡回変換処理ユニット２１１の処理を相殺する。
【００３３】
内部ユニット２０６〜２１４の各々の詳細構成について説明する。
【００３４】
データ前処理ユニット２０６の構成を図１５に示す。入力データ１５０１は、データ前処理ユニット２０６に対する６４ビット幅の入力データである。図１５においては、入力データ１５０１をバイト単位で入力１〜８のラベルを付けている。出力データ１５０２は、データ前処理ユニット２０６からの１２８ビット幅の出力データであり、図２に示した中間データ２１５である。図１５においては、出力データ１５０２をバイト単位で出力１〜１６のラベルを付けている。行列１５０３は、入力データ１５０１と出力データ１５０２との関係を模式的に示したものである。行列１５０３に、入力データ１５０１はバイト単位で入力１〜８に対応してｘ１〜ｘ８で示し、出力データ１５０２は、ｘ１〜ｘ８を行列１５０３で示す位置に並べた１２８ビット幅のデータである。データ前処理ユニット２０６は、入力データ１５０１に対して、行列１５０３に示す位置に並べ替え処理を実行し、出力データ１５０２を出力する。
【００３５】
鍵前処理ユニット２０７の構成を図１６に示す。入力データ１６０１は、鍵前処理ユニット２０７に対する１２８ビット幅のラウンド鍵データ２０２である。図１６においては、入力データ１６０１をバイト単位で入力１〜１６のラベルを付けている。出力データ１６０２は、鍵前処理ユニット２０７からの１２８ビット幅の出力データであり、図２に示した中間データ２１６である。図１６においては、出力データ１６０２をバイト単位で出力１〜１６のラベルを付けている。行列１６０３は、入力データ１６０１と出力データ１６０２との関係を模式的に示したものである。行列１６０３に入力データ１６０１はバイト単位で入力１〜１６に対応してｘ１〜ｘ１６で示し、出力データ１６０２は、ｘ１〜ｘ１６を行列１６０３で示す位置に並べた１２８ビット幅のデータである。鍵前処理ユニット２０７は、入力データ１６０１に対して、行列１６０３に示す位置に並べ替え処理を実行し、出力データ１６０２を出力する。
【００３６】
置換処理ユニット２０８の構成を図２１に示す。入力データ２１０１は、置換処理ユニット２０８に対する１２８ビット幅の定数２０５である。図２１においては、入力データ２１０１をバイト単位で入力１〜１６のラベルを付けている。出力データ２１０２は置換処理ユニット２０８からの１２８ビット幅の出力データであり、図２に示した中間データ２２２である。図２１においては、出力データ２１０２をバイト単位で出力１〜１６のラベルを付けている。行列２１０３は、入力データ２１０１と出力データ２１０２の関係を模式的に示したものである。行列２１０３には、入力データ２１０１はバイト単位で入力１〜１６に対応してｘ１〜ｘ１６で示し、出力データ２１０２は、ｘ１〜ｘ１６を行列２１０３に従って所定の位置に並べた１２８ビット幅のデータである。
【００３７】
論理演算処理ユニット２０９の構成を図１７に示す。入力データ１７０１と入力データ１７０２は、各々、論理演算処理ユニット２０９対する１２８ビット幅の入力データであり、図２に示した中間データ２１５、２１６である。出力データ１７０３は論理演算処理ユニット２０９からの１２８ビット幅の出力データであり、図２に示した中間データ２１７である。論理演算処理ユニット２０９は、入力データ１７０１と入力データ１７０２とのビットごとの排他的論理和演算を実行し、出力データ１７０３を出力する。
【００３８】
非線形変換処理ユニット２１０の構成を図１８に示す。入力データ１８０１は非線形変換処理ユニット２１０に対する１２８ビット幅の入力データであり、図２に示した中間データ２１７である。図１８においては、入力データ１８０１をバイト単位で入力１〜１６のラベルを付けている。出力データ１８０２は非線形変換処理ユニット２１０からの１２８ビット幅の出力データであり、図２に示した中間データ２１８である。図１８においては、出力データ１８０２をバイト単位で出力１〜１６のラベルを付けている。非線形変換処理ユニット２１０は、８ビット入力８ビット出力の変換表１８０３を持ち、入力データ１８０１を、変換表１８０３に従って変換した出力データ１８０２を出力する。
【００３９】
巡回変換処理ユニット２１１の構成を図１９に示す。入力データ１９０１は、巡回変換処理ユニット２１１に対する１２８ビット幅の入力データであり、図２に示した中間データ２１８である。図１９においては、入力データ１９０１をバイト単位で入力１〜１６のラベルを付けている。出力データ１９０２は、巡回変換処理ユニット２１１からの１２８ビット幅の出力データであり、図２に示した中間データ２１９である。図１９においては、出力データ１９０２をバイト単位で出力１〜１６のラベルを付けている。行列１９０３は、入力データ１９０１と出力データ１９０２の関係を模式的に示したものである。行列１９０３には、入力データ１９０１はバイト単位で入力１〜１６に対応してｘ１〜ｘ１６で示し、出力データ１９０２は、ｘ１〜ｘ１６を行列１９０３に従って所定の位置に並べた１２８ビット幅のデータである。
【００４０】
行列演算処理ユニット２１２の構成を図２０に示す。入力データ２００１は、行列演算処理ユニット２１２に対する１２８ビット幅の入力データであり、図２に示した中間データ２１９である。図２０においては、入力データ２００１をバイト単位で入力１〜１６のラベルを付けている。出力データ２００２は、行列演算処理ユニット２１２からの１２８ビット幅の出力データであり、図２に示した中間データ２２０である。図２０においては、出力データ２００２をバイト単位で出力１〜１６のラベルを付けている。演算式２００３は、入力データ２００１と出力データ２００２との関係を模式的に示したものである。入力データ２００１は、バイト単位で入力１〜１６に対応してｘ１〜ｘ１６で示し、出力データ２００２は、ｘ１〜ｘ１６を変数として演算式２００３に従って演算した１２８ビット幅のデータである。
【００４１】
論理演算処理ユニット２１３の構成は論理演算処理ユニット２０９の構成と同一であり、置換処理ユニット２１４の構成は置換処理ユニット２０８の構成と同一であるので、論理演算処理ユニット２１３と置換処理ユニット２１４の構成の説明は省略する。
【００４２】
又、前述のように、非線形変換処理ユニット２１０、巡回変換処理ユニット２１１、行列演算処理ユニット２１２、及び、論理演算処理ユニット２１３の各処理は、ＡＥＳ命令を用いて纏めて実行する。
【００４３】
図３は、鍵ストリーム生成ユニット２２３における鍵ストリーム生成のフローチャートである。
【００４４】
鍵ストリーム生成ユニット２２３は、平分である入力データ２０１とラウンド鍵データ２０２を与えられ、処理を開始する（ステップ３０１）。データ前処理ユニット２０６は、図１５を用いて説明したように、入力データ２０１に対してデータ並べ替え処理を実行し、中間データ２１５を出力する（ステップ３０２）。鍵前処理ユニット２０７は、図１６を用いて説明したように、ラウンド鍵データ２０２に対してデータ並べ替え処理を実行し、中間データ２１６を出力する（ステップ３０３）。置換処理ユニット２０８は、図２１を用いて説明したように、定数２０５に対してデータ並べ替え処理を実行し、中間データ２２２を出力する（ステップ３０４）。論理演算処理ユニット２０９は、図１７を用いて説明したように、中間データ２１５と中間データ２１６とのビット毎の排他的論理和演算を実行し、中間データ２１７を出力する（ステップ３０５）。非線形変換処理ユニット２１０は、図１８を用いて説明したように、中間データ２１７に対して非線形置換を実行し、中間データ２１８を出力する（ステップ３０６）。巡回変換処理ユニット２１１は、図１９を用いて説明したように、中間データ２１８に対して巡回シフト演算を実行し、中間データ２１９を出力する（ステップ３０７）。行列演算処理ユニット２１２は、図２０を用いて説明したように、中間データ２１９に対して定数乗算とビット毎の排他的論理和で構成される演算式に従って線形変換を実行し、中間データ２２０を出力する（ステップ３０８）。論理演算処理ユニット２１３は、図１７を用いて説明したように、中間データ２２０と中間データ２２２とのビット毎の排他的論理和演算を実行し、中間データ２２１を出力する（ステップ３０９）。置換処理ユニット２１４は、図２１を用いて説明したように、中間データ２２１に対してデータ並べ替え処理を実行し、出力データ２０４を出力し（ステップ３１０）、終了する（ステップ３１１）。
【００４５】
尚、図３において、ステップ３０２、３０３、３０４の順で処理するとしたが、これらの３ステップの処理順は順不同である。又、ステップ３０４は、ステップ３０９の前であれば、いつ実行してもよい。
【００４６】
又、ステップ３０６〜３０９までの４ステップについては、前述したように、ＡＥＳ命令を適用する（４ステップをＡＥＳ命令の１命令で実行する）ことが可能であり、汎用命令の組合せで処理するよりも高速な処理が実現される。
【００４７】
以上、本実施例によれば、鍵ストリーム生成ユニット２２３は、擬似乱数生成器ＭＵＧＩ１００の鍵ストリーム生成部１０１を構成する２つのＦ関数６０９、６１０を、ＡＥＳ命令の一回の適用で処理することが可能である。データ前処理ユニット２０６、鍵前処理ユニット２０７、置換処理ユニット２１４などによる、データの並べ替えなどを実行する処理の追加によりＡＥＳ命令の適用が可能となっている。これらの処理の追加に伴い、処理ステップは増加するが、汎用命令の組み合わせで実現されるこれらの処理に要する処理コスト(処理時間)が少ないこと、非線形変換を含む複雑な変換処理を用いているＦ関数６０９及び６１０を、高速なＡＥＳ命令を用いて処理できることにより、鍵ストリーム生成ユニット２２３は、鍵ストリーム生成部１０１の処理を高速に実現可能である。
【実施例２】
【００４８】
本実施例は、ハッシュ関数ＬｅｓａｍｎｔａをＡＥＳ命令を利用して処理する際に、Ｌｅｓａｍｎｔａアルゴリズムの一部の処理手順を削減することで高速に処理する方法に関するものである。
【００４９】
図４を用いて、ハッシュ関数Ｌｅｓａｍｎｔａのアルゴリズムを簡単に説明する。図４は、ハッシュ関数Ｌｅｓａｍｎｔａのブロック暗号部のアルゴリズムの構成図である。ハッシュ関数Ｌｅｓａｍｎｔａは、任意長のメッセージと初期ベクトル２５６ビットを入力とし、内部状態を所定の内部状態撹拌処理を用いて撹拌しながら、２５６ビットのハッシュ値を生成する。
【００５０】
ブロック暗号部４００は、ハッシュ関数Ｌｅｓａｍｎｔａのブロック暗号部である。初期ベクトル４０３と入力データ４０４は各々、ハッシュ関数Ｌｅｓａｍｎｔａのブロック暗号部４００への入力である。ラウンド用定数４０６、４０７及び４０８は、予めハッシュ関数Ｌｅｓａｍｎｔａのブロック暗号部４００が具備する、各々異なる所定の定数である。ラウンド鍵生成部４０１、４１０及び４１１は初期ベクトル４０３の撹拌処理を実行する。ラウンド鍵生成部４０１、４１０及び４１１は同一の処理を実行する。ハッシュラウンド処理部４０２、４１２及び４１３は入力データ４０４の撹拌処理を実行する。ハッシュラウンド処理部４０２、４１２及び４１３は同一の処理を実行する。ラウンド鍵生成部４０１、４１０及び４１１、並びに、ハッシュラウンド処理部４０２、４１２及び４１３は共に、非線形変換を含む変換処理を実行する。排他的論理和演算処理部４０９は、入力データ４０４とハッシュラウンド処理部４１３の出力とのビット毎の論理和演算を実行する。出力データ４０５は、ハッシュ関数Ｌｅｓａｍｎｔａのブロック暗号部４００から出力される出力データである。
【００５１】
ラウンド鍵生成部は入力に対して、変換処理として、非線形変換、巡回変換、行列演算、論理演算、Ｂｙｔｅ  Ｔｒａｎｓｐｏｓｅ変換の処理を実行し、出力データを出力する。一方でＡＥＳ命令は入力に対して、非線形変換、巡回変換、行列演算、論理演算の処理を実行し、出力データを出力する。
【００５２】
このように、ラウンド鍵生成部とＡＥＳ命令とは、ラウンド鍵生成部は論理演算の後にＢｙｔｅ  Ｔｒａｎｓｐｏｓｅ変換を実行する点が相違する。Ｂｙｔｅ  Ｔｒａｎｓｐｏｓｅ変換にはＡＥＳ命令の適用が困難であるため、ＡＥＳ命令とは別に実行する必要がある。処理手順削減のため、ラウンド鍵生成部ではＢｙｔｅ  Ｔｒａｎｓｐｏｓｅ変換を省略し、ラウンド鍵生成部の出力データを入力データの１つとして受け取るハッシュラウンド処理部でのデータ並び替え処理と合成実行する合成関数として実行する。
【００５３】
ハッシュ関数Ｌｅｓａｍｎｔａのブロック暗号部４００に入力する初期ベクトル４０３と入力データ４０４の各々に対して、ラウンド鍵生成部４０１及びハッシュラウンド処理部４０２の各々が第１ラウンドの処理を実行し、ラウンド鍵生成部４０１及びハッシュラウンド処理部４０２からの出力値の各々に対して、ラウンド鍵生成部４１０及びハッシュラウンド処理部４１２の各々が第２ラウンドの処理を実行する。以下、図示しない、第３〜第３１ラウンドの同様の処理が実行された、その出力値の各々に対して、ラウンド鍵生成部４１１及びハッシュラウンド処理部４１３の各々が第３２ラウンドの処理を実行する。排他的論理和演算処理部４０９が、ハッシュラウンド処理部４１３からの出力値と入力データ４０４とのビット毎の論理和演算を実行し、その出力値を、出力データ４０５として出力する。
【００５４】
本実施例は、ハッシュ関数Ｌｅｓａｍｎｔａのブロック暗号部４００の内、ラウンド鍵生成部４０１(４１０、４１１、及び、図示しないラウンド鍵生成部も同様)とハッシュラウンド処理部４０２(４１２、４１３、及び、図示しないハッシュラウンド処理部も同様)を処理する処理ユニットを対象としている。
【００５５】
図５は、本実施例のハッシュラウンド処理部の構成図である。ハッシュラウンド処理ユニット５１８はハッシュラウンド処理部４０２(４１２、４１３、)に示した撹拌処理を実行する。入力データ５０１、ラウンド鍵データ５０２は各々、ハッシュラウンド処理ユニット５１８への入力データである。入力データ５０１は、図４のハッシュラウンド処理部４０２の場合は入力データ４０４であり、第２ラウンド以降の処理部（たとえば、ハッシュラウンド処理部４１２）の場合は前のハッシュラウンド処理部の出力データである。ラウンド鍵データ５０２は、同じラウンドのラウンド鍵生成部の出力である。ハッシュラウンド処理部５１８は、図示を省略するが、入力されるタイミング信号（クロック）に応じて、以下に説明する各処理ユニットが各々の動作を進める。
【００５６】
出力データ５０４は、ハッシュラウンド処理ユニット５１８からの出力データである。定数５０５は、ハッシュラウンド処理ユニット５１８が予め具備する２５６ビットの定数である。拡張処理ユニット５０６、５０７、５０８、及び、５０９は、定数５０５と入力データ５０１とを並べ替える。データ圧縮処理ユニット５１０は、入力データに対して非線形変換を含む圧縮処理を実行する。論理演算処理ユニット２０９は、実施例1の説明に用いた図１７で示した論理演算処理ユニットである。
【００５７】
拡張処理ユニット５０６(５０７、５０８、及び、５０９も同様)について説明する。図２２は、拡張処理ユニット５０６の構成図である。入力データ２２０１は、拡張処理ユニット５０６に対する６４ビット幅の入力データである。図５に示す２５６ビットの入力データ５０１をビット０〜６３、ビット６４〜１２７、ビット１２８〜１９１、ビット１９２〜２５５に分割した各々の６４ビットを各拡張処理ユニットの入力データ２２０１とする。図２２においては、入力データ２２０１をバイト単位で入力１〜８のラベルを付けている。定数入力データ２２０２は拡張処理ユニット５０６に対する６４ビット幅の定数入力データである。図５に示す２５６ビットの定数５０５を、入力データ５０１と同様に分割し、分割した各々を入力データ５０１のビット位置と対応させて各拡張処理ユニットの入力データ２２０２とする。出力データ２２０３は拡張処理ユニット５０６からの１２８ビット幅の出力データである。図２２においては、入力データ２２０１をバイト単位で出力１〜１６のラベルを付けている。行列２２０４は、入力データ２２０１及び定数入力データ２２０２と出力データ２２０３との関係を模式的に示したものである。入力データ２２０１は、バイト単位で入力１〜８に対応してｘ１〜ｘ１６で示し、出力データ２２０４は、ｘ１〜ｘ８、及び、定数０ｘ００（８ビットデータを１６進数表記した０）を、行列２２０４で示す位置に並べた１２８ビット幅のデータである。図中では、定数０ｘ００を０と表記してある。拡張処理ユニット５０６は、入力データ２２０１と定数入力データ２２０２に対して、行列２２０４に示す位置に並べ替え処理を実行し、出力データ２２０３を出力する。
【００５８】
図９は、データ圧縮処理ユニット５１０の構成図である。拡張処理ユニット５０８の出力である入力データ９０１、及びラウンド鍵データ５０２は、データ圧縮処理ユニット５１０に対する入力データである。出力データ９０４は、データ圧縮処理ユニット５１０からの出力データである。定数Ａ９０５、定数Ｂ９０６、及び、定数Ｃ９０７は、あらかじめデータ圧縮処理ユニット５１０が具備する定数であり、定数Ａ、定数Ｂ、及び、定数Ｃは各々、０ｘ００、０ｘ５２、０ｘ００である。９０８〜９１１、及び、２０９〜２１３は、データ圧縮ユニット５１０を構成する内部ユニットである。９１２、９１３、９２０、９１５、９１４、９１６〜９１９は各々、内部ユニット９０８〜９１１及び２０９〜２１３から出力される中間データである。
【００５９】
以下、内部ユニット９０８〜９１１及び２０９〜２１３について説明する。データ整形処理ユニット９０８は、入力データ９０１と定数Ｂ９０６を入力として所定の並べ替え処理を実行し、その結果を中間データ９１２として出力する。ラウンド鍵前処理ユニット９０９は、ラウンド鍵データ５０２と定数Ａ９０５を入力として所定の並べ替え処理を実行し、その結果を中間データ９１３として出力する。データ整形処理ユニット９１０は、中間データ９１９と定数Ｂ９０６を入力として所定の並べ替え処理を実行し、その結果を中間データ９２０として出力する。マルチプレクサ９１１は中間データ９１４及び中間データ９２０を入力とし、マルチプレクスした結果を中間データ９１５として出力する。論理演算処理ユニット２０９は、中間データ９１２及び中間データ９１３を入力としてビット毎の排他的論理和を計算し、その結果を中間データ９１４として出力する。非線形変換処理ユニット２１０は、中間データ９１５を入力として所定の非線形置換を実行し、その結果を中間データ９１６として出力する。巡回変換処理ユニット２１１は、中間データ９１６を入力として所定の巡回シフト演算を実行し、その結果を中間データ９１７として出力する。行列演算処理ユニット２１２は、中間データ９１７を入力として所定の定数乗算とビット毎の排他的論理和で構成される線形変換を実行し、その結果を中間データ９１８として出力する。論理演算処理ユニット２１３は、中間データ９１８及び定数Ｃ９０７を入力としてビット毎の排他的論理和を計算し、その結果を中間データ９１９として出力する。
【００６０】
以上のように、データ圧縮処理ユニット５１０は、入力データ９０１、ラウンド鍵データ５０２及び制御データ９０３を入力として、内部ユニット９０８〜９１１及び２０９〜２１３による処理を実行し、出力データ９０４を出力する。ラウンド鍵前処理ユニット９０９は、ラウンド鍵データ５０２の並び替え処理を実行する合成関数である。
【００６１】
尚、内部ユニット９０８〜９１１及び２０９〜２１３が実現する機能は、ＣＰＵ上で実行されるソフトウェアとして実現される。ソフトウェアが、どのような命令の組合せで記述されるかはＣＰＵの命令セットに依存するものであり、ここでは問わない。又、内部ユニット９０８〜９１１及び２０９〜２１３がＣＰＵ内でどのようなハードウェアで実現されるかも、ＣＰＵのアーキテクチャに依存するものであり、ここでは問わない。
【００６２】
次に、内部ユニット９０８〜９１１について説明する。内部ユニット２０９〜２１３の各々の構成は、実施例１で説明した図１７〜図２０と同一であり、説明を省略する。
【００６３】
図２３は、データ整形処理ユニット９０８の構成図である。入力データ２３０１は、データ整形処理ユニット９０８に対する１２８ビット幅の入力データ(図９の入力データ９０１)である。図２３においては、入力データ２３０１をバイト単位で入力１〜１６のラベルを付けている。定数入力データ２３０２は、データ整形処理ユニット９０８に対する６４ビット幅の定数０ｘ５２（図９の定数Ｂ９０６）である。図中では、定数０ｘ５２をａと表記してある。出力データ２３０３はデータ整形処理ユニット９０８からの１２８ビット幅の出力データであり、図９の中間データ９１２である。図２３においては、出力データ２３０３をバイト単位で出力１〜１６のラベルを付けている。行列２３０４は、入力データ２３０１及び定数入力データ２３０２と出力データ２３０３との関係を模式的に示したものである。入力データ２３０１は、バイト単位で入力１〜１６に対応してｘ１〜ｘ１６で示し、出力データ２３０３は、ｘ１、ｘ３、ｘ５、ｘ７、ｘ９、ｘ１１、ｘ１３、ｘ１５、及び、定数０ｘ５２を行列２３０４に従って所定の位置に並べた１２８ビット幅のデータである。このように、データ整形処理ユニット９０８は、入力データ２３０１、定数入力データ２３０２を、行列２３０４に従って所定の位置に並べ、出力データ２３０３を出力する。
【００６４】
図８は、ラウンド鍵前処理ユニット９０９の構成である。入力データ８０１は、ラウンド鍵前処理ユニット９０９に対する６４ビット幅の入力データ(図９のラウンド鍵データ５０２)である。図８においては、入力データ８０１をバイト単位で入力１〜８のラベルを付けている。定数入力８０２は、ラウンド鍵前処理ユニット９０９に対する６４ビット幅の定数入力データ０ｘ００（図９の定数Ａ９０５）である。図中では、定数０ｘ００を０と表記してある。出力データ８０３はラウンド鍵前処理ユニット９０９からの１２８ビット幅の出力データであり、図９の中間データ９１３である。図８においては、出力データ８０３をバイト単位で出力１〜１６のラベルを付けている。行列８０４は、入力データ８０１、定数入力８０２と出力データ８０３の関係を行列で模式的に示したものである。入力データ８０１は、バイト単位で入力１〜８に対応してｘ１〜ｘ８で示し、出力データ８０３は、ｘ１〜ｘ８、及び、定数０ｘ００を行列８０４に従って所定の位置に並べた１２８ビット幅のデータである。
【００６５】
データ整形処理ユニット９１０の構成はデータ整形処理ユニット９０８と同一であるので、説明を省略する。
【００６６】
図１０はデータ圧縮処理ユニット５１０におけるデータ圧縮処理のフローチャートである。
【００６７】
最初に、データ圧縮処理ユニット５１０は、平文である入力データ９０１と秘密情報であるラウンド鍵データ５０２を与えられ、処理の繰り返し数（図中ではｉ）を1に設定し、処理を開始する（ステップ１００１）。データ整形処理ユニット９０８は、入力データ９０１と定数Ｂ９０６に対してデータ並べ替え処理を実行し、中間データ９１２を出力する（ステップ１００２）。ラウンド鍵前処理ユニット９０９は、ラウンド鍵データ５０２と定数Ａ９０５に対してデータ並べ替え処理を実行し、中間データ９１３を出力する（ステップ１００３）。論理演算処理ユニット２０９は、中間データ９１２、９１３に対し、ビットごとの排他的論理和演算を実行し、中間データ９１４を出力する（ステップ１００４）。
マルチプレクサ９１１は、繰り返し数が１であれば中間データ９１４を中間データ９１５として出力し、繰り返し数が１以外であれば中間データ９２０を中間データ９１５として出力する。非線形変換処理ユニット２１０は、マルチプレクサ９１１から中間データ９１５を受け取り、非線形置換を実行し、中間データ９１６を出力する（ステップ１００５）。巡回変換処理ユニット２１１は、中間データ９１６に対して巡回シフト演算を実行し、中間データ９１７を出力する（ステップ１００６）。行列演算処理ユニット２１２は、図２０を用いて説明したように、中間データ９１７に対して定数乗算とビットごとの排他的論理和で構成される演算式に従って線形変換を実行し、中間データ９１８を出力する（ステップ１００７）。論理演算処理ユニット２１３は、中間データ９１８と定数Ｃ９０７とに対してビットごとの排他的論理和演算を実行し、中間データ９１９を出力する（ステップ１００８）。
【００６８】
繰り返し数を１増加させ（１００９）、繰り返し数の値が４以より大であるか否かを判定する（ステップ１０１０）。繰り返し数が4以下の場合は、データ整形処理ユニット９１０は中間データ９１９と定数Ｂ９０６を入力し、並べ替え処理を実行し、中間データ９２０を出力して（ステップ１０１１）、ステップ１００５に戻る。繰り返し数が４より大の場合は、中間データ９１９を出力データ９０４として出力する（ステップ１０１２）。
【００６９】
尚、図１０においてステップ１００２、１００３の順で処理するとしたが、これら２ステップの処理順は順不同である。また、ステップ１００９は、ステップ１００５からステップ１０１０の間であればいつ実行してもよい。
【００７０】
また、ステップ１００５からステップ１００８の４ステップについては、ＡＥＳ命令（１２８ｂｉｔ鍵を用いる共通鍵暗号ＡＥＳの１ラウンド分の計算）を適用することが可能であり、汎用命令の組み合わせで処理することによりの高速な処理が実現される。
【００７１】
次に、図７を用いて、図４のラウンド鍵生成部４０１を説明する。ラウンド鍵生成ユニット７１８は、ラウンド鍵生成部４０１による撹拌処理を実行する。入力データ７０１、ラウンド定数データ７０２は各々、ラウンド鍵生成ユニット７１８への入力データである。第１ラウンドの場合、入力データ７０１は初期ベクトル４０３であり、ラウンド定数データ７０２は第１ラウンド用定数４０６である。第２ラウンド以降の場合、入力データ７０１は前ラウンドの出力データ７０４であり、ラウンド定数データ７０２はそのラウンド用の定数４０７〜４０８である。ラウンド鍵生成ユニット７１８は、図示を省略するが、入力されるタイミング信号（クロック）に応じて、以下に説明する各処理ユニットが各々の動作を進める。
【００７２】
６４ビット置換処理ユニット７０５、７０６、７０７、及び、７０８は、入力データ７０１の並べ替えを実行する。説明の便宜上、６４ビット置換処理ユニット７０５、７０６、７０７と７０８を区別して記しているが、構成及び動作は同一である。データ撹拌処理ユニット７０９は、入力データに対して非線形変換を含む圧縮処理を実行する。ラウンド鍵生成ユニット７１８は、さらに６４ビット論理演算処理ユニット７１０を含む。
【００７３】
ラウンド鍵生成ユニット７１８への入力データ７０１を、６４ビット置換処理ユニット７０５〜７０８を用いてデータ形式を変更することで、ハッシュ関数Ｌｅｓａｍｎｔａアルゴリズムのデータ撹拌処理ユニット７０９の処理の内、ＡＥＳ命令の適用が困難な処理手順を削減することが可能となる。
【００７４】
６４ビット置換処理ユニット７０５（７０６、７０７、及び、７０８も同様）は、図２１に示す置換処理ユニット２０８と同様である。ただし、図２１に示す置換処理ユニット２０８が、１２８ビット入力、１２８ビット出力の置換処理であるのに対して、６４ビット置換処理ユニット７０５の構成は、置換処理ユニット２０８の下位６４ビットの置換処理の構成に対応する。
【００７５】
図１１は、データ撹拌処理ユニット７０９の構成図である。入力データ１１０１、ラウンド定数データ７０２は各々、データ撹拌処理ユニット７０９に対する入力データである。入力データ１１０１は、図７に示すように、６４ビット置換処理ユニット７０７の出力データである。データ撹拌処理ユニット７０９は、図示を省略するが、入力されるタイミング信号（クロック）に応じて、以下に説明する各処理ユニットが各々の動作を進める。出力データ１１０４は、データ撹拌処理ユニット７０９からの出力データである。定数Ｃ９０７は、あらかじめデータ撹拌処理ユニット７０９が具備する定数であり、その値は０ｘ００である。１１０５、１１０６、２０６、及び、２０９から２１３は、データ撹拌処理ユニット７０９を構成する内部ユニットである。１１０７、１１１４、及び、１１０８から１１１３は各々、該内部ユニット１１０５、１１０６、２０６、及び、２０９から２１３から出力される中間データである。
【００７６】
以下、内部ユニット１１０５、１１０６、２０６、及び、２０９から２１３について説明する。ラウンド前処理ユニット１１０５は、入力データ１１０１を入力として所定の並べ替え処理を実行し、その結果を中間データ１１０７として出力する。最終処理ユニット１１０６は、中間データ１１１３を入力として、所定の並べ替え処理を実行し、その結果を中間データ１１１４として出力する。データ前処理ユニット２０６は、ラウンド定数データ７０２を入力として所定の並べ替え処理を実行し、その結果を中間データ１１０８として出力する。論理演算処理ユニット２０９は、中間データ１１０７、及び、１１０８を入力としてビット毎の排他的論理和を計算し、その結果を中間データ１１０９として出力する。非線形変換処理ユニット２１０は、中間データ１１０９を入力として所定の非線形置換を実行し、その結果を中間データ１１１０として出力する。巡回変換処理ユニット２１１は、中間データ１１１０を入力として所定の巡回シフト演算を実行し、その結果を中間データ１１１１として出力する。行列演算処理ユニット２１２は、中間データ１１１１を入力として所定の定数乗算とビット毎の排他的論理和で構成される線形変換を実行し、その結果を中間データ１１１２として出力する。論理演算処理ユニット２１３は、中間データ１１１２、及び定数Ｃ９０７を入力としてビット毎の排他的論理和を計算し、その結果を中間データ１１１３として出力する。
【００７７】
以上、データ撹拌処理ユニット７０９は、入力データ１１０１、ラウンド定数データ７０２を入力として、内部ユニット１１０５、１１０６、２０６、及び、２０９〜２１３に示される処理を行ない、出力データ１１０４を出力する処理を実行する。
【００７８】
また、Ｌｅｓａｍｎｔａアルゴリズムでは、論理演算処理ユニット２１３と最終処理ユニット１１０６との間にＢｙｔｅ  Ｔｒａｎｓｐｏｓｅ変換処理が必要であるが、本実施形態では、ラウンド鍵前処理ユニット９０９でＢｙｔｅ  Ｔｒａｎｓｐｏｓｅ変換も合成実行しているため、Ｂｙｔｅ  Ｔｒａｎｓｐｏｓｅ変換は不要であり記述していない。
【００７９】
尚、内部ユニット１１０５、１１０６、２０６、及び、２０９〜２１３が実現する機能は、所定のＣＰＵ上で実行されるソフトウェアとして実現される。該ソフトウェアが、どのような命令の組合せで記述されるかは該ＣＰＵの命令セットに依存するものであり、ここでは問わない。又、該内部ユニット１１０５、１１０６、２０６、及び、２０９から２１３が該ＣＰＵ内でどのようなハードウェアで実現されるかも、該ＣＰＵのアーキテクチャに依存するものであり、ここでは問わない。
【００８０】
次に、内部ユニット１１０５、１１０６、２０６、及び、２０９〜２１３の構成について説明する。２０６、及び、２０９〜２１３の構成は、各々図１５、及び、図１７〜図２０と同一であり、説明を省略する。
【００８１】
図１３は、ラウンド前処理ユニット１１０５の構成図である。入力データ１３０１は、ラウンド前処理ユニット１１０５に対する６４ビット幅の入力データであり、図１１の入力データ１１０１である。図１３においては、入力データ１３０１をバイト単位で入力１〜８のラベルを付けている。出力データ１３０２はラウンド前処理ユニット１１０５からの１２８ビット幅の出力データであり、図１１の中間データ１１０７である。図１３においては、出力データ１３０２をバイト単位で出力１〜１６のラベルを付けている。行列１３０３は、入力データ１３０１と出力データ１３０２の関係を模式的に示したものである。入力データ１３０１は、バイト単位で入力１〜８に対応してｘ１〜ｘ８で示されており、出力データ１３０２は、ｘ１〜ｘ８を行列１３０３に従って所定の位置に並べた１２８ビット幅のデータである。
【００８２】
図１４は、最終処理ユニット１１０６の構成図である。入力データ１４０１は、最終処理ユニット１１０６に対する１２８ビット幅の入力データであり、図１１の中間データ１１１３である。図１４においては、入力データ１４０１をバイト単位で入力１〜１６のラベルを付けている。出力データ１４０２は、最終処理ユニット１１０６からの６４ビット幅の出力データであり、図１１の中間データ１１１４である。図１４においては、出力データ１４０２をバイト単位で出力１〜８のラベルを付けている。行列１４０３は、入力データ１４０１と出力データ１４０２の関係を模式的に示したものである。入力データ１４０１は、バイト単位で入力１〜１６に対応してｘ１〜ｘ１６で示されており、出力データ１４０２は、ｘ１〜ｘ８を行列１４０３に従って所定の位置に並べた６４ビット幅のデータである。
【００８３】
図１２は、データ撹拌処理ユニット７０９におけるデータ撹拌処理のフローチャートである。データ撹拌処理ユニット７０９は、平文である入力データ１１０１とラウンド定数データ７０２を与えられ、処理を開始する（ステップ１２０１）。ラウンド前処理ユニット１１０５は、入力データ１１０１に対してデータ並べ替え処理を実行し、中間データ１１０７を出力する（ステップ１２０２）。データ前処理ユニット２０６は、ラウンド定数データ７０２に対してデータ並べ替え処理を実行し、中間データ１１０８を出力する（ステップ１２０３）。論理演算処理ユニット２０９は、中間データ１１０７、及び、１１０８に対し、ビットごとの排他的論理和演算を実行し、中間データ１１０９を出力する（ステップ１２０４）。非線形変換処理ユニット２１０は、中間データ１１０９に対して非線形置換を実行し、中間データ１１１０を出力する（ステップ１２０５）。巡回変換処理ユニット２１１は、中間データ１１１０に対し、巡回シフト演算を実行し、中間データ１１１１を出力する（ステップ１２０６）。行列演算処理ユニット２１２は、中間データ１１１１に対して定数乗算とビットごとの排他的論理和で構成される線形変換を実行し、中間データ１１１２を出力する（ステップ１２０７）。論理演算処理ユニット２１３は、中間データ１１１２と定数Ｃ９０７に対して、ビットごとの排他的論理和演算を実行し、中間データ１１１３を出力する（ステップ１２０８）。最終処理ユニット１１０６は、中間データ１１１３に対してデータ並べ替え処理を実行し、中間データ１１１４を出力データ１１０４として出力し（ステップ１２０９）、終了する（ステップ１２１０）。
【００８４】
尚、図１２においてステップ１２０２、１２０３の順で処理するとしたが、この２ステップの処理順は順不同である。ステップ１２０６〜１２０８の４ステップについては、ＡＥＳ命令を適用することが可能であり、汎用命令の組み合わせで処理するより高速な処理が実現される。
【００８５】
以上、本実施例によれば、ラウンド鍵生成ユニット７１８とハッシュラウンド処理ユニット５１８では、ハッシュ関数Ｌｅｓａｍｎｔａ４００のラウンド鍵生成部４０１とハッシュラウンド処理部４０２を実行する処理ステップの削減とＡＥＳ命令の適用が可能である。これは、拡張処理ユニット５０６、６４ビット置換処理ユニット７０５、及び、ラウンド鍵前処理ユニット９０９など、データ形式を変換する処理ステップの追加により可能となっている。処理ステップは追加により増加するが、汎用命令の組み合わせで実現される追加処理ステップに要する処理コストが少ないこと、処理ステップ数を削減できることにより、ラウンド鍵生成ユニット７１８とハッシュラウンド処理ユニット５１８は、ハッシュ関数Ｌｅｓａｍｎｔａ４００の処理を高速に実現可能である。
【符号の説明】
【００８６】
１０１：鍵ストリーム生成部、１０２：線形変換部、１０３：出力フィルタ、１０４：バッファ、１０５：ステート、２０６：データ前処理ユニット、２０７：鍵前処理ユニット、２０８、２１４：置換処理ユニット、２０９、２１３：論理演算処理ユニット、２１０：非線形変換処理ユニット、２１１：巡回変換処理ユニット、２１２：行列演算処理ユニット、４０１、４１０、４１１：ラウンド鍵生成部、４０２、４１２、４１３：ハッシュラウンド処理部、４０９：排他的論理和演算処理部、５０６、５０７、５０８、５０９：拡張処理ユニット、５１０：データ圧縮処理ユニット、５１８：ハッシュラウンド処理ユニット、６０９、６１０：Ｆ関数、７０５、７０６、７０７、７０８：６４ビット置換処理ユニット、７０９：データ撹拌処理ユニット、７１０：６４ビット論理演算処理ユニット、８０１：変形拡張処理ユニット、９０８、９１０：データ整形処理ユニット、９０９：ラウンド鍵前処理ユニット、９１１：マルチプレクサ、１１０５：ラウンド前処理ユニット、１１０６：最終処理ユニット。
【図１】
2011085739.tif 000003
【図２】
2011085739.tif 000004
【図３】
2011085739.tif 000005
【図４】
2011085739.tif 000006
【図５】
2011085739.tif 000007
【図６】
2011085739.tif 000008
【図７】
2011085739.tif 000009
【図８】
2011085739.tif 000010
【図９】
2011085739.tif 000011
【図１０】
2011085739.tif 000012
【図１１】
2011085739.tif 000013
【図１２】
2011085739.tif 000014
【図１３】
2011085739.tif 000015
【図１４】
2011085739.tif 000016
【図１５】
2011085739.tif 000017
【図１６】
2011085739.tif 000018
【図１７】
2011085739.tif 000019
【図１８】
2011085739.tif 000020
【図１９】
2011085739.tif 000021
【図２０】
2011085739.tif 000022
【図２１】
2011085739.tif 000023
【図２２】
2011085739.tif 000024
【図２３】
2011085739.tif 000025