たとえば、それぞれ1メガバイトの10億のユニークなイメージがあるとします。各ファイルのコンテンツに対してSHA-256ハッシュを計算します。衝突の可能性は以下に依存します:
ゼロだと仮定して、この可能性をどこまで無視できますか?
したがって、通常の答えは次のようになります。次の数秒で、悪党の小惑星が地球に衝突し、私たちが知っている文明を破壊し、数十億人を殺す確率はどのくらいでしょうか?それよりも低い確率の不運なイベントは実際にはそれほど重要ではないと主張することができます。
出力サイズnの「完全な」ハッシュ関数があり、pハッシュするメッセージ(個々のメッセージの長さは重要ではない)、衝突の確率は約p2/ 2n + 1(これは、 "small"pに有効な近似です。つまり、2n/2)。たとえば、SHA-256(n = 256)と10億メッセージ(p = 109))確率は約4.3 * 10-60。
大量殺人の宇宙岩は、平均で約3,000万年に1回発生します。これにより、約10の次の1秒でこのようなイベントが発生する可能性が生じます。-15。それは45 SHA-256衝突よりも桁違いに高い確率です。簡単に言えば、SHA-256の衝突が怖い場合は、優先順位が間違っています。
攻撃者がハッシュされるメッセージを選択するセキュリティ設定では、攻撃者は10億を超えるメッセージを使用する可能性があります。ただし、攻撃者の成功確率は依然として非常に小さいことがわかります。これが、256ビット出力でハッシュ関数を使用する全体のポイントです。つまり、衝突のリスクを無視できます。
もちろん、上記のすべては、SHA-256が「完璧な」ハッシュ関数であると仮定していますが、これは証明されていません。それでも、SHA-256は非常に堅牢なようです。
衝突の可能性は、ファイルのサイズに依存せず、ファイルの数にのみ依存します。
これは birthday paradox の例です。ウィキペディアのページには、衝突の可能性の推定値が記載されています。数値を実行すると、これまでにEarthで作成されたすべてのハードディスクは、SHA-256で0.01%の衝突の可能性を得るのに十分な1MBファイルを保持できないことがわかります。
基本的に、あなたは単純に可能性を無視することができます。
まず、 ゼロではないが、ゼロに非常に近い 。
重要な質問は、実際に衝突が発生した場合に何が起こるかです?答えが「原子力発電所が爆発する」なら、衝突の可能性を無視すべきではないでしょう。ほとんどの場合、結果はそれほど深刻ではないため、衝突の可能性は無視できます。
また、ソフトウェア(またはそのごく一部)が数十億台のコンピューター(今日ほとんどどこにでもある小さな組み込みマイクロコンピューター)で展開され、同時に使用される可能性があることを忘れないでください。このような場合、取得した推定値に可能な限り多くのコピーを掛ける必要があります。