説明

ハッシュ関数の安全性評価装置、方法及びプログラム

【課題】MDファミリーのハッシュ関数の安全性を評価する技術を提供する。
【解決手段】Mを0からN−1までの整数の集合として、複数の自然数xのそれぞれに対して、M⊆M,M⊆M,M⊆M,M∩M=φ,M∩M=φ,M∩M=φ,M∪M∪M=Mという条件を満たす集合M,M,Mと、1≦k<k≦xという条件を満たす整数k,kとから構成される複数の組(M,M,M,k,k)を決定する。複数の組(M,M,M,k,k)のそれぞれについて、1≦j≦(k−1)又はk≦j≦xという条件を満たす各jに対応するNがN∩M=φでありかつk≦j≦(k−1)という条件を満たす各jに対応するNがN∩M=φであるという独立条件を満たすか判定する。独立条件を満たす組に対応するxの中で最大のxを出力する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、暗号学的ハッシュ関数の安全性の評価技術に関する。特に、ハッシュ関数の中間一致型原像攻撃に対する安全性の評価技術に関する。
【背景技術】
【0002】
暗号学的ハッシュ関数H(以下、ハッシュ関数Hとする。)は、任意の長さのビット列Mを入力して、固定長のビット列H(M)を出力する関数である。
【0003】
与えられたvに対してv=H(u)となるuを見つけることをハッシュ関数Hに対する原像攻撃という。ハッシュ関数Hは、その原像攻撃を実行することが計算量的に困難であることが求められる。
【0004】
ハッシュ関数Hは、いわゆるマークル・ダンガード構造を有しており、ステップ関数Rの繰り返しを用いて定義されている。ステップ関数Rの繰り返し数が多いほどハッシュ関数Hの安全性が増す。
【0005】
非特許文献1には、ハッシュ関数であるMD4、MD5に対して、ステップ関数Rの繰り返しの回数xがいくつ以下だと原像攻撃が可能であり、安全性を確保することができないかについて記載されている。具体的には、MD5ではステップ関数Rの繰り返しの回数xが55以下の場合には原像攻撃が可能である旨が記載されている。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】Kazumaro Aoki19, Yu Sasaki, “Preimage Attacks on One-Block MD4, 63-Step MD5 and More”, SAC 2008
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、非特許文献1には、ハッシュ関数の安全性を評価する一般的な手法は開示されておらず、MD4、MD5以外の他のハッシュ関数についての安全性を評価することができないという課題がある。
【課題を解決するための手段】
【0008】
上記の課題を解決するために、Mを0からN−1までの整数の集合として、複数の自然数xのそれぞれに対して、M⊆M,M⊆M,M⊆M,M∩M=φ,M∩M=φ,M∩M=φ,M∪M∪M=Mという条件を満たす集合M,M,Mと、1≦k<k≦xという条件を満たす整数k,kとから構成される複数の組(M,M,M,k,k)を決定する。メッセージ拡大関数W(M)が用いるMを構成するビットの位置を示すj個の整数w,…,wjwの集合をN={w,…,wjw}として、複数の組(M,M,M,k,k)のそれぞれについて、1≦j≦(k−1)又はk≦j≦xという条件を満たす各jに対応するNがN∩M=φでありかつk≦j≦(k−1)という条件を満たす各jに対応するNがN∩M=φであるという独立条件を満たすか判定する。独立条件を満たす組(M,M,M,k,k)に対応するxの中で最大のxを出力する。
【発明の効果】
【0009】
いわゆるMDファミリーのハッシュ関数の安全性を評価することができる。
【図面の簡単な説明】
【0010】
【図1】ハッシュ関数の安全性評価装置の例の機能ブロック図。
【図2】ハッシュ関数の安全性評価方法のフローチャートを例示する図。
【図3】ハッシュ関数の構造を説明するための図。
【図4】ハッシュ関数の構造を説明するための図。
【図5】この発明が安全性の評価と基準となる理由を説明するための図。
【発明を実施するための形態】
【0011】
以下、この発明の一実施形態について、詳細に説明する。
【0012】
[対象となるハッシュ関数について]
安全性の評価の対象となるハッシュ関数はいわゆるMDファミリーに属するハッシュ関数である。そこで、まずMDファミリーに属するハッシュ関数の説明を行う。
【0013】
MDファミリーに属するハッシュ関数Hは、以下に述べる構造を有する。
【0014】
図3に例示するように、ハッシュ関数Hに入力されたメッセージMはNの倍数のビット数となるようにパディングされる。Mは任意長の長さのビット列であり、Nは所定の自然数である。パディングされたビット列pad(M)と表記する。
【0015】
パディングされたビット列pad(M)は、pad(M)=M‖M‖…‖MとL個のビット列に分割される。各M(i=1,…,L)は、N個のビットから構成される。
【0016】
IV(Initial Value)を所定の定数とし、H=IVとし、i=1,…,Lとして、H=cf(Hi−1,M)の演算を順次繰り返すことにより得られたHが入力されたメッセージMに対するハッシュ値H(M)となる。
【0017】
=IV
=cf(Hi−1,M),i=1,…,L
cf(Hi−1,M)は、圧縮関数と呼ばれる関数である。圧縮関数cf(Hi−1,M)は、図4に例示するように、Hi−1及びMを入力として用いて、p=Hi−1とし、j=1,…,xとして、pj+1=R(W(M),p)の演算を順次繰り返すことにより得られたpx+1とpとを加算した値を出力する。
【0018】
=Hi−1
j+1=R(W(M),p),j=1,…,x
cf(Hi−1,M)=px+1+p
(M)は、メッセージ拡大関数と呼ばれる関数であり、入力されたビット列Mを構成する全部又は一部のビットを用いて出力値を計算する。用いるビットはjに応じて異なる。メッセージ拡大関数W(M)が用いる、Mを構成するビットの位置を示すj個の整数w,…,wjwの集合をN={w,…,wjw}と表記する。
【0019】
R(W(M),p)は、ステップ関数と呼ばれる関数であり、W(M)及びpを入力として用いて出力値を計算する。ステップ関数R(W(M),p)はW(M)に対して可逆関数であり、ステップ関数R(W(M),p)の出力値とW(M)の値から、入力値であるpを計算可能であるとする。また、cf(Hi−1,M)の出力値Hのビット数とR(W(M),p)の出力値pj+1のビット数とが同じであるとする。
【0020】
xはステップ関数R(W(M),p)の演算の繰り返しの回数である。一般に繰り返しの回数xが多いほどハッシュ関数Hの安全性が増す。この発明は、原像攻撃が可能であり、安全性を確保することができない繰り返しの回数xを求めて、安全性を評価するための指標として用いる。
【0021】
メッセージ拡大関数W(M)及びステップ関数R(W(M),p)は、仕様に応じて適宜設計される。
【0022】
[実施形態]
ハッシュ関数の安全性評価装置は、図1に示すように、設定部1、決定部2、判定部3、出力部4、制御部5を例えば含む。このハッシュ関数の安全性評価装置が、図2に示すハッシュ関数の安全性方法を例えば実行する。
【0023】
設定部1は、順次異なる自然数をxに設定する。この例では、まず、x=1とする(ステップS11)。その後、x=Xとなるまで、順次xに自然数を設定する(ステップS12,ステップS13)。Xは所定の整数である。
【0024】
また、制御部5は、tempに1を代入して、変数tempを初期化する(ステップS40)。
【0025】
決定部2は、Mを0からN−1までの整数の集合として、設定部1で設定されたxに対して、M⊆M,M⊆M,M⊆M,M∩M=φ,M∩M=φ,M∩M=φ,M∪M∪M=Mという条件を満たす集合M,M,Mと、1≦k<k≦xという条件を満たす整数k,kとから構成される複数の組(M,M,M,k,k)を決定する(ステップS2)。複数の組(M,M,M,k,k)についての情報は、判定部3に送られる。
【0026】
決定部2の具体例を以下に説明する。決定部2は、図1に例示するように、集合決定部21と整数決定部22とを含む。
【0027】
まず、集合決定部21が、M⊆M,M⊆M,M⊆M,M∩M=φ,M∩M=φ,M∩M=φ,M∪M∪M=Mという条件を満たす集合M,M,Mを決定する。
【0028】
その後、整数決定部22が、1≦k<k≦xという条件を満たす整数k,kを決定する
判定部3は、ある組(M,M,M,k,k)について、1≦j≦(k−1)又はk≦j≦xという条件を満たす各jに対応するNがN∩M=φでありかつk≦j≦(k−1)という条件を満たす各jに対応するNがN∩M=φであるという独立条件を満たすか判定する(ステップS31)。独立条件を満たす組(M,M,M,k,k)についての情報は、出力部4に送られる。
【0029】
は、安全性の評価の対象となっているハッシュ関数Hのメッセージ拡大関数W(M)が用いる、Mを構成するビットの位置を示すj個の整数w,…,wjwの集合N={w,…,wjw}である。
【0030】
図2に示すように、制御部5は、あるxに対応するすべての組(M,M,M,k,k)について独立条件を満たすか判定されたか判断し(ステップS32)。すべての組(M,M,M,k,k)について独立条件を満たすか判定されていな場合には、制御部5は、まだ独立条件を満たすか判定されていない組(M,M,M,k,k)に対して判定部3が独立条件を満たすか判定するように制御する。これにより、判定部3は、あるxに対応するすべての組(M,M,M,k,k)の独立条件を判定することになる。
【0031】
出力部4は、独立条件を満たす組(M,M,M,k,k)に対応するxの中で最大のxを出力する(ステップS4)。後述するように、ステップ関数R(W(M),p)の繰り返しの回数がx以下の場合には、後述するように、ハッシュ関数Hに対して原像攻撃の一種である中間値一致型原像攻撃が可能であり、安全性を確保することができない。このため、出力されたxは、安全性の評価の指標となる。
【0032】
ステップS31(図2)において、組(M,M,M,k,k)が独立条件を満たすと判定された場合には、制御部5は、その組(M,M,M,k,k)に対応するxとtempとを比較する(ステップS41)。
【0033】
x>tempであれば、制御部5はtempにxを代入する(ステップS42)。その後、ステップS32に進む。x≦tempであれば、ステップS32に進む。
【0034】
ステップS32において、すべての組(M,M,M,k,k)について独立条件を判定したと判断された場合には、制御部5は、x=Xであるか判定する(ステップS12)。
【0035】
x=Xであれば、出力部4はtempを出力する(ステップS4)。ステップS41、ステップS42、ステップS12及びステップS13の処理により、tempの値はxの最大値となっている。x=Xでなければ、設定部1は、x+1をxとする(ステップS13)。その後、ステップS2に進む。
【0036】
[ステップ関数R(W(M),p)の繰り返しの回数がx以下の場合には安全性を確保することができない理由]
集合Mを構成する整数をmA1,mA2,…,mANと表記する。すなわち、集合M={mA1,mA2,…,mAN}とする。Nは、集合Mを構成する整数の数である。同様に、集合Mを構成する整数をmB1,mB2,…,mBNと表記する。すなわち、集合M={mB1,mB2,…,mBN}とする。Nは、集合Mを構成する整数の数である。同様に、集合Mを構成する整数をmC1,mC2,…,mCNと表記する。すなわち、集合M={mC1,mC2,…,mCN}とする。Nは、集合Mを構成する整数の数である。
【0037】
独立条件を満たす組(M,M,M,k,k)の情報、及び、cf(Hi−1,M)の値が公知であるとする。
【0038】
(1)まず、MのmC1,mC2,…,mCN番目の位置のビットの値b(mC1),b(mC2),…,b(mCN)とpk1とを所定の値に固定する。
【0039】
(2)次に、MのmB1,mB2,…,mBN番目の位置のビットの値の組(b(mB1),b(mB2),…,b(mBN))を複数生成し、各組に対応するpk2の値をpk1及びステップ関数R(W(M),p)を用いて計算する。i=kからk−1までのW(M)は、MのmA1,mA2,…,mAN番目の位置のビットの値b(mA1),b(mA2),…,b(mAN)を用いないため、これらのビットの値b(mA1),b(mA2),…,b(mAN)がなくても、各組に対応するpk2の値を計算することができる。
【0040】
(3)次に、MのmA1,mA2,…,mAN番目の位置のビットの値の組(b(mA1),b(mA2),…,b(mAN))を複数生成し、各組に対応するpk2の値をpk1及びステップ関数R(W(M),p)の逆関数R−1(W(M),pj+1)と、関係式px+1=cf(Hi−1,M)−pを用いて計算する。i=1からk−1までのW(M)及びi=kからxまでのW(M)は、MのmB1,mB2,…,mBN番目の位置のビットの値b(mB1),b(mB2),…,b(mBN)を用いないため、これらのビットの値b(mB1),b(mB2),…,b(mBN)がなくても、各組に対応するpk2の値を計算することができる。
【0041】
上記(2)で求められたpk2の値と上記(3)で求められたpk2の値とで一致するものがあった場合には、その一致するpk2に対応する組(b(mB1),b(mB2),…,b(mBN))及び組(b(mA1),b(mA2),…,b(mAN))によりMが定まる。MのmC1,mC2,…,mCN番目の位置のビットの値としては、上記(1)で定めたb(mC1),b(mC2),…,b(mCN)をそれぞれ用いる。
【0042】
このように、独立条件を満たす組(M,M,M,k,k)の情報、及び、cf(Hi−1,M)の値が公知であるとすると、このように、原像攻撃の一種であるいわゆる中間一致型原像攻撃が可能であり、cf(Hi−1,M)の値からMを計算することができる可能性がある。
【0043】
一般に、MDファミリーのハッシュ関数Hの圧縮関数cf(Hi−1,M)についての原像攻撃が可能であるとすると、そのハッシュ関数H自体も原像攻撃が可能であることが知られている。
【0044】
ステップ関数R(W(M),p)の繰り返しの回数がx以下の場合には、独立条件を満たす組(M,M,M,k,k)が存在し、その存在が知られている可能性がある。
【0045】
このため、ステップ関数R(W(M),p)の繰り返しの回数がx以下の場合には、ハッシュ関数の安全性を確保することができないと言えるのである。
【0046】
[変形例等]
この発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【0047】
例えば、ハッシュ関数の安全性評価装置は、コンピュータによって実現することができる。この場合、これらの装置の各部はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、これらの装置の各部が、コンピュータ上で実現される。
【0048】
このプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、これらの装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【符号の説明】
【0049】
1 設定部
2 決定部
21 集合決定部
22 整数決定部
3 判定部
4 出力部
5 制御部

【特許請求の範囲】
【請求項1】
N,Lを自然数とし、IVを所定の定数とし、入力されたメッセージMをNの倍数のビット数となるようにパディングしたビット列pad(M)を構成するそれぞれN個のビットから構成されるL個のビット列をM,…,M,…,Mとし、H=IVとし、H=cf(Hi−1,M)(i=1,…,L)とし、入力されたビット列Mを構成する全部又は一部のビットを用いて出力値を計算するメッセージ拡大関数をW(M)(j=1,…,x)とし、p=Hi−1とし、pj+1=R(W(M),p)(j=1,…,x)とし、cf(Hi−1,M)=px+1+pとし、R(W(M),p)を可逆関数とし、cf(Hi−1,M)の出力値のビット数とR(W(M),p)の出力値のビット数とが同じとして、Hを入力されたメッセージMに対するハッシュ値とするハッシュ関数の安全性評価装置において、
を0からN−1までの整数の集合として、複数の自然数xのそれぞれに対して、M⊆M,M⊆M,M⊆M,M∩M=φ,M∩M=φ,M∩M=φ,M∪M∪M=Mという条件を満たす集合M,M,Mと、1≦k<k≦xという条件を満たす整数k,kとから構成される複数の組(M,M,M,k,k)を決定する決定部と、
メッセージ拡大関数W(M)が用いるMを構成するビットの位置を示すj個の整数w,…,wjwの集合をN={w,…,wjw}として、上記複数の組(M,M,M,k,k)のそれぞれについて、1≦j≦(k−1)又はk≦j≦xという条件を満たす各jに対応するNがN∩M=φでありかつk≦j≦(k−1)という条件を満たす各jに対応するNがN∩M=φであるという独立条件を満たすか判定する判定部と、
上記独立条件を満たす組(M,M,M,k,k)に対応するxの中で最大のxを出力する出力部と、
を含むハッシュ関数の安全性評価装置。
【請求項2】
N,Lを自然数とし、IVを所定の定数とし、入力されたメッセージMをNの倍数のビット数となるようにパディングしたビット列pad(M)を構成するそれぞれN個のビットから構成されるL個のビット列をM,…,M,…,Mとし、H=IVとし、H=cf(Hi−1,M)(i=1,…,L)とし、入力されたビット列Mを構成する全部又は一部のビットを用いて出力値を計算するメッセージ拡大関数をW(M)(j=1,…,x)とし、p=Hi−1とし、pj+1=R(W(M),p)(j=1,…,x)とし、cf(Hi−1,M)=px+1+pとし、R(W(M),p)を可逆関数とし、cf(Hi−1,M)の出力値のビット数とR(W(M),p)の出力値のビット数とが同じとして、Hを入力されたメッセージMに対するハッシュ値とするハッシュ関数の安全性評価方法において、
決定部が、Mを0からN−1までの整数の集合として、複数の自然数xのそれぞれに対して、M⊆M,M⊆M,M⊆M,M∩M=φ,M∩M=φ,M∩M=φ,M∪M∪M=Mという条件を満たす集合M,M,Mと、1≦k<k≦xという条件を満たす整数k,kとから構成される複数の組(M,M,M,k,k)を決定する決定ステップと、
判定部が、メッセージ拡大関数W(M)が用いるMを構成するビットの位置を示すj個の整数w,…,wjwの集合をN={w,…,wjw}として、上記複数の組(M,M,M,k,k)のそれぞれについて、1≦j≦(k−1)又はk≦j≦xという条件を満たす各jに対応するNがN∩M=φでありかつk≦j≦(k−1)という条件を満たす各jに対応するNがN∩M=φであるという独立条件を満たすか判定する判定ステップと、
出力部が、上記独立条件を満たす組(M,M,M,k,k)に対応するxの中で最大のxを出力する出力ステップと、
を含むハッシュ関数の安全性評価方法。
【請求項3】
請求項1に記載されたハッシュ関数の安全性評価装置の各部としてコンピュータを機能させるためのハッシュ関数の安全性評価プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−2831(P2012−2831A)
【公開日】平成24年1月5日(2012.1.5)
【国際特許分類】
【出願番号】特願2010−134671(P2010−134671)
【出願日】平成22年6月14日(2010.6.14)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】