ハッシュ関数の雪崩効果を例示する
ハッシュ関数は,最新の暗号化で基本的な役割を担っている.よいハッシュ関数の重要かつ望ましい機能は,入力と出力の無相関,つまり雪崩効果(入力のわずかな変更が出力で大きな変化となり,統計的にランダムと見分けが付かないものとなること)である.Hash関数はさまざまなハッシュを生成し,それをいくつもの形式で返すことができるため,ハッシュ特性を調べるのが簡単になる.
入力の中の単独の反転ビットが,平均で出力のビットの半分の変更を引き起こした場合,ハッシュ関数は,雪崩効果を示す.この例では"Keccak256"型のHash関数がこの特性を持つかどうかを調べる.
256ビットのランダムな整数1万個のリストを生成する.
整数の中のランダムビットを反転する関数を定義する.
1ビットだけ異なる整数のペアを作成する.
各整数に対するランダムビットを反転する.
HammingDistanceが各整数に対して厳密に1であることを確かめる.
整数の実際のビットをハッシュするために,各整数をByteArrayに変換する必要がある.
ハッシュ関数で"Keccak256"を使ってバイト配列をHashする.
整数の各ペアに対するHamming距離を計算する.
ハッシュしたHamming距離の平均を計算する.
個々で128の平均値はランダムな整数ペアと比較するのと同じであり,"Keccak256"はその入力を非常に効率的に暗号化していることを示している.
標準偏差を計算する.
距離と,計算された平均と標準偏差を持つ正規分布の対応する偏微分方程式のヒストグラムを作成する.