ハッシュ値についてまとめ

投稿日: 更新日:

ハッシュ値とは

ハッシュ関数を利用し任意のデータから求められる固定長の値のことです。「データの指紋」と例えられます。ファイルの改ざん検出、パスワードの保存、デジタル署名などに使われています。
ハッシュ値から元のデータには復号化できないので「暗号化」ではありません。

ハッシュ値の特徴

  1. 固定長
    データの大きさによらず一定の長さです。
  2. 一方向性
    ハッシュ値から元のデータを復元することはできません。
  3. 入力が異なればハッシュ値も異なる
    異なる入力に関しては高確率で異なる値が出力されます。

この3つが特徴としてあげられます。

ハッシュ値を求めるにはハッシュ関数を利用します。MD5、SHA-256など種類があり、ハッシュ値の長さも異なります。

ハッシュ値についての図

衝突について

衝突・・・異なるデータでハッシュ値が一致すること。

ハッシュ値のパターンは有限なため衝突を起こす場合があります。
SHA-256の場合ハッシュ値の長さは22562^{256}bitより、衝突を起こす確立は12256\frac{1}{2^{256}}です。
225610772^{256}\fallingdotseq 10^{77}です。1無量大数が106810^{68}なので衝突はかなり低い確立であることが分かります。

強衝突耐性と弱衝突耐性

耐性が強い、弱いという意味ではありません。

強衝突耐性・・・「同じハッシュ値になるデータの組」の見つけにくさを言います。
弱衝突耐性・・・「あるデータと同じハッシュ値になるデータ」の見つけにくさを言います。

強衝突耐性とは、ハッシュ値はなんでもいいから同じ値になるデータの組を探すのに対し、弱衝突耐性とは、一致させたいハッシュ値が決まっているのが違いです。

強衝突耐性と弱衝突耐性についての図

まとめ

ハッシュ値の特徴について分かってもらえたら嬉しいです。衝突耐性と弱衝突耐性は混乱しないよう気をつけてください。

参考文献

結城浩(2015)暗号技術入門 第3版

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人