がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

ハッシュへの考察:完全性を確保する手段としてのハッシュ

さてはて。ハッシュ法からどういう経緯でココにたどり着いたかがもう一つ不明なのですが。
恐らくは

  • 良質で比較的ハッシュ空間の広いハッシュ関数だと、なかなか衝突がおきない(アルゴリズムの慎重な選定)
  • 本質的に一方向な性質を持つために逆算が出来ない(データを間引いているため)

あたりから、なにか降りてきたのでしょう。
セキュリティの一環である「正真性あるいは完全性(integrity)の確保」としてのハッシュ関数の利用、という発想が沸いてきました。


データから一定長のハッシュ値が出てくる、って話はすでに腑に落ちたかと思いますが。
ここから「衝突がほとんど起きない」事を前提に、それを指紋に例えた人がいます。この場合、ハッシュ値と同意の単語として、メッセージダイジェスト(message digest)、フィンガープリント(fingerprint)、なんて単語も用いられます。
ちなみにリアルな指紋にも衝突はあるようです。ポイントは「めったにない」事。DNAは…確か衝突あったはず。微妙に自信なし。
おいといて。


ファイルの「指紋」をとって、ファイル本体と指紋情報を別ルートで郵送。こいつを受け取り側が受け取ってもう一度ファイルから指紋を取って「指紋照合」すれば、ファイルが「同一」であることがおおよそ確定できます。
こーゆーのをセキュリティの世界では「完全性の確保」というのですが。


こういった流れから、セキュリティの世界でもハッシュ関数がよく用いられるようになりました。
ちなみに、こういった「セキュリティの世界で用いられるポピュラーな(あるいは、ポピュラーだった)」ハッシュ関数には

  • SHA-0/1/224/256/384/512
  • MD 2/4/5
  • RIPEMD-80/128/160/256/320
  • Snefru
  • Haval-128/160/192/224/256
  • Whirlpool
  • Tiger/Tiger2

などがあります。