説明

ハッシュ値演算装置、方法、プログラム及びその記録媒体

【課題】攻撃を受けているかどうかをより少ない記憶領域で実現する。
【解決手段】入力されたビット列に対応するハッシュ値を演算する演算部2と、攻撃を受けている可能性が高い場合に上記演算部でハッシュ値を演算する過程で生じるビット列が満たす条件を記憶するパターン記憶部4と、上記演算部でハッシュ値を演算する過程で生じたビット列が、上記パターン記憶部から読み込んだ条件を満たすか判断して、条件を満たす場合には攻撃を受けていると判断する判断部1とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、暗号学的ハッシュ関数(以下、単にハッシュ関数と呼ぶ。)に対するショートカット攻撃を検出する技術に関する。
【背景技術】
【0002】
ハッシュ関数Hは、任意の長さのビット列を入力して、固定長のビット列を出力する関数である。ハッシュ関数Hは、少なくとも次の2つの性質を満たす場合に安全と呼ばれる。
【0003】
1.衝突困難性 H(x)=H(x’)となるx,x’(≠x)を見つけることが演算量的に困難
2.一方向性 与えられたyに対してy=H(x)となるxを見つけることが演算量的に困難
【0004】
ハッシュ関数Hの出力値のビット数をnとする。このとき、誕生日の逆理により、どのようなハッシュ関数Hに対しても、ランダムな入力xを2n/2程度生成しそれぞれの入力xに対してハッシュ値H(x)を演算すれば、H(x)=H(x’)となるx,x’(≠x)を高い確率で見つけることができ、衝突困難性を破ることができる。また、ランダムな入力xを2程度生成しそれぞれの入力xに対してハッシュ値H(x)を演算すれば、与えられたyに対してy=H(x)となるxを高い確率で見つけることができ、一方向性を破ることができる。
【0005】
一般に、nは十分大きな値であり、ハッシュ関数HがMD5の場合にはn=128ビットである。したがって、2n/2及び2は一般に膨大な数となる。「演算量的に困難」とは、上記のように、衝突困難性を破るためにはハッシュ値H(x)を2n/2回程度演算する必要があることを意味し、一方向性を破るためにはハッシュ値H(x)を2回程度演算する必要があることを意味する。
【0006】
これに対して、2n/2回以下のハッシュ値H(x)の演算よりも少ない演算量で衝突困難性を破る手法や、2回以下のハッシュ値H(x)の演算よりも少ない演算量で一方向性を破る手法がある場合、これらの手法をショートカット攻撃と呼ぶ。
【0007】
ハッシュ関数の具体例として、MD4、MD5、SHA−1、SHA−2等が知られている。MD4、MD5、SHA−1については、暗号解析技術の進歩によりショートカット攻撃が知られており安全ではなくなっている。しかし、これらのハッシュ関数は現在も多くのシステムで使われている。例えば電子メールをサーバから受信するための認証プロトコルAPOPではMD5が使われている。
【0008】
MD5の衝突困難性を破るショートカット攻撃によりAPOPで用いられるパスワードを復元する技術が非特許文献1に記載されている。また、この非特許文献1に記載された攻撃を検出する技術が非特許文献2に記載されている。非特許文献2では、攻撃を完全に検出するためにはMD5の過去の演算結果を全て記憶しておき、MD5の演算を行う度に、そのMD5の演算結果とこれまでに演算したMD5の各演算結果とが一致するかどうかを判定し、一致すれば攻撃を受けていると判断する。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】Yu Sasaki, Lei Wang, Kazuo Ohata, Noboru Kunihiro, “Security of MD5 Challenge and Response: APOP Password Recovery Attack”, CT-RSA2008, 2008
【非特許文献2】奥秋清次,坂井祐介,太田和夫、國廣昇,「APOP攻撃検知法の提案とシミュレーションによる検証:目には目を,歯には歯を」,SCIS2009,2009
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、非特許文献2に記載された技術では、攻撃を完全に検出するためにはMD5の過去の演算結果を全て記憶しておくため膨大な記憶領域が必要であるというという課題がある。
【課題を解決するための手段】
【0011】
上記の課題を解決するために、この発明は、攻撃を受けている可能性が高い場合にハッシュ値を演算する過程で生じるビット列が満たす条件をパターン記憶部に記憶しておき、ハッシュ値を演算する過程で生じたビット列が上記パターン記憶部から読み出した条件を満たすか判断して、その条件を満たせば攻撃を受けていると判断する。
【発明の効果】
【0012】
攻撃を受けている可能性が高い場合にハッシュ値を演算する過程で生じるビット列が満たす条件を記憶しておけば足り、MD5の過去の演算結果の全てを記憶しておく必要はない。したがって、必要な記憶領域を削減することができる。
【図面の簡単な説明】
【0013】
【図1】ハッシュ値演算装置の例の機能ブロック図。
【図2】演算部の例の機能ブロック図。
【図3】ハッシュ値演算方法のフローチャートを例示する図。
【図4】攻撃ビット条件を例示する図。
【図5】攻撃ビット条件を例示する図。
【発明を実施するための形態】
【0014】
以下、この発明の実施の形態について、詳細に説明する。
図1にハッシュ値演算装置の機能ブロック図を例示する。図3にハッシュ値演算方法のフローチャートを例示する。
【0015】
パターン記憶部4には、攻撃を受けている可能性が高い場合にハッシュ値を演算する過程で生じるビット列が満たす条件(以下、攻撃ビット条件する。)が記憶されている。攻撃ビット条件は、用いるハッシュ関数Hや攻撃方法により異なる。攻撃ビット条件の具体例については後述する。
【0016】
ビット列xは、演算部2に入力される。必要に応じて、判断部1にも入力される。
【0017】
図1に、演算部2の機能ブロック図を例示する。演算部2のハッシュ値演算部21は、入力されたビット列xをハッシュ関数Hに入力することによりハッシュ値H(x)を演算する(ステップS1)。一般に、ハッシュ値H(x)の演算は複数のステップから成り立っており、最終的なハッシュ値を演算するまでの各ステップにおいて中間演算結果であるビット列が生じる。このハッシュ値H(x)を演算する過程で生じたビット列は、判断部1に送られる。
【0018】
ハッシュ値H(x)を演算する過程で生じたビット列は一般に複数存在する。複数存在するビット列の中で、後述する判断部1が攻撃の有無の判断のために用いるビット列が少なくとも判断部1に送られる。この段階ではハッシュ値H(x)の演算は必ずしも最後まで行われる必要はない。少なくとも判断部1が攻撃の有無の判断のために用いるビット列が得られるステップまでハッシュ値H(x)の演算を行えば足りる。
【0019】
判断部1は、ハッシュ値H(x)を演算する過程で生じたビット列が、パターン記憶部4から読み出した、そのビット列に対応する攻撃ビット条件を満たすか判断する(ステップS2)。
【0020】
攻撃ビット条件を満たさない場合には、攻撃を受けていないと判断して、ハッシュ値演算装置は演算されたハッシュ値H(x)を、入力されたビット列xに対応する出力値yとして出力する(ステップS3)。ステップS1において、ハッシュ値H(x)を最後まで演算していない場合には、攻撃を受けていないとステップS2において判断された後に、ハッシュ値H(x)を最後まで演算して出力する。
【0021】
攻撃ビット条件を満たす場合には、攻撃を受けていると判断する。攻撃を受けていると判断された場合、攻撃を受けている旨の判断結果が警告部3に送られて、警告部3は攻撃を受けている旨の警告情報を出力する(ステップS4)。
【0022】
攻撃を受けているかどうかを判断するために考慮すべきビット列が複数ある場合には、判断部1はこれらのビット列の全部又は一部のそれぞれが、パターン記憶部4から読み出した対応する攻撃ビット条件が満たすかどうかを判断する。判断部1は、これらのビット列の全部又は一部のそれぞれが対応する攻撃ビット条件を満たす場合には、攻撃を受けていると判断する。
【0023】
ハッシュ関数の中にはいわゆるマークル・ダンガード構造で構成されているものがある。これは、入力されたビット列xをx=x‖x‖…‖xL−1とL個のビット列に分割し、IV(Initial Value)を定数とし、y=IVとし、i=1,…,L−1として、yi+1=h(y,x)の演算を順次繰り返すことにより得たyを入力されたビット列xに対するハッシュ値とするものである。
【0024】
=IV
i+1=h(y,x),i=1,…,L−1
ハッシュ関数がこのマークル・ダンガード構造で構成されている場合には、入力されたビット列xに対応するハッシュ値H(x)を演算する過程で生じるビット列の内、あるh(y,x)(演算量を削減するためにiは小さい方が望ましい。)を演算する過程で生じるビット列を、攻撃を受けているかどうかを判断するために考慮すべきビット列としてもよい。また、各h(y,x)(i=1,…,L−1)を演算する過程で生じるビット列を、攻撃を受けているかどうかを判断するために考慮すべきビット列としてもよい。攻撃を受けているかどうかを判断するために考慮すべきビット列が多くなるほど、攻撃を検出することができる確率が上がる。
【0025】
従来はMD5の演算結果の全てを記憶しておく必要があったが、この発明においては攻撃ビット条件を記憶しておけば足り、必要な記憶領域を削減することができる。
【0026】
[変形例等]
ステップS2において、ハッシュ値H(x)を演算する過程で生じたビット列が対応する攻撃ビット条件を満たしており、攻撃を受けていると判断することができる場合に、ハッシュ値H(x)とは異なる値を入力ビット列xに対応する出力値yとして出力してもよい。
【0027】
例えば、ハッシュ値H(x)とは異なる関数の値D(x)を演算して、入力ビット列xに対応する出力値yとしてD(x)を出力してもよい(ステップS5、図3)。また、ハッシュ値H(x)とは異なる関数の値D(x)(x≠D(x)となるD(x))を用いて、H(D(x))を演算して、入力ビット列xに対応する出力値yとしてH(D(x))を出力してもよい(ステップS6)。もちろん、H(H(x))を入力ビット列xに対応する出力値yとしてもよい。
【0028】
D(x)として、安全な乱数を生成する関数を採用できる。この場合、演算部2に乱数生成部22(図2)を設けて、この乱数生成部22が安全な乱数を生成する。生成された乱数を出力値yとして出力してもよいし(ステップS5)、ハッシュ値演算部21が生成された乱数rに対応するハッシュ値H(r)を演算して出力値yとして出力してもよい(ステップS6)
また、ハッシュ関数H(x)がパラメータに応じて出力する値が異なるハッシュ関数である場合には、パラメータを変更した関数をD(x)としてもよい。例えば、ハッシュ関数としてMD5を用いる場合には、いわゆるIV(Initial Value)を変更した関数をD(x)としてもよい。
【0029】
パラメータPに基づくハッシュ関数をH(x)、パラメータPに基づくハッシュ関数をD(x)とする。ステップS2において攻撃を受けていないと判断された場合には、演算部2のハッシュ値演算部21はハッシュ値H(x)を演算する(ステップS3)。ステップS2において攻撃を受けていると判断された場合には、パラメータ変更部23はハッシュ値演算部21が用いるハッシュ関数のパラメータをPに変更する。ハッシュ値演算部21は、ハッシュ値D(x)を演算して出力値yとして出力する(ステップS5)。また、ハッシュ値演算部24が、演算されたD(x)を用いてH(D(x))を演算して出力値yとして出力してもよい(ステップS6)。
【0030】
さらに、D(x)として、ハッシュ関数H(x)とは異なる安全なハッシュ関数を用いてもよい。安全なハッシュ関数とは現段階では例えばSHA−2である。この場合、ステップS2において攻撃を受けていると判断された場合には、ハッシュ値演算部21がD(x)を演算して出力値yとして出力する(ステップS5)。また、ハッシュ値演算部24が、演算されたD(x)を用いてH(D(x))を演算して出力値yとして出力してもよい。
【0031】
パターン記憶部4に記憶される、攻撃を受けている可能性が高い場合に演算部2でハッシュ値を演算する過程で生じるビット列が満たす条件を更新するパターン更新部5を設けてもよい。ハッシュ関数に対するショートカット攻撃は日々開発されている。新たに開発されたショートカット攻撃を受けている可能性が高い場合に演算部2でハッシュ値を演算するビット列が満たす条件をパターン記憶部4に追加することにより、その新たに開発されたショートカット攻撃に対応することができる。
【0032】
上記の例ではハッシュ値を演算する過程で生じたビット列が攻撃ビット条件を満たすかどうかにより攻撃の有無を判断したが、さらに入力されたビット列xがパターン記憶部2に記憶された対応する攻撃ビット条件を満たすかどうかにより攻撃の有無を判断してもよい。
【0033】
[攻撃ビット条件の具体例1]
ハッシュ関数H(x)としてMD5を用いた場合の攻撃ビット条件の具体例1について説明する。この具体例1は、参考文献1に記載されたMD5の衝突困難性に対するショートカット攻撃に基づくものである。
【0034】
〔参考文献1〕Xiaoyun Wang, Hongbo Yu, “How to Break MD5 and Other Hash Functions”, Advances in Cryptology, EUROCRYPT 2005, Volume 3494 of Lecture Notes in Computer Science, pp.19-35. Springer-Verlag, Berlin, Heidelberg, New York, 2005.
まず、MD5について説明する。MD5の詳細は参考文献2を参照のこと。
【0035】
〔参考文献2〕R. L. Rivest. Request for Comments 1321: The MD5 Message Digest
Algorithm. The Internet Engineering Task Force, 1992., http://www.ietf.org/rfc/rfc1321.txt
入力されたビット列xはパディング処理が施されて512ビットの倍数のビット列Mとなる。パティングは「x‖1‖0‖0‖…‖0‖xのビット長」となるように施される。xのビット長は64ビットで表示され、0はMが512ビットの倍数となるように適切な数だけ追加される。Mを以下のように表記する。M(i=0,1,…,t−1)は512ビットのビット列である。
【0036】
M=(M,M,…,Mt−1
MD5の圧縮関数をfとして、H(i=0,1,…,t)を128ビットのビット列とし、HをIV(Initial Value)として、H及びMを圧縮関数fに入力してHi+1を順次求める。最後に求まったHがMD5のハッシュ値となる。IVは例えば0123456789abcdeffedcba9876543210(16進数表記)である。
【0037】
=IV
i+1=f(H,M) 0≦i≦t−1
圧縮関数f(H,M)について説明する。512ビットの入力Mは16個の32ビットのワードに分割される。
【0038】
=(m,m,…,m15
また、128ビットの入力Hも4個の32ビットのワードに分割される。
【0039】
=(a,b,c,d
32ビットのワードに解釈される場合には常にリトルエンディアン(little endian)で解釈される。つまり、例えばa=67452301(16進数表記)となる。
【0040】
まず、以下の4つの式の演算がi=0,4,…,60に対して順に施される。これにより、(a,b,c,d),(a,b,c,d),…,(a16,b16,c16,d16)が順次演算される。
【0041】
a1+i/4 = bi/4 + ((ai/4 + Φi(bi/4,ci/4,di/4) + wi + ti) <<< si)
d1+i/4 = ai/4 + ((di/4 + Φi(ai/4,bi/4,ci/4) + wi+1 + ti+1) <<< si+1)
c1+i/4 = di/4 + ((ci/4 + Φi(di/4,ai/4,bi/4) + wi+2 + ti+2) <<< si+2)
b1+i/4 = ci/4 + ((bi/4 + Φi(ci/4,di/4,ai/4) + wi+3 + ti+3) <<< si+3)
ここで「+」はmod232の加算であり、X<<<YはXを左Yビット巡回シフトすることを示す。また、w=mπ(i)であり、π(i)は次の通りである。
【0042】
【数1】

【0043】
また、t(i=0,1,…,63)を次のように定める。一番左上がtであり、tの右がti+1であり、tの下がti+8であり、tを16進数で表記している。
【0044】
【数2】

【0045】
また、sを次のように定める
【数3】

さらに、Φを次のように定める。ここで、∧、∨、○の中に+の記号はそれぞれ論理積、論理和、排他的論理和を表し、上付きバーはビットごとの反転を表す。
【0046】
【数4】

最後に、H=(a,b,c,d)に(a16,b16,c16,d16)を足したものをHi+1とし、これが圧縮関数f(H,M)の出力となる。
【0047】
Hi+1 = (a0 + a16, b0 + b16, c0 + c16, d0 + d16)
このとき、攻撃ビット条件は図4及び図5に例示される。i=0,1,…,t−1、例えばi=0として、図4はHi+1=f(H,M)を演算するときに生じるビット列a,b,c,dについての攻撃ビット条件を例示し、図5はHi+2=f(Hi+1,Mi+1)を演算するときに生じるビット列a,b,c,dについての攻撃ビット条件を例示している。ai,jはビット列aの右からj番目のビットを意味する。bi,j,ci,j,di,jについても同様である。
【0048】
この例ではこのように判断部1が攻撃の有無の判断のために用いるビット列が複数ある。ハッシュ値を演算する過程で生じたビット列が図4及び図5に示す攻撃ビット条件のすべてを満たす場合には、攻撃が行われていると判断することができる。しかし、攻撃の有無の判断処理を軽減するために、これらの攻撃ビット条件の一部を満たす場合には、攻撃が行われている可能性が高いため、攻撃が行われていると判断してもよい。
【0049】
なお、参考文献1では、入力されたビット列xに対応するハッシュ値と、入力されたビット列xを予め定められた量Δxだけ変化させたビット列x+Δxに対応するハッシュ値とを同じ値にしようとしている。したがって、入力されたビット列xに対応するハッシュ値を演算する過程で生じるビット列が攻撃ビット条件を満たすかどうかを判断する代わりに、ビット列x+Δxに対応するハッシュ値を演算する過程で生じるビット列が上記と同じ攻撃ビット条件を満たすかどうかを判断することにより、攻撃の有無を判断することができる。
【0050】
x+Δxをパディングして512ビットの倍数のビット列M’を取得して、これを512ビットごとに分割する。M’(i=0,1,…,t−1)は512ビットのビット列である。
【0051】
M’=(M’,M’,…,Mt−1’)
ΔM=M’−M、ΔM=M’−Mとして、ΔM及びΔMは以下の条件を満たす。ΔM及びΔMが以下の条件を満たすようにΔxが決められる。
【0052】
ΔM=(0,0,0,0,231,0,0,0,0,0,0,215,0,0,231,0)
ΔM=(0,0,0,0,231,0,0,0,0,0,0,-215,0,0,231,0)
このとき、H=f(H,M’)を演算するときに生じるビット列a,b,c,dが図4に例示した攻撃ビット条件の全部又は一部を満たし、H=f(H,M’)を演算するときに生じるビット列a,b,c,dが図5に例示した攻撃ビット条件の全部又は一部を満たす場合に、攻撃が行われていると判断してもよい。
【0053】
[攻撃ビット条件の具体例2]
ハッシュ関数H(x)として4−pass HAVALの256ビットハッシュ値を用いた場合の攻撃ビット条件の具体例2について説明する。この具体例2は、参考文献3に記載された4−pass HAVALに対するショートカット攻撃に基づくものである。
【0054】
〔参考文献3〕Y. Sasaki and K. Aoki, “Preimage Attacks on 3, 4, and 5-pass HAVAL”, In J. Pieprzyk, editor, Advances in Cryptology-ASIACRYPT 2008, Volume 5350 of Lecture Notes in Computer Science, pp.253-271. Springer-Verlag, Berlin, Heidelberg, New York, 2008.
まず、4−pass HAVALについて説明する。
【0055】
入力されたビット列xはパディング処理が施されて1024ビットの倍数のビット列Mとなる。Mを以下のように表記する。M(i=0,1,…,t−1)は1024ビットのビット列である。
【0056】
M=(M,M,…,Mt−1
HAVALの圧縮関数として、H(i=0,1,…,t)を256ビットのビット列とし、HをIV(Initial Value)として、H及びMを圧縮関数fに入力してHi+1を順次求める。最後に求まったHがHAVALのハッシュ値となる。IVは予め定められた定数である。
【0057】
=IV
i+1=f(H,M) 0≦i≦t−1
圧縮関数f(H,M)について説明する。1024ビットの入力Mは32個の32ビットのワードに分割される。
【0058】
=(m,m,…,m15
=Hとして、j=0,1,…,k(k=127)に対して順次pj+1=R(p,mπ(j))が計算されて、最終的にpが計算される。計算されたpにHを加算したものをf(H,M)の出力値であるHi+1とする。
【0059】
関数π(j)は、次の通りである。左上がπ(0)であり、あるπ(j)の右がπ(j+1)であり、あるπ(j)の下がπ(j+32)である。
【0060】
【数5】

次に、関数R(p,mπ(j))について説明する。Qは32ビットのビット列であり、次の関係を満たすとする。
【0061】
=(Qj−7‖Qj−6‖Qj−5‖Qj−4‖Qj−3‖Qj−2‖Qj−1‖Q
このとき関数R(p,mπ(j))は次のように定義される。
【0062】
T=f・φ4,└j/32┘+1(Qj−6,Qj−5,Qj−4,Qj−3,Qj−2,Qj−1,Q
(p,mπ(j))=(Qj−7>>>11)+(T>>>7)+mπ(j)+K4,j
は、次のように定義される。
【0063】
【数6】

φ4,└j/32┘+1は、次のように定義される。なお、└・┘は、・以下の最大の整数を意味する。
【0064】
【数7】

「+」はmod232の加算であり、X>>>YはXを右Yビット巡回シフトすることを示す。K4,jは予め定められた定数である。
【0065】
このとき攻撃ビット条件はQ22=1かつQ23=Q24=Q26=Q27=Q28=0となる。
【0066】
ハッシュ値演算装置は、コンピュータによって実現することができる。この場合、これらの装置がそれぞれ有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、これらの装置における各処理機能が、コンピュータ上で実現される。
【0067】
この処理内容を記述したハッシュ値演算プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、これらの装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【0068】
この発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【符号の説明】
【0069】
1 判断部
2 演算部
22 乱数生成部
3 警告部
4 パターン記憶部
5 パターン更新部

【特許請求の範囲】
【請求項1】
入力されたビット列に対応するハッシュ値を演算する演算部と、
攻撃を受けている可能性が高い場合に上記演算部でハッシュ値を演算する過程で生じるビット列が満たす条件を記憶するパターン記憶部と、
上記演算部でハッシュ値を演算する過程で生じたビット列が、上記パターン記憶部から読み込んだ条件を満たすか判断して、条件を満たす場合には攻撃を受けていると判断する判断部と、
を含むハッシュ値演算装置。
【請求項2】
請求項1に記載されたハッシュ値演算装置において、
上記演算部は、上記判断部において攻撃を受けていると判断された場合には、上記入力されたビット列に対応するハッシュ値とは異なる値を出力する、
ことを特徴とするハッシュ値演算装置。
【請求項3】
請求項1又は2に記載されたハッシュ値演算装置において、
上記パターン記憶部に記憶されたビット列を更新するパターン更新部を更に含む、
ことを特徴とするハッシュ値演算装置。
【請求項4】
請求項1から3の何れかに記載されたハッシュ値演算装置において、
上記判断部において攻撃を受けていると判断された場合には、攻撃を受けている旨の警告情報を出力する警告部を更に含む、
ことを特徴とするハッシュ値演算装置。
【請求項5】
請求項1から4の何れかに記載されたハッシュ値演算装置において、
上記演算部は、入力されたビット列を予め定められた値だけ変化させたビット列に対応するハッシュ値を演算する、
ことを特徴とするハッシュ値演算装置。
【請求項6】
請求項2から5の何れかに記載されたハッシュ値演算装置において、
上記演算部は、乱数を生成する乱数生成部を更に含み、
上記演算部は、上記判断部において攻撃を受けていると判断された場合には、上記乱数を上記異なる値として出力する、
ことを特徴とするハッシュ値演算装置。
【請求項7】
請求項2から5の何れかに記載されたハッシュ値演算装置において、
上記演算部は、乱数を生成する乱数生成部を更に含み、
上記演算部は、上記判断部において攻撃を受けていると判断された場合には、上記生成された乱数に対応するハッシュ値を演算して、そのハッシュ値を上記異なる値として出力する、
ことを特徴とするハッシュ値演算装置。
【請求項8】
請求項2から5の何れかにに記載されたハッシュ値演算装置において、
上記演算部は、パラメータに応じて出力する値が異なるハッシュ関数に入力されたビット列を代入することによりハッシュ値を演算し、
上記演算部は、上記判断部において攻撃を受けていると判断された場合には、上記判断部において攻撃が行われていないと判断された場合のパラメータとは異なるパラメータのハッシュ関数に入力されたビット列を代入することによりハッシュ値を演算して、そのハッシュ値を上記異なる値として出力する、
ことを特徴とするハッシュ値演算装置。
【請求項9】
請求項2から5の何れかに記載されたハッシュ値演算装置において、
上記演算部は、パラメータに応じて出力する値が異なるハッシュ関数に入力されたビット列を代入することによりハッシュ値を演算し、
上記演算部は、上記判断部において攻撃を受けていると判断された場合には、上記判断部において攻撃が行われていないと判断された場合のパラメータとは異なるパラメータのハッシュ関数に入力されたビット列を代入することにより第一ハッシュ値を演算し、その第一ハッシュ値を上記判断部において攻撃が行われていないと判断された場合のパラメータのハッシュ関数に代入することにより第二ハッシュ値を演算して、その第二ハッシュ値を上記異なる値として出力する、
ことを特徴とするハッシュ値演算装置。
【請求項10】
請求項2から5の何れかに記載されたハッシュ値演算装置において、
上記演算部は、上記判断部において攻撃が行われていないと判断された場合には第一ハッシュ関数に入力されたビット列を代入することによりハッシュ値を演算し、上記判断部において攻撃を受けていると判断された場合には第一ハッシュ関数とは異なる第二ハッシュ関数に入力されたビット列を代入することにより第二ハッシュ値を演算しその第二ハッシュ値を上記異なる値として出力する、
ことを特徴とするハッシュ値演算装置。
【請求項11】
請求項2から5の何れかに記載されたハッシュ値演算装置において、
上記演算部は、上記判断部において攻撃が行われていないと判断された場合には第一ハッシュ関数に入力されたビット列を代入することによりハッシュ値を演算し、上記判断部において攻撃を受けていると判断された場合には第一ハッシュ関数とは異なる第二ハッシュ関数に入力されたビット列を代入することにより第二ハッシュ値を演算しその第二ハッシュ値を第一ハッシュ関数に代入することにより得たハッシュ値を上記異なる値として出力する、
ことを特徴とするハッシュ値演算装置。
【請求項12】
入力されたビット列に対応するハッシュ値を演算する演算ステップと、
攻撃を受けている可能性が高い場合に上記演算部でハッシュ値を演算する過程で生じるビット列が満たす条件を記憶するパターン記憶ステップと、
上記演算部でハッシュ値を演算する過程で生じたビット列が、上記パターン記憶部から読み込んだ条件を満たすか判断して、条件を満たす場合には攻撃を受けていると判断する判断ステップと、
を含むハッシュ値演算方法。
【請求項13】
請求項1から11の何れかに記載されたハッシュ値演算装置の各部としてコンピュータを機能させるためのハッシュ値演算プログラム。
【請求項14】
請求項13に記載されたハッシュ値演算プログラムを記録したコンピュータ読み取り可能な記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate