ハッシュ雪崩効果:1ビットで全部変わる
入力をたった1ビット変えるだけで、出力ハッシュの約半分のビットが反転します。変化したビットを赤く点灯させ、一方向性と改ざん検知を体感します。
入力A(元のメッセージ)
入力B(変えたメッセージ)
6 回
入力の違い
—
反転した出力ビット
—
反転率(雪崩の強さ)
—
理想値
50%
トイハッシュ出力(48ビット = 12桁の16進)。赤は A と B で違う桁。
A
—
B
—
出力 48 ビット(赤=反転したビット)
ラウンドごとの拡散(行=ラウンド、赤=A と B で違うビット)
ハッシュ関数は、どんな長さの入力でも固定長の「指紋」に変換する一方向の関数です。良いハッシュは
雪崩効果(avalanche effect)を持ちます ── 入力をたった1ビット変えただけで、
出力ビットの約半分(50%)がランダムに反転するという性質です。
だから出力を見ても元の入力は推測できず(一方向性)、メッセージを1文字でも改ざんすると指紋が激変するので 改ざん検知に使えます。
ここでは本物の SHA ではなく、拡散の過程を1ラウンドずつ追える自作のトイハッシュで雪崩を観察します。 ラウンド数を 0 にすると拡散が起きず違いが広がらないこと、増やすと一気に 50% へ近づくことを確かめましょう。
だから出力を見ても元の入力は推測できず(一方向性)、メッセージを1文字でも改ざんすると指紋が激変するので 改ざん検知に使えます。
ここでは本物の SHA ではなく、拡散の過程を1ラウンドずつ追える自作のトイハッシュで雪崩を観察します。 ラウンド数を 0 にすると拡散が起きず違いが広がらないこと、増やすと一気に 50% へ近づくことを確かめましょう。
いま何が起きている?
ここがポイント
- 雪崩効果 ── 入力1ビットの変化が、ラウンドを重ねるごとに混ざり合い、出力の約半分のビットを反転させる。
- 約50%が目標 ── 反転率が 50% 付近だと「入力の違いと出力の違いに相関がない」良いハッシュ。0% や 100% に偏ると弱い。
- 一方向性・改ざん検知 ── 出力から入力を逆算できず、1文字の改ざんでも指紋が激変するので、改ざんがすぐ分かる。
- これはトイ ── 拡散を見せるための簡易版。実用には SHA-256 など衝突耐性を厳密に検証された関数を使う。