(57)【要約】【課題】高い安全性を達成するために大きな非線形置換を利用するが，置換処理はサイズが大きくなれば処理にかかる時間も増加するため，非効率的であった。【解決手段】以下の特徴を備える，安全性が高く，かつ，高速な処理が可能なハッシュ値生成方法または装置を提供する。１．メッセージ挿入方法として，挿入メッセージがすべてのサブブロックに波及するような線形変換を利用する。 ２．内部状態を複数のサブブロックに分割し，非線形置換では，それぞれのサブブロック単位で置換する。３．さらに，上記１の線形変換を，内部状態のすべてのサブブロックが，出力のサブブロックに波及するように構成してもよい。【選択図】図３
2010049037.tif 000002
【特許請求の範囲】
【請求項１】
任意長のメッセージを圧縮し，メッセージの特徴値を生成するハッシュ値生成装置であって，
前記ハッシュ値生成装置は，
任意長のメッセージを入力されると，メッセージにパディング処理を施し，クロックに応じて固定長のデータブロックを出力するメッセージパディングユニットと，
変換処理の中間値を記憶するレジスタと，
前記レジスタに初期値をセットする初期化ユニットと，
前記クロックに応じて，前記レジスタに記憶された値と，前記メッセージパディングユニットが出力するデータブロックとを用いた変換を行い，前記レジスタ長の変換結果を出力するデータ圧縮ユニットと，
クロックに応じて，前記データ圧縮ユニットの出力を用いて前記レジスタの値を更新するレジスタ制御ユニットと，
前記レジスタに記憶された値を用いて固定長のビット列を出力する最終処理ユニットと，
を備え，
前記データ圧縮ユニットは，
前記データブロックと，前記レジスタに記憶された値とを用いて前記レジスタ長の変換結果を出力する線形圧縮ユニットと，
前記線形圧縮ユニットの出力を用いて，前記レジスタ長の変換結果を出力する非線形置換ユニットと，
を備える
ことを特徴とするハッシュ値生成装置。
【請求項２】
請求項１に記載のハッシュ値生成装置であって，
前記非線形置換ユニットは，入力長がさらに小さい第二の非線形置換ユニットを備え，前記データ圧縮ユニットは以下の処理を行う
Y ← L(X, M[i]), 
Y[1]||Y[2]||…||Y[w] ← Y, 
Z[j] ← Qj(Y[j]),(1 ≦ j ≦ w), 
Z ← Z[1]||Z[2]||…||Z[w]
（ただし，A←BはBをAへ代入することを，A||BはAとBの連結を表し，L（  ）は前記線形圧縮ユニットの出力を，Qj（  ）は前記第二の非線形置換ユニットの出力を，M[i]は前記メッセージパディングユニットが出力するi番目のデータブロックを，Xは前記レジスタに記憶されている値を，Yは前記線形圧縮ユニットの出力を，Zは前記非線形置換ユニットの出力を，表す）
ことを特徴とするハッシュ値生成装置。
【請求項３】
請求項２に記載のハッシュ値生成装置であって，
前記線形圧縮ユニットは，以下の処理を行う
X[1]||X[2]||…||X[w] ← X, 
T ← C×(X[1] XOR X[2] XOR … XOR X[w]), 
Y[j] ←X[j] XOR L[j](M[i]) XOR T, 
Y ← Y[1]||Y[2]||…||Y[w]
（ただし，A←BはBをAへ代入することを，A||BはAとBの連結を，A XOR BはAとBのビットごとの排他的論理和を，A×BはAとBの有限体上の乗算を表し，Cは非零の定数を，L[j]（  ）は互いに相異なる線形置換ユニットの出力を，M[i]は前記メッセージパディングユニットが出力するi番目のデータブロックを，Xは前記レジスタに記憶されている値を，Yは前記線形圧縮ユニットの出力を表す）
ことを特徴とするハッシュ値生成装置。
【請求項４】
請求項２に記載のハッシュ値生成装置であって，
前記線形圧縮ユニットは，以下の処理を行う
X[1]||X[2]||…||X[w] ← X, 
Y[j] ←X[j] XOR M[i], 
Y ← Y[1]||Y[2]||…||Y[w]
（ただし，A←BはBをAへ代入することを，A||BはAとBの連結を，A XOR BはAとBのビットごとの排他的論理和を表し，M[i]は前記メッセージパディングユニットが出力するi番目のデータブロックを，Xは前記レジスタに記憶されている値を，Yは前記線形圧縮ユニットの出力を表す）
ことを特徴とするハッシュ値生成装置。
【請求項５】
請求項２に記載のハッシュ値生成装置であって，
前記第二の非線形置換ユニットは，
入力が8ワードであり，
4から8ビット単位の置換表で構成される第三の非線形置換ユニットと，
2ワードのデータを入力とする線形置換ユニットと，
定数加算ユニットと，
ループ処理を行うための制御装置と，
を備え，
前記定数加算ユニットで加算される定数は，ループごとに異なる
ことを特徴とするハッシュ値生成装置。
【請求項６】
請求項５に記載のハッシュ値生成装置であって，
前記線形置換ユニットは以下の処理を行う
a ← ax1, b ← bx1;
b ← b XOR a;
a ← a <<< i1;
a ← a XOR b;
b ← b <<< i2;
b ← b XOR a;
a ← a <<< i3;
a ← a XOR b;
b ← b <<< i4;
ay1 ← a, by1 = b;
（ただし，「x XOR y」はxとyのビットごとの排他的論理和を，「x <<< i」はxを1ワードのレジスタ内で左にiビット巡回シフトする演算を表す）
ことを特徴とするハッシュ値生成装置。
【請求項７】
請求項６に記載のハッシュ値生成装置であって，
前記線形置換を定めるパラメータi1, i2, i3, i4のうち，i1, i2, i3は偶数であり，i4は奇数であり，さらにi2は4で割れない
ことを特徴とするハッシュ値生成装置。
【請求項８】
請求項２に記載のハッシュ値生成装置であって，
前記最終処理ユニットは，
第二のレジスタと，
第三のレジスタと，
前記第二のレジスタに記憶された値を線形に結合して前記第三のレジスタに出力する線形出力ユニットと，
前記第二のレジスタに記憶された値を変換する非線形置換ユニットと，
を備え，
前記第三のレジスタに格納されたデータが，あらかじめ定められた出力ビット長に達するまで，前記非線形置換ユニットと前記線形出力ユニットとの処理を繰り返し行う
ことを特徴とするハッシュ値生成装置。
【請求項９】
固定長の秘密鍵と，任意長のメッセージから固定長のビット列を出力するメッセージ認証子生成装置であって，
請求項１に記載のハッシュ値生成装置を備える
ことを特徴とするメッセージ認証子生成装置。
【請求項１０】
少なくとも1台のサーバと，複数の端末と，ネットワークからなるシステムであって，
前記サーバは，演算ユニットとメモリと記憶装置と通信装置と暗号処理装置とを備え，
前記端末は，演算ユニットとメモリと記憶装置と暗号処理装置とを備え，
前記暗号処理装置は，請求項１に記載のハッシュ値生成装置を備える
ことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，任意の有限長のデータからそのハッシュ値を生成する技術とその応用技術に関する。
【背景技術】
【０００２】
公開鍵暗号技術を利用した署名生成やユーザの認証において，入力に一意に対応する乱数を生成する必要がある。このような用途に用いられる，任意の有限長のデータから固定長の乱数(ハッシュ値)を生成する方法をハッシュ関数と呼ぶ。
【０００３】
ハッシュ関数は，一方向性(与えられた出力に対応する入力を見つけられないこと)，衝突困難性(同一の出力を与える2つの異なる入力を見つけられないこと)といった安全性要件を満たす必要がある。さらにハッシュ関数が実用に耐えるためにはソフトウェア実装またはハードウェア実装において高速な処理が求められる。さらに，ハードウェア実装する場合の必要ゲート数や，ソフトウェア実装した場合のステップ数や実行時の必要メモリ領域などが小さい，といった実装コストの面からも効率的である必要がある。
【０００４】
汎用的な暗号アルゴリズムとして，これらの評価項目全てを高いレベルで満たすものが好ましい。
【０００５】
一般的に，ハッシュ関数は固定長の入力を処理する圧縮関数から構成され，圧縮関数による処理を繰り返し行うことで，任意長の入力データの圧縮，攪拌を行い，最終的にハッシュ値として出力する。ハッシュ関数の代表例としてはＳＨＡ−１，ＳＨＡ−２５６，Ｗｈｉｒｌｐｏｏｌといったものがある（非特許文献１参照）。
【０００６】
圧縮関数の繰り返し処理を行う方法として，上記非特許文献１に記載されているＳＨＡ−１，ＳＨＡ−２５６，Ｗｈｉｒｌｐｏｏｌなどで用いられている方法はＭｅｒｋｌｅ−Ｄａｍｇａａｒｄ  Ｓｔｒｅｎｇｔｈｅｎｉｎｇと呼ばれる。Ｍｅｒｋｌｅ−Ｄａｍｇａａｒｄ  Ｓｔｒｅｎｇｔｈｅｎｉｎｇでは，入力データを一定長のデータごとに区切り(区切られた一定長データをブロックという)，前のブロックの出力である中間ハッシュ値と入力データブロックとを圧縮関数の入力とし，次の中間ハッシュ値を生成する。
【０００７】
【非特許文献１】「ISO/IEC 10118-3情報セキュリティ-ハッシュ関数-(ISO/IEC 10118-3, third edition, Information technology-Security techniques-Hash-functions-)」, (スイス), 第三版, 2004年3月1日, pp 13-15, pp 19-22
【発明の開示】
【発明が解決しようとする課題】
【０００８】
Merkle - Damgaard Strengtheningでは，最終的なハッシュ値を生成する過程で，最終的なハッシュ値と同じ長さの中間ハッシュ値を多数生成するが，これがハッシュ関数としての安全性を損ねることが知られている。
【０００９】
これに対し，圧縮関数を使わず，計算途中の値が常に最終的なハッシュ値の二倍以上となる構成を備えるハッシュ関数として，スポンジ関数がある（非特許文献2参照）。
【００１０】
【非特許文献２】G. Bertoni, J. Daemen, M. Peeters, G. Van Assche, 「Cryptographic Sponges」，[Online]， [平成２０年４月２３日検索]，インターネット＜URL: http://sponge.noekeon.org/＞。
【００１１】
非特許文献２に記載の方法では，高い安全性を達成するために大きな非線形置換を利用するが，置換処理はサイズが大きくなれば処理にかかる時間も増加するため，非効率的である。したがって，より高速な処理が可能なハッシュ値生成技術が望まれている。
【課題を解決するための手段】
【００１２】
本発明は，安全性が高く，かつ，高速な処理が可能なハッシュ値生成方法または装置を提供する。
【００１３】
本発明は，また，上記ハッシュ値生成技術を用いた認証装置を提供する。
【００１４】
本発明の特徴には，例えば，以下の2点がある。
１．メッセージ挿入方法として，挿入メッセージがすべてのサブブロックに波及するような線形変換を利用する。 
２．内部状態を複数のサブブロックに分割し，非線形置換では，それぞれのサブブロック単位で置換する。
【００１５】
さらに，本発明は，次の特徴を備えるように構成しても良い。
３．上記１の線形変換を，内部状態のすべてのサブブロックが，出力のサブブロックに波及するように構成する。
【００１６】
上記態様によれば，実装コストの面で安価な線形変換を強化することにより，非線形変換の強度に関する要求を軽減することが可能であり，安全性を損なうことなく低コスト，かつ高速なハッシュ値生成技術を提供できる。
【００１７】
また，小型の非線形置換を用いることにより，実装回路の再利用による軽量な実装と，並列実装による高速化と，が可能となり，用途に応じて低コスト化，高速化が可能なハッシュ値生成技術を提供できる。
【００１８】
具体的な本発明の一態様は，任意長のメッセージを圧縮し，メッセージの特徴値を生成するハッシュ値生成装置であって，ハッシュ値生成装置は，任意長のメッセージを入力されると，メッセージにパディング処理を施し，クロックに応じて固定長のデータブロックを出力するメッセージパディングユニットと，変換処理の中間値を記憶するレジスタと，レジスタに初期値をセットする初期化ユニットと，クロックに応じて，レジスタに記憶された値と，メッセージパディングユニットが出力するデータブロックとを用いた変換を行い，レジスタ長の変換結果を出力するデータ圧縮ユニットと，クロックに応じて，データ圧縮ユニットの出力を用いてレジスタの値を更新するレジスタ制御ユニットと，レジスタに記憶された値を用いて固定長のビット列を出力する最終処理ユニットと，を備え，データ圧縮ユニットは，データブロックと，レジスタに記憶された値とを用いてレジスタ長の変換結果を出力する線形圧縮ユニットと，線形圧縮ユニットの出力を用いて，レジスタ長の変換結果を出力する非線形置換ユニットと，を備えることを特徴とする。
【００１９】
さらに，上記ハッシュ値生成装置の非線形置換ユニットは，入力長がさらに小さい第二の非線形置換ユニットを備え，データ圧縮ユニットは以下の処理を行ってもよい。
【００２０】
Y ← L(X, M[i]), 
Y[1]||Y[2]||…||Y[w] ← Y, 
Z[j] ← Qj(Y[j]),(1 ≦ j ≦ w), 
Z ← Z[1]||Z[2]||…||Z[w]
（ただし，A←BはBをAへ代入することを，A||BはAとBの連結を表し，L（  ）は線形圧縮ユニットの出力を，Qj（  ）は第二の非線形置換ユニットの出力を，M[i]はメッセージパディングユニットが出力するi番目のデータブロックを，Xはレジスタに記憶されている値を，Yは線形圧縮ユニットの出力を，Zは非線形置換ユニットの出力を，表す）
さらに，上記ハッシュ値生成装置の線形圧縮ユニットは，以下の処理を行ってもよい。
【００２１】
X[1]||X[2]||…||X[w] ← X, 
T ← C×(X[1] XOR X[2] XOR … XOR X[w]), 
Y[j] ←X[j] XOR L[j](M[i]) XOR T, 
Y ← Y[1]||Y[2]||…||Y[w]
（ただし，A←BはBをAへ代入することを，A||BはAとBの連結を，A XOR BはAとBのビットごとの排他的論理和を，A×BはAとBの有限体上の乗算を表し，Cは非零の定数を，L[j]（  ）は互いに相異なる線形置換ユニットの出力を，M[i]はメッセージパディングユニットが出力するi番目のデータブロックを，Xはレジスタに記憶されている値を，Yは線形圧縮ユニットの出力を表す）
さらに，上記ハッシュ値生成装置の線形圧縮ユニットは，以下の処理を行ってもよい。
【００２２】
X[1]||X[2]||…||X[w] ← X, 
Y[j] ←X[j] XOR M[i], 
Y ← Y[1]||Y[2]||…||Y[w]
（ただし，A←BはBをAへ代入することを，A||BはAとBの連結を，A XOR BはAとBのビットごとの排他的論理和を表し，M[i]はメッセージパディングユニットが出力するi番目のデータブロックを，Xはレジスタに記憶されている値を，Yは線形圧縮ユニットの出力を表す）
さらに，上記ハッシュ値生成装置の第二の非線形置換ユニットは，入力が8ワードであり，4から8ビット単位の置換表で構成される第三の非線形置換ユニットと，2ワードのデータを入力とする線形置換ユニットと，定数加算ユニットと，ループ処理を行うための制御装置と，を備え，定数加算ユニットで加算される定数は，ループごとに異なるものであってもよい。
【００２３】
さらに，上記ハッシュ値生成装置の線形置換ユニットは以下の処理を行ってもよい。
【００２４】
a ← ax1, b ← bx1;
b ← b XOR a;
a ← a <<< i1;
a ← a XOR b;
b ← b <<< i2;
b ← b XOR a;
a ← a <<< i3;
a ← a XOR b;
b ← b <<< i4;
ay1 ← a, by1 = b;
（ただし，「x XOR y」はxとyのビットごとの排他的論理和を，「x <<< i」はxを1ワードのレジスタ内で左にiビット巡回シフトする演算を表す）
さらに，上記ハッシュ値生成装置の線形置換を定めるパラメータi1, i2, i3, i4のうち，i1, i2, i3は偶数であり，i4は奇数であり，さらにi2は4で割れなくてもよい。
【００２５】
さらに，上記ハッシュ値生成装置の最終処理ユニットは，第二のレジスタと，第三のレジスタと，第二のレジスタに記憶された値を線形に結合して第三のレジスタに出力する線形出力ユニットと，第二のレジスタに記憶された値を変換する非線形置換ユニットと，を備え，第三のレジスタに格納されたデータが，あらかじめ定められた出力ビット長に達するまで，非線形置換ユニットと線形出力ユニットとの処理を繰り返し行ってもよい。
【００２６】
また，本発明の他の態様は，上述のハッシュ値生成装置の構成を備え，固定長の秘密鍵と，任意長のメッセージから固定長のビット列を出力するメッセージ認証子生成装置である。
【００２７】
また，本発明の更に他の態様は，少なくとも1台のサーバと，複数の端末と，ネットワークからなるシステムであって，サーバは，演算ユニットとメモリと記憶装置と通信装置と暗号処理装置とを備え，端末は，演算ユニットとメモリと記憶装置と暗号処理装置とを備え，暗号処理装置が，上述のハッシュ値生成装置の構成を備えることを特徴とする。
【発明の効果】
【００２８】
本発明によれば，ソフトウェア，ハードウェアいずれにおいても実装コストを低く抑えることが可能な，並列性の高いハッシュ値生成技術を提供できる。
【発明を実施するための最良の形態】
【００２９】
(用語の説明)
・ハッシュ関数(hash function)：任意の有限長のデータから固定長の疑似乱数(ハッシュ値)を生成する関数。
・疑似乱数(pseudorandom number)：有限，もしくは無限のビット列であり，どのような方法でも真性乱数と区別することができないもの。
・真性乱数：無限ビット列であり，任意の連続する部分列が与えられても，次の1ビットを推定することができないような列のこと。
・鍵：暗号化処理の際に用いる秘匿パラメータ。
・圧縮関数：一定長の入力から一定長の乱数を生成する暗号技術。ただし，出力長は入力長よりも短いものとする。
・非線形変換：状態更新関数のうち，線形変換でないもの。
・Sボックス(S箱)：3〜10ビット程度の置換表。高い非線形性と攪拌性を伴った変換を表参照で行えるうえ，簡単な構成による実現が可能であることから，暗号の実装に多く用いられる。
【００３０】
以下，本発明の実施形態を，図を用いて説明する。ただし，以下の説明において，次の表記を用いる。
【００３１】
A←BはBをAへ代入すること
A||BはAとBの連結
A XOR Bは，AとBのビットごとの排他的論理和。
【００３２】
図1は本実施形態におけるハッシュ値生成装置の機能構成を表す概略図である。以下，図1に従ってハッシュ値生成装置の構成を説明する。
【００３３】
ハッシュ値生成装置(101)は，外部入力(102)としてメッセージM(121)とメッセージ長に関する情報(122)をとる。これらの情報は，ユーザがハッシュ値生成装置(101)に与える情報である。これに加えて，ハッシュ値生成装置(101)は回路を動作させるタイミングを制御するクロック信号をクロック生成ユニット(103)から受け取る。これらの情報を入力とし，ハッシュ値生成装置(101)は固定長のハッシュ値(104)を出力する。
【００３４】
ハッシュ値生成装置(101)は，メッセージパディングユニット(111)，初期化ユニット(112)，レジスタ(113)，データ圧縮ユニット(114)，最終処理ユニット(115)，カウンタ(116)，制御ユニット(117)，およびレジスタ(113)への入力を制御するセレクタ(118)，最終処理ユニットへの入力を制御するスイッチ(119)から構成される。
【００３５】
セレクタ(118)およびスイッチ(119)の切り替え操作は，制御ユニット(117)が行う。制御ユニット(117)はクロック生成ユニット(103)からカウンタ(116)を介して信号を受信する。制御ユニット(117)はスイッチ(119)を接続し，レジスタ(113)の保持している値を最終処理ユニット(115)に入力する。最終処理ユニット(115)は与えられた入力からハッシュ値(104)を出力する。また，制御ユニット(117)はクロック信号を受信すると，データ圧縮ユニット(114)を動作させ，レジスタ(113)の値を更新する。
【００３６】
初期化ユニット(112)は，レジスタ(113)の初期値を出力する。
【００３７】
メッセージパディングユニット(111)は入力されたメッセージ(121)に特定のビット列を付与することにより，データをレジスタ(113)の定数倍の長さに整える。メッセージパディングユニット(111)は制御ユニット(117)を介してメッセージ長に関する情報(122)をメッセージ(121)に付与しても良い。
【００３８】
上記構成は，ハードウェア，ソフトウェア，または，これらの組み合わせにて実現することが可能である。
【００３９】
一部または全部をソフトウェアで実現する場合，CPUとメモリと外部記憶装置を備えた一般的な電子計算機において，メモリに格納されたソフトウェア(プログラム)をCPUが実行することにより，本実施形態における処理を行う各要素が具現化される。
【００４０】
これらのプログラムは，予め，上記電子計算機内のメモリまたは外部記憶装置に格納されていても良いし，必要なときに，上記電子計算機が利用可能な，着脱可能な記憶媒体から，または通信媒体（上記電子計算機が接続可能なネットワーク，または当該ネットワーク上を伝搬する搬送波やデジタル信号など）を介して他の装置から，導入されてもよい。
【００４１】
図2は図1に示すハッシュ値生成装置(101)の処理手順を表すフローチャートである。以下，図2に従って本実施形態におけるハッシュ値生成装置(101)の処理手順を説明する。
ステップ1(201)：ハッシュ値生成装置(101)は，メッセージM(121)，メッセージ長に関する情報L(122)を受信し，制御ユニット(117)の信号に従って動作を開始する。
ステップ2(202)：メッセージパディングユニット(111)は受信したメッセージM(121)にあらかじめ定められた方法で，データ長がレジスタ(113)の定数倍となるようにビット列を付加する。パディング処理を施したメッセージをM’=M[1], M[2], …, M[N]と表す。
ステップ3(203)：ハッシュ値生成装置(101)は，カウンタ(116)の値を1にセットする。また，メッセージ長に関する情報Lから定まるデータ圧縮ユニットの処理回数Nを制御ユニット(117)にセットする。
ステップ4(204)：ハッシュ値生成装置(101)は，初期化ユニット(112)の出力する初期値をレジスタ(113)にセットする。
ステップ5(205)：ハッシュ値生成装置(101)は，クロック生成ユニット(103)からの信号を受け取り，カウンタ(116)の値がN以下であれば以下のステップを行う。カウンタ(116)の値がNを超えている場合には，ステップ6(209)の処理を行う。それ以外の場合にはステップ7(206)以降の処理を行う。
ステップ6(209,210)：ハッシュ値生成装置(101)はスイッチ(119)を接続状態にし，レジスタ(113)のデータを最終処理ユニット(115)に入力する。最終処理ユニット(115)は入力を受け取ると，ハッシュ値(104)として出力する。
ステップ7(206)：メッセージパディングユニット(111)は，カウンタ(116)の数値に従ってメッセージブロック固定長のメッセージブロックM[l]をデータ圧縮ユニット(114)に入力する。
ステップ8(207)：データ圧縮ユニット(114)は入力されたレジスタ(113)に記憶されているデータと，メッセージパディングユニット(111)から入力されたメッセージブロックM[l]に対して攪拌，圧縮処理を行い，出力をレジスタ(113)にセットする。
ステップ9(208)：カウンタ(116)の値をインクリメントする。
【００４２】
図3は本実施形態におけるハッシュ値生成装置(101)のデータ圧縮ユニット(114)の構成を表す概略図である。
【００４３】
図3では，便宜上レジスタ(113)を時刻tにおけるレジスタ(301)と時刻t+1におけるレジスタ(302)に分けて示している。データ圧縮ユニット(114)は時刻tのレジスタ(301)の状態から時刻t+1のレジスタ(302)の状態を生成する。データ圧縮ユニット(114)は1つの線形圧縮ユニット(1101)と1個の非線形置換(1102)ユニットで構成される。線形圧縮ユニット(1101)はメッセージブロック(303)とレジスタ(114)の値を入力とし，レジスタ長のデータを出力する線形変換を行い，非線形置換ユニット(1102)は，線形圧縮ユニット(1101)の出力Yを入力とし，レジスタ長のデータを出力する。
【００４４】
線形圧縮ユニット(1101)は，メッセージブロック(303)の各ビットが多くの出力ビットに波及するような性質を持つことが望ましい。
【００４５】
たとえば、線形圧縮ユニットの変換行列をLで表すとき、行列(I|L)が最大距離分離符号の生成行列になっていれば良い。ただし、Iは単位行列を、(I|L)は行列IとLの連結を表す。また、たとえば，レジスタ(114)に格納されたデータのサイズがメッセージブロックのブロック長の整数倍である場合に，データをXとすると，線形圧縮ユニット(1101)は以下の変換を行う。
【００４６】
X[1]||X[2]||…||X[w] ← X, 
Y[j] ← X[j] XOR M[i], 1 ≦ j ≦ w, 
Y ← Y[1]||Y[2]||…||Y[w].
このような変換を用いることで，従来のスポンジ関数に比べて非線形置換ユニットの拡散性が低くても，高い安全性を保証することができる。
【００４７】
上記線形圧縮ユニット(1101)と非線形置換ユニット(1102)の具体的構成については，後述する。
【００４８】
図4は本発明の他の実施形態におけるハッシュ値生成装置(101)のデータ圧縮ユニット(114)の構成を表す概略図である。
【００４９】
図4では，本実施形態におけるレジスタ(114)はw個の中レジスタ(311)から構成されている。これらの中レジスタを中レジスタ1, 中レジスタ2, …, 中レジスタwと表記する。中レジスタのサイズ(レジスタ長)は最終処理ユニットの出力するハッシュ値と異なる値でも良い。中レジスタはさらに複数の小レジスタで構成される。本実施例では，小レジスタのサイズを1ワードと呼ぶ。以下，本実施例では，中レジスタは小レジスタ8個で構成されるものとする。
【００５０】
データ圧縮ユニット(114)は1つの線形圧縮ユニット(331)とw個の非線形置換(332)ユニットで構成される。これらの非線形置換ユニットを区別する場合には，非線形置換ユニット1, 非線形置換ユニット2, …, 非線形置換ユニットwと表記する。非線形置換ユニット(332)はそれぞれ異なる処理を行う非線形置換とする。線形圧縮ユニット(331)はメッセージブロック(303)とレジスタ(114)の値を入力とし，レジスタ長のデータを出力する線形変換である。データ圧縮ユニット(114)は，線形圧縮ユニット(331)の出力を8ワードごとに等分し，それぞれを非線形置換ユニット(332)に入力する。非線形置換ユニットQj (332)の出力はそれぞれ時刻t+1の中レジスタj (321)に書き込まれる。時刻tの中レジスタの値をX[1], X[2], …, X[w]，時刻t+1の中レジスタの値をY[1], Y[2], …, Y[w]，メッセージブロックをM[i]とすると，データ圧縮ユニット(114)の処理は以下の式で表すことができる。
【００５１】
Y[j] ← Qj (Lj(X[1], …, X[w], M[i])), (1 ≦ j ≦ w).
ただし，(L1, L2, …, Lw)は線形圧縮ユニット(331)の変換を表す。
【００５２】
図5は本実施形態において，メッセージブロック(303)が中レジスタ(311)のサイズと同じである場合の線形圧縮ユニット(331)の構成例を表す概略図である。
【００５３】
線形圧縮ユニット(331)は，メッセージブロック(303)を中レジスタ(331)に格納されているデータとそれぞれ排他的論理和を行う。
【００５４】
図6は図4に示す非線形置換ユニット(332)の構成例を表す概略図である。非線形置換ユニット(332)は，線形圧縮ユニット(331)の出力の一部(401)を取り，攪拌を行った結果を出力する。非線形置換ユニット(332)は，2個の小非線形置換ユニット(502)，4個の線形置換ユニット(503)，1個の定数加算ユニット(504)，および処理回数を制御するセレクタ(505)とスイッチ(506)で構成される。
【００５５】
セレクタ(505)は，制御ユニット(117)からの信号を受信して，線形圧縮ユニット(331)からの入力と，ループ入力の切り替えを行う。ループ回数は8回以上であることが望ましい。
【００５６】
また，図3に示すレジスタ(301)(302)の幅が256ビットの倍数であれば，図3に示す非線形置換ユニット1102として，上記非線形置換ユニット(332)を複数並べて構成しても良い。
【００５７】
非線形置換ユニット(332)がループの内側で行う処理は以下の式で表される。
【００５８】
a1||a2||a3||a4||b1||b2||b3||b4 ← Y[i];
ax1||ax2||ax3||ax4 ← S1(a1, a2, a3, a4);
bx1||bx2||bx3||bx4 ← S2(b1, b2, b3, b4);
ay1||by1 ← L1(ax1, bx1);
ay2||by2 ← L2(ax2, bx2);
ay3||by3 ← L3(ax3, bx3);
ay4||by4 ← L4(ax4, bx4);
azj ← ayj XOR c[i][j], 1 ≦ j ≦ 8, 
ただし，x||yはxとyの連結を表す。また，Skは小非線形置換ユニット(502)による変換，Lkは線形置換ユニット(503)による変換を表す。c[i][j]は定数である。小非線形置換ユニット(502)，線形置換ユニット(503)は同一の変換を用いても良い。
【００５９】
図7は小非線形置換ユニット(502)の構成例を表す概略図である。
【００６０】
1ワードをnビットとする。図7の構成例では，小非線形置換ユニット(502)は4ビット入力4ビット出力の置換表Sa(602)を用いて以下の変換を行う。
【００６１】
ax4[t]||ax3[t]||ax2[t]||ax1[t] ← Sa[ a4[t]||a3[t]||a2[t]||a1[t] ]
ただし，a1[t]は1ワードの入力a1の下からtビット目の値を表す。置換表はビット位置ごとに異なる表を用いても良い。
【００６２】
図8は線形置換ユニット(503)の構成例を表す概略図である。
【００６３】
図8の線形置換は，排他的論理和と巡回シフト演算で構成される。巡回シフト数を上から順にi1, i2, i3, i4と表すとき，図8の線形置換ユニット(503)は以下の変換を行う。
【００６４】
a ← ax1, b ← bx1;
b ← b XOR a;
a ← a <<< i1;
a ← a XOR b;
b ← b <<< i2;
b ← b XOR a;
a ← a <<< i3;
a ← a XOR b;
b ← b <<< i4;
ay1 ← a, by1 = b;
ただし，x XOR yはxとyのビットごとの排他的論理和を，x <<< iはxを1ワードのレジスタ内で左にiビット巡回シフトする演算を表す。巡回シフト数を定めるパラメータi1, i2, i3, i4の組み合わせとして，たとえば(4, 2, 10, 1)を用いても良い。これらのパラメータは線形置換ユニットごとに異なる値でも良い。
【００６５】
上記図6〜図8に示す構成例は，図3，図４に示すデータ圧縮ユニット(114)どちらにも適用可能である。
【００６６】
図9は本実施形態において，図3の線形圧縮ユニット(1101)の構成例を表す概略図であって，図4，図5に示す線形圧縮ユニット(331)の異なる構成例である。線形圧縮ユニット(1101)は，線形出力ユニット(1211)，w個の線形変換ユニット(1212,1213,1214)で構成される。
【００６７】
線形変換ユニットは互いに相異なる置換であれば良く，例えば，2のN乗の元を持つ有限体上の乗算を用いて，それぞれ1倍，2倍，4倍を行えばよい。
【００６８】
線形圧縮ユニット(1101)は，中レジスタ(311)に格納されているデータを線形出力ユニット(1211)に入力し，線形出力ユニット(1211)は，中レジスタ(331)のサイズと同じ長さのデータを出力する。線形出力ユニット(1211)は，たとえば以下の変換を行う。
【００６９】
T ← 2×(X[1] XOR X[2] XOR … XOR X[w])
ここで，Tは線形出力ユニット(1211)の出力であり，A×Bはレジスタ長をNとするとき，2のN乗の元を持つ有限体上の乗算を表す。線形出力ユニット(1211)の出力Tは，中レジスタ(331)に格納されている値と排他的論理和される。線形圧縮ユニット(1101)は，メッセージブロック(303)を線形変換ユニット(1212,1213,1214)で変換された値と，中レジスタ(311)に格納されているデータと，線形出力ユニット(1211)の出力を排他的論理和する。
【００７０】
図10は本実施形態において，最終処理ユニット(115) の構成例を表す概略図である。最終処理ユニット(115)は，入力(1301)を受け取ると，所定の処理を行い，固定長のハッシュ値(104)を出力する。入力(1301)はレジスタ(113)からスイッチ(119)を経由して入力されたもので、データのサイズはレジスタ(113)の大きさに等しい。
【００７１】
最終処理ユニット(115)は，2つのレジスタ(1311, 1312)，非線形置換ユニット(1313)，線形出力ユニット(1314)，レジスタ1への入力を制御するセレクタ(1315)，線形出力ユニット(1314)への入力を制御するスイッチ(1316)で構成される。
【００７２】
レジスタ２(1312)は出力ハッシュ値を格納するためのレジスタである。また，セレクタ(1315)，スイッチ(1316)の動作は制御ユニット(117)で制御されている。非線形置換ユニット(1313)は，図3の非線形置換ユニット(1102)と同じ変換を用いても良い。また，入力(1301)と同じ幅を持つ線形出力ユニット(1314)は，例えば，入力(1301)が中レジスタ(311)の幅のw倍である場合，入力(1301)を中レジスタ(311)の幅で分割し，w個の分割後データの排他的論理和により，一つの中レジスタ(311)の幅に圧縮して出力する処理を行う。より具体的には，図９の線形出力ユニット(1211)と同じ変換を用いても良い。
ステップ１：最終処理ユニット(115)は，セレクタ(1315)を介して入力されたデータをレジスタ１(1311)にセットする。
ステップ２：最終処理ユニット(115)は，制御装置(117)を介してクロック信号を受け取り，レジスタ２(1312)に格納されたデータがハッシュ長に達するまでステップ3を繰り返す。レジスタ２(1312)に格納されたデータがハッシュ長に達した場合には，ステップ4の処理を行う。
ステップ３：最終処理ユニット(115)は，レジスタ１(1311)に格納されたデータを非線形置換ユニット(1313)に入力し，その出力をレジスタ１(1311)に格納する。
ステップ４：最終処理ユニット(115)は，レジスタ１(1311)に格納されたデータを線形出力ユニット(1314)に入力し，その出力をレジスタ２(1312)に格納する。
ステップ５：最終処理ユニット(115)はスイッチ(1316)を接続状態にし，レジスタ２(1312)のデータをハッシュ値(104)として出力する。
【００７３】
ステップ３の処理は，ステップ４の処理を行う前に複数回繰り返し行っても良い。
【００７４】
また、線形出力ユニット(1314)の出力幅は中レジスタ1(311)の幅以下であることが望ましい。中レジスタ1(311)の幅が256ビット、線形出力ユニット(1314)の出力幅が同じく256ビットの場合、出力ハッシュ長が256ビットならば、ステップ3〜5を1回のみ実行すれば良い。また、中レジスタ1(311)の幅が256ビットでハッシュ長が512ビットの場合であれば、ステップ3，4を2回繰り返すことにより、レジスタ１(1311)に格納されたデータそれぞれを線形出力ユニット(1314)へ入力し，線形出力ユニット(1314)の2回分の出力を合成して最終的な出力とすればよい。ハッシュ長が中レジスタ1(311)の幅の整数倍でない場合には、ハッシュ長を超える最小の出力を生成し、その結果を適宜切り詰めて最終的な出力とすればよい。たとえば、ハッシュ長が384ビットの場合には、ステップ3〜5を2回繰り返し、512ビットの出力をレジスタ2(1312)に格納し、そのうち384ビットをハッシュ値(104)として出力すればよい。
【００７５】
なお，ステップ3〜5の処理は，メッセージ長に依存して変更しても良い。例えば，ハッシュ長が256ビットで，メッセージ長が256ビット未満の場合は，ステップ3を実行する前のレジスタ１(1311)への入力をそのまま線形出力ユニット(1314)に出力してもよい。また，ハッシュ長が512ビットで，メッセージ長が256ビット未満の場合は，ステップ3を実行する前のレジスタ1(1311)への入力と，ステップ3〜4を一回実行した結果とを，線形出力ユニット(1314)への2回分の入力としてもよい。
【００７６】
図11は本実施例によるハッシュ値生成ユニットを用いたメッセージ認証子生成ユニットの構成例を表した概略図である。
【００７７】
図11の構成例によるメッセージ認証子生成ユニット(801)は，2つのメッセージ長計算ユニット，2つのハッシュ値生成ユニットで構成され，任意長のメッセージM(802)と鍵情報K(803)を入力されると，以下の手続きに従って，固定長の乱数であるメッセージ認証子(804)を出力する。
ステップ１：メッセージ認証生成ユニット(801)は，鍵情報K(803)と定数C1を排他的論理和し，メッセージM(802)と合わせて入力データ1(812)を生成する。
ステップ２：メッセージ長計算ユニット1(813)は，入力データ1(812)を入力されると，そのデータサイズをメッセージ長L1(814)として出力する。
ステップ３：ハッシュ値生成ユニット1(815)は，入力データ1(812)とメッセージ長L1(814)を入力されると，入力データ1(812)のハッシュ値を出力する。
ステップ４：メッセージ認証子生成ユニット(801)は，鍵情報K(803)と定数C2を排他的論理和し，ステップ３で生成されたハッシュ値と合わせて入力データ2(822)を生成する。
ステップ５：メッセージ長計算ユニット2(823)は，入力データ2(822)を入力されると，そのデータサイズをメッセージ長L2(824)として出力する。
ステップ６：ハッシュ値生成ユニット2(825)は，入力データ2(822)とメッセージ長L2(823)を入力されると，入力データ2(822)のハッシュ値をメッセージ認証子(825)として出力する。
【００７８】
本実施例の一つの好ましい応用例は，携帯電話などの端末からサーバにアクセスする際のユーザ認証システムである。以下，本実施例を利用した認証システムについて説明する。
【００７９】
図12は本実施形態におけるハッシュ値生成装置(101)を用いて認証処理を行う認証装置の構成を表す概略図である。
【００８０】
認証装置(901)は，I/Oインターフェース(911)，メモリ(912)，CPU(913)，記憶装置(914)で構成される。記憶装置(914)にはメッセージ認証子生成ユニットをソフトウェアで実現したメッセージ認証子生成プログラム(921)と，それを内蔵する処理プログラム(922)，そして鍵情報(923)を記憶している。認証装置(901)は，I/Oインターフェース(911)を介して入力データ(902)を受け取ると，以下の手続きに従って処理を行い，メッセージ認証子(804)を出力データ(903)として出力する。
ステップ１：認証装置(901)は，メッセージ認証子生成プログラム(921)を内蔵する認証用の処理プログラム(922)をメモリ(912)にロードする。
ステップ２：認証装置(901)は，記憶装置(914)に記憶された鍵情報(923)をメモリにロードし，I/Oインターフェース(911)を介して入力された入力データ(902)と合わせて処理プログラム(922)に入力する。
ステップ３：処理プログラム(922)はメッセージ認証子生成ユニット(921)に入力データ(902)と鍵情報(923)を入力し，メッセージ認証子(804)を計算する。
ステップ４：処理プログラム(922)はステップ３で計算したメッセージ認証子(804)を出力データ(903)として，I/Oインターフェース(911)を介して出力する。
【００８１】
図13は本実施形態を応用した機器認証システムの構成例である。
【００８２】
機器認証システムは認証サーバ(1001)，端末装置(1002)，および通信路であるネットワーク(1003)からなる。ネットワークは有線でも無線でも良い。また，端末装置はPCや携帯電話のほか，センサやICカードなどでも良い。
【００８３】
認証サーバ(1001)は記憶装置(1011)，CPU(1012)，メモリ(1013)，暗号処理システム(1014)および通信装置(1015)から構成されており，記憶装置(1011)には端末のID，鍵情報などからなる端末情報のデータベース(1016)が格納されている。端末装置(1002)は記憶装置(1021)，CPU(1022)，メモリ(1023)，暗号処理システム(1024) および通信装置(1025)から構成されている。
【００８４】
端末機器(1002)の認証処理は，次の手続きに従って行われる。
ステップ１：端末機器(1002)は，ネットワーク(1003)を介して，認証サーバ(1001)に認証要求信号と端末IDを送信する。
ステップ２：認証サーバ(1001)は認証要求信号を受信すると，暗号処理システム(1014)を用いて乱数を生成し，ネットワーク(1003)を介して端末機器(1002)に送信する。
ステップ３：端末機器(1002)は乱数情報を受信すると，鍵情報(923)と合わせて暗号処理システム(1024)に入力し，メッセージ認証子を計算し，認証サーバ(1001)に返信する。
ステップ４：認証サーバ(1001)はデータベース(1016)にアクセスし，端末のID情報から対応する鍵情報(923)を呼び出し，ステップ２で生成した乱数情報と合わせて暗号処理システム(1014)に入力し，メッセージ認証子を計算する。
ステップ５：認証サーバ(1001)は端末機器(1002)がステップ３で送信したメッセージ認証子を受信すると，ステップ４で計算したメッセージ認証子と一致するかどうかを確認する。
【図面の簡単な説明】
【００８５】
【図１】実施例におけるハッシュ値生成装置の概略構成を例示する図である。
【図２】実施例におけるハッシュ値生成装置の処理手順を例示するフローチャートである。
【図３】実施例におけるハッシュ値生成装置のデータ圧縮ユニットの概略構成を例示する図である。
【図４】実施例におけるハッシュ値生成装置に用いるデータ圧縮ユニットの概略構成を例示する図である。
【図５】実施例におけるデータ圧縮ユニットに用いる線形圧縮ユニットの概略構成を例示する図である。
【図６】実施例におけるデータ圧縮ユニットに用いる非線形置換ユニットの概略構成を例示する図である。
【図７】実施例における非線形置換ユニットに用いる小非線形置換ユニットの概略構成を例示する図である。
【図８】実施例における非線形置換に用いる線形置換ユニットの概略構成を例示する図である。
【図９】実施例におけるハッシュ値生成装置の線形圧縮ユニットの概略構成を例示する図である。
【図１０】実施例におけるハッシュ値生成装置の最終処理ユニットの概略構成を例示する図である。
【図１１】実施例におけるハッシュ値生成装置を用いたメッセージ認証装置の概略構成を例示する図である。
【図１２】実施例に基づく認証装置の概略構成を例示する図である。
【図１３】実施例におけるハッシュ値生成装置を用いた認証システムの概略構成を例示する図である。
【符号の説明】
【００８６】
１０１：ハッシュ値生成装置，１０２：外部入力データ，１０３：クロック生成ユニット，１０４：ハッシュ値，１１１：メッセージパディングユニット，１１２：初期化ユニット，１１３：レジスタ，１１４：データ圧縮ユニット，１１５：最終処理ユニット，１１６：カウンタ，１１７：制御ユニット，１１８：セレクタ，１１９：スイッチ，３３１：線形圧縮ユニット，３３２：非線形置換ユニット。
【図１】
2010049037.tif 000003
【図２】
2010049037.tif 000004
【図３】
2010049037.tif 000005
【図４】
2010049037.tif 000006
【図５】
2010049037.tif 000007
【図６】
2010049037.tif 000008
【図７】
2010049037.tif 000009
【図８】
2010049037.tif 000010
【図９】
2010049037.tif 000011
【図１０】
2010049037.tif 000012
【図１１】
2010049037.tif 000013
【図１２】
2010049037.tif 000014
【図１３】
2010049037.tif 000015