たとえば、1メガバイトずつ、10億のユニークな画像があるとします。各ファイルのコンテンツのSHA-256ハッシュを計算します。衝突の可能性は次の条件によって異なります。
- ファイルの数
単一ファイルのサイズ
それがゼロであると仮定して、この可能性を無視してどこまで行くことができますか?
たとえば、1メガバイトずつ、10億のユニークな画像があるとします。各ファイルのコンテンツのSHA-256ハッシュを計算します。衝突の可能性は次の条件によって異なります。
それがゼロであると仮定して、この可能性を無視してどこまで行くことができますか?
回答:
通常の答えはこうです:悪質な小惑星が1秒以内に地球に衝突し、私たちが知る限り文明を破壊し、数十億人を殺害する確率はどのくらいですか?それよりも低い確率での不運な出来事は、実際にはそれほど重要ではないと主張することができます。
私たちは、出力サイズで「完璧な」ハッシュ関数を使用している場合は、N、および我々が持っているのp(個々のメッセージの長さは重要ではありません)、ハッシュへのメッセージを、その後、衝突の確率は約あるP 2 /2 のn + 1(これは近似値であります「小さい」pに対して有効、つまり2 n / 2よりかなり小さい)。たとえば、SHA-256(n = 256)と10億メッセージ(p = 10 9)の場合、確率は約4.3 * 10 -60です。
大量殺人の宇宙岩は、平均して約3000万年に1回発生します。これにより、そのようなイベントが次の1秒間に発生する確率が約10 -15になります。これは、SHA-256衝突よりも45桁多い可能性があります。簡単に言うと、SHA-256の衝突が怖い場合は、優先順位が間違っています。
攻撃者がハッシュされるメッセージを選択できるセキュリティ設定では、攻撃者は実質的に10億を超えるメッセージを使用する可能性があります。ただし、攻撃者の成功確率は依然として非常に小さいことがわかります。これが、256ビット出力のハッシュ関数を使用することの要点です。これにより、衝突のリスクを無視できます。
もちろん、上記のすべては、SHA-256が「完全な」ハッシュ関数であることを前提としています。それでも、SHA-256は非常に堅牢に見えます。
衝突の可能性はファイルのサイズに依存せず、ファイルの数にのみ依存します。
これは誕生日のパラドックスの例です。ウィキペディアのページでは、衝突の可能性の概算を示しています。数値を実行すると、地球上でこれまでに作成されたすべてのハードディスクが1MBのファイルを十分に保持できず、SHA-256で0.01%の衝突の可能性さえ得ることがわかります。
基本的に、あなたは単に可能性を無視することができます。
重要な問題は、衝突が実際に発生した場合にどうなるかです。答えが「原子力発電所が爆発する」なら、衝突の可能性を無視してはいけません。ほとんどの場合、結果はそれほど悲惨ではないので、衝突の可能性は無視できます。
また、ソフトウェア(またはその一部)が展開され、同時に膨大な数のコンピューター(最近ではほとんどどこにでもある小さな組み込みマイクロコンピューター)で使用される可能性があることも忘れないでください。そのような場合は、得られた見積もりに可能な限り多くのコピーを掛ける必要があります。