ホーム / ガイド / ハッシュ関数の基礎 — 一方向性・衝突・ソルト

ハッシュ関数は、任意の長さのデータを固定長の値(ハッシュ・ダイジェスト)に変換する関数です。同じ入力は常に同じハッシュを返しますが、入力が1ビット違うだけでまったく異なるハッシュになります。

優れた暗号学的ハッシュの核心的な性質は一方向性です。ハッシュ値だけを見て元の入力を復元することは事実上不可能です。そのため、パスワードを平文の代わりにハッシュで保存すれば、データが流出しても原文をすぐには知られません。

衝突とは、異なる2つの入力が同じハッシュを持つ場合です。理論的には存在しますが、安全なハッシュではこれを意図的に作ることが計算上不可能でなければなりません。MD5・SHA-1が廃止された理由は、まさに衝突を作れるようになったからです。

パスワード保存にはハッシュだけでは不十分です。同じパスワードは同じハッシュを返すため、入力ごとにランダムな値であるソルト(salt)を加えてハッシュ化し、bcrypt・Argon2のような遅いハッシュを使って大量推測攻撃を遅らせます。

このアルゴリズムでハッシュ化