ハッシュ関数

ハッシュ関数とは

ハッシュ関数とは、ハッシュ値を計算するための関数です。


ハッシュ値は何に使うの?



ハッシュ値は、データ固有の指紋として扱います。

finger printやメッセージダイジェストとも呼ばれます。



ハッシュ値が同じであれば、データは同一であることを指します。



ハッシュ値を出すためのプログラムに出力値を出すことを、ハッシュ値の計算といいます。

ハッシュ値は一般的に、256ビット(2の256乗)の16進数で表記されます。



256ビットのハッシュ値を出す代表的なハッシュ関数として、SHA-256(シャー256)があります。



ハッシュ値に求められる性質

衝突(発見)困難性

衝突とは、異なる入力から同じハッシュ値が得られることを指します。

265ビットのハッシュ値の種類は2の256乗と大変大きな数値ですが、ハッシュ値の種類は有限です。



そのため、異なる入力から同じハッシュ値が得られる可能性は0ではありません。

だから、困難性=「可能性はあるが、極めて低い」ということだね



原像計算困難性

一方向性とも言います。

ハッシュ値から、もとの入力(ファイル)を出すことはほぼ不可能という意味です。

ちなみに、ハッシュ値を復号する(もとに戻す)ということはありえません。
ハッシュ値は入力のダイジェストなので、重要な部分以外は捨てています。

あくまでも、ハッシュ値からもとの入力を計算することが困難だということです。

記述試験では、書き方に注意しましょう


入力サイズによらず、ハッシュ値は一定になります。

この一定値はハッシュ関数の種類によって、決定されます。


第二原像計算困難性

同じような入力であっても、似たハッシュ値になることは極めて難しいことを指します。

微量の違いでも、ハッシュ値は大きく異なります。



ハッシュ関数の種類

SHA2やSHA3などがあります。

SHA2は、SHA-256のように「2」を省略します。



MD5は脆弱性が見つかっているため、ほとんど使われません。