ハッシュ値は、入力データをハッシュ関数へ渡して得られる値です。セキュリティで利用する暗号学的ハッシュでは、データの照合と、値から入力を見つけることの難しさが重要になります。
固定長と決定性を例で確認する
| 入力(UTF-8、改行なし) | SHA-256の先頭16桁 |
|---|---|
| ABC | b5d4045c3f466fa9… |
| ABC | b5d4045c3f466fa9… |
| ABD | 69f0fb8cb1d21953… |
上の表示は、計算例としてハッシュ値の先頭部分だけを示しています。SHA-256全体の出力は256ビットで、16進数では64桁です。照合に使う場合は、用途に適した全体の値を扱います。
一方向性・衝突耐性・入力変化を区別する
| 観点 | 意味 |
|---|---|
| 固定長 | 同じ関数なら出力の長さが一定 |
| 決定性 | 同じ入力を同じ関数へ渡すと同じ値になる |
| 原像計算困難性(一方向性) | 与えられた値になる入力を見つけることが計算上困難 |
| 衝突耐性 | 同じ値になる異なる2つの入力を見つけることが計算上困難 |
| 入力の変化 | 入力が少し変わると出力が大きく変化する性質が期待される |
「入力が少し変わると出力が大きく変わる」ことと、「衝突する入力を見つけにくい」ことは別の観点です。また、出力の種類は有限なので、異なる入力が同じ値になる衝突は存在し得ます。「衝突が絶対にない」という意味ではありません。
復号はできなくても、候補を試すことはできる
ハッシュは鍵によって元のデータへ復号する方式ではありません。しかし、候補の入力をハッシュ化して一致するか試すことはできます。候補の少ないパスワードなどでは推測される可能性があり、一方向性だけで安全だとは判断できません。
改ざん確認には正しい比較元が必要
ファイルから再計算した値を、信頼できる経路で入手した正しいハッシュ値と比較します。攻撃者がファイルと比較用のハッシュ値の両方を書き換えられるなら、単に一致しただけでは正当性を確認できません。送信元の確認には署名やMACなどの仕組みを組み合わせます。
パスワード保存では計算コストも考える
パスワードの保存では、一般的な高速ハッシュを1回かけるだけでは不十分です。Argon2idなどのパスワード専用の方式で計算コストを調整し、利用者ごとのランダムなソルトを使います。ソルトは同じパスワードでも異なる結果にし、事前計算済みの表の再利用を難しくしますが、総当たりを不可能にするものではありません。
理解を確かめる確認問題
「暗号学的ハッシュは衝突耐性を持つので、異なる入力が同じ値になることは絶対にない」は正しいでしょうか?
解答・解説を見る
誤りです。衝突は存在し得ます。衝突耐性は、同じ値になる異なる入力を見つけることが計算上困難であるという性質です。

コメント