スポンサーリンク

ハッシュ関数とは

関数とは、何かの入力を与えると何かの出力を返すものです。ハッシュ関数は、あるデータを入力すると、ハッシュ値を返します。

公開鍵暗号などを使う時には、通信データが途中で改ざんされていないことを確認する必要があります。どこか一箇所でも変更されれば、それを検出できるようにしたいのです。そのために必要な技術がハッシュ関数です。

また、後述する「固定長の出力を返す」というハッシュ関数の特徴を踏まえると、任意のサイズのメッセージ m に対して、ある決まった手順に従って、サイズが固定の値 H(m) を出力する関数 H のことである、とも言えます。

ここで、ハッシュ関数の性質をまとめます。

1.同じ入力を入れたら、同じ出力が出て来る。

「ある入力値に関して常に同じ値を返す」という他の関数の性質と同じです。

2.固定長の出力を返す。

どんな大きさの値を入力しても、同じ大きさの値が出力されます。これを可能にしているのは、後述するハッシュ関数のアルゴリズムです。

3.一方向性

任意の入力値を与えた場合に、どんな値が返ってくるかが、全く予想できないということです。これは、関数の計算は簡単にできるが、逆関数の計算は非常に困難であることに由来します。

4.耐衝突性

別の入力を与えたのに同じハッシュ値が出来てしまうことをハッシュの衝突と言います。これが起こると改ざんが起きてしまいます。それが困難である性質です。

暗号学的ハッシュ関数とは

暗号プロトコルで使われるハッシュ関数は、普通のハッシュ関数よりもさらに強い性質が求められます。さらに強い性質をもつハッシュ関数を、普通のハッシュ関数と区別して、暗号学的ハッシュ関数と言います。

ハッシュ関数を、任意のサイズのメッセージ m に対して、ある決まった手順にしたがってサイズが固定の値 H(m) を出力する関数 H とします。その時、暗号学的ハッシュ関数は、以下の性質を持っています。

1.原像計算困難性

 与えられたhに対して、H(m)=hとなるmを見つけることが困難である、という性質です。与えられたハッシュ値から元のメッセージを再現するのが困難である、ということです。

2.第二原像計算困難性

 m1 が与えられたときに H(m1) = H(m2) となる m2(≠ m1) を求めるのが困難である、という性質です。与えられたメッセージに対して、ハッシュ値が等しくなる別のメッセージを見つけることが困難である、ということです。

3.衝突困難性

 相異なるm1と m2 で、H(m1) = H(m2) となるメッセージを見つけることが困難である、という性質です。ハッシュ値が等しくなるようなメッセージを2以上求めることが困難である、ということです。

暗号化とハッシュ化

補足しますが、厳密に言うと、暗号化とハッシュ化は異なります。

暗号化は、データの秘匿が目的です。そのため、適切な鍵を用いることで復号が可能であるのが特徴です。

ハッシュ化は、データの置換が目的です。そのため、ハッシュ関数により、一定のフォーマットへ不可逆の変換を行うのが特徴です。

「暗号学的ハッシュ関数」の「暗号学的」は、「暗号など情報セキュリティの用途に適する暗号数理的性質をもった」という意味なので注意が必要です。

ハッシュ関数の種類

1990年から現在までの代表的なハッシュ関数

開発年 ハッシュ関数名 出力長 備考
1990 MD4 128bit 1991年に脆弱性が実証された。
1992 MD5 128bit 現在、安全性が高くないことが判明している。
1995 SHA-1 160bit ハッシュ関数のデファクト・スタンダード。しかし、2017年に、Googleが衝突に成功した。
1996 RIPEMD160 160bit ビットコインの一部の場面に使われている。
2001 SHA2-256 256bit ビットコインのほとんどの場面に使われている。
2015 SHA3-256 256bit SHAシリーズの最新の関数。しかし、構造はSHA1,2と大きく異なる。

 

表から、年々桁数が増えていることがわかります。このことは、年々ハッシュ関数の強度が上がっていることを意味します。ちなみに桁数が上がると、より高い処理能力が求められます。

ちなみに、ビットコインは、ほとんどの場面で、SHA-256を二回重ねて使用しています。より短いハッシュが望ましい場面(例えば、アドレスの作成)では、SHA-256の後にRIPEMD160を使用しています。

 

次は、ビットコインのほとんどの場面で使われているSHA-256のアルゴリズムを見ることにします。

Twitterでフォローしよう!

おすすめの記事
スポンサーリンク