23

これがmd5ハッシュの3つの例です

$ md5 -s "1" && md5 -s "2" && md5 -s "3"
MD5 ("1") = c4ca4238a0b923820dcc509a6f75849b
MD5 ("2") = c81e728d9d4c2f636f067f89cc14862c
MD5 ("3") = eccbc87e4b5ce2fe28308fd9f2a7baf3

任意のハッシュから8文字を取得したいとします。ハッシュの最初の部分は、最後よりも特に「ランダム」ですか?真ん中?または、すべての部分文字列は等しく「ランダム」ですか?

4

4 に答える 4

20

私自身も興味があったので、先に進んでこれをテストするプログラムを書きました。コードをコンパイルするには、Crypto++が必要です。

免責事項: 暗号化、または一般的な数学に関してさえ、私は自分の足を撃つほど十分に知っています。したがって、以下の結果は大まかに見て、私が使用しているツールについて大雑把な知識しか持っていないことを覚えておいてください。

最初の 8 バイト、中間の 8 バイト、最後の 8 バイトの 3 つの部分文字列のみをサンプリングしました。簡単に言えば、それらは等しくランダムです。

ただし、より小さいサンプル空間を使用すると、最後の 8 ビットがわずかにランダムに見えるようになります。サンプリング空間が大きくなるほど、3 つの部分文字列すべてが完全なランダム性に近づきます。


1000回の繰り返し:

First:  0.995914
Middle: 0.996546
Last:   0.998104

5000 回の反復:

First:  0.998387
Middle: 0.998624
Last:   0.999501

10000 回の繰り返し:

First:  0.999614
Middle: 0.999457
Last:   1

30000 回の繰り返し:

First:  1
Middle: 1
Last:   1

「ランダム性」は、Crypto++ のMaurerRandomnessTestクラスによって測定されます。参考までに、上記のコードからコンパイルされた実行可能ファイルのランダム値は で0.632411あり、Project Gutenburg からダウンロードされたシェイクスピアのマクベスのコピーのランダム値は0.566991です。

于 2010-09-29T10:41:20.967 に答える
14

Nitpick: ハッシュ関数は決定論的であるため、ここで「ランダム」という言葉を使用するのは不適切です。

あなたの言いたいことへの答えとして:)、ハッシュ関数の望ましい特性は雪崩効果を達成することです:基本的に、入力のすべてのビットが出力に劇的な変化を引き起こすことです。したがって、適切に設計されたハッシュでは、すべての部分文字列が他の部分文字列と同じくらい頻繁に影響を受ける (「ランダムになる」) 必要があります。

于 2010-09-29T11:50:05.013 に答える
12

優れたハッシュのすべてのサブ文字列(およびmd5は暗号的に安全ではないにもかかわらず、適度に優れています)は等しくランダムなので、はい、文字列から好きなビットを取り出して、均等に分散する必要があります。

于 2010-09-29T07:56:22.883 に答える
0

ハッシュ関数の出力のランダム性の測定は、疑似乱数ジェネレーターで行われる統計テストを使用して行うことができます。Handbook of Applied Cryptography §5.4.4 (サンプルの章は無料で入手可能) によると、 5 つの基本的なテストがあります。

  1. 周波数試験(モノビット試験)
  2. シリアルテスト (2 ビットテスト)
  3. ポーカーテスト
  4. テストを実行します
  5. 自己相関検定

それからもちろん、栗毛がすでに述べたマウラーの普遍的な統計検定があります。

于 2018-04-16T01:03:57.827 に答える