実際にはSHAの衝突の可能性を無視しても安全ですか?


209

たとえば、1メガバイトずつ、10億のユニークな画像があるとします。各ファイルのコンテンツのSHA-256ハッシュを計算します。衝突の可能性は次の条件によって異なります。

  • ファイルの数
  • 単一ファイルのサイズ

それがゼロであると仮定して、この可能性を無視してどこまで行くことができますか?


1
ハッシュキーを何に使用するかによります。それが何らかのファイル識別である場合、衝突はファイルが同一であることを意味することもあり、したがって衝突の場合にもファイルを比較する必要があります。ファイルサイズを比較するだけでもかなり安全だと思います。
mojuba

はい、この場合、ファイルサイズを比較すると、可能性は大幅に減少します。2つのハッシュアルゴリズムを使用して、結果を連結することもできます。すると、両者が同時に衝突する可能性がさらに減少します。しかし、問題は、「どれだけ」安全か。たぶん、数式と数値が必要です。
Hristo Hristov

2
@Hristo Hristov:ハッシュキーが疑似乱数(これは理論的には正しい)であると仮定すると、128ビットキーの10億個は2.9 * 10 ^ -30の衝突確率を与えます。あなたはそれを「極小」とさえ呼ぶことはできません、それはそれより少ないです;)
mojuba

3
@mojuba:さらに良いことに、彼は256ビットのハッシュについて質問しています。
Michael Borgwardt

FWIW:GITバージョン管理システムは、コンテンツSHAによってファイルを識別します。
スネマーチ

回答:


385

通常の答えはこうです:悪質な小惑星が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は非常に堅牢に見えます。


12
これは非常に良い答えです、ありがとう!しかし、衝突の場合に原子力発電所が爆発し、それがあなた次第であるならば、あなたはそのリスクを負うでしょうか?あなたが完全に正しいならば、文明が破壊される可能性が45桁も大きいので、私たちはリスクを取ることができます。正しい?
Hristo Hristov

46
@Hristoそうだと思います。そのリスクを負うことになるでしょう。原子力発電所は、機械的故障、建設中の人的ミス、運転中のオペレーターのミスなどの原因により、爆発する可能性がはるかに高くなっています。核事故を引き起こしたのがSHA-256衝突だけだったとしたら、これまでのところほぼ確実にゼロでした。
Roman Starkov


37
私は、SHA-256衝突を体験するために生きるずっと前に、小惑星によって一掃される可能性が高いことを知っているので、今では安静にすることができます。
AaronLS 2013

10
申し訳ありませんが、いわゆる「誕生日のパラドックス」を見逃しています。「素敵なテーブル」をよく見てください、それはあなたが考える方法では機能しません。私が示す数字については、その表では、「4.3 * 10 ^ -60」というラベルの付いた列と「128ビット」という行の値は「10 ^ 9」になります(ただし、表は10 ^ -18未満にはなりません) )。
Thomas Pornin 14年

47

衝突の可能性はファイルのサイズに依存せず、ファイルの数にのみ依存します。

これは誕生日のパラドックスの例です。ウィキペディアのページでは、衝突の可能性の概算を示しています。数値を実行すると、地球上でこれまでに作成されたすべてのハードディスクが1MBのファイルを十分に保持できず、SHA-256で0.01%の衝突の可能性さえ得ることがわかります。

基本的に、あなたは単に可能性を無視することができます。


5
その結論には同意できない。はい、ハードディスクはその数のファイルを保存できませんが、IMOは状況を誤って解釈します。衝突を生成するのに必要なファイルは2つだけです。可能性は非常に低いですが、それでも発生する可能性があります。
sharptooth

11
@sharptooth:いいえ、私は状況を誤って伝えていません。あなたとあなたが知っている全員が同じ日に交通事故で亡くなる可能性は非常に低いですが、それでも発生する可能性があります(SHA-256衝突の可能性よりはるかに高いです)。しかし、あなたはその可能性を無視しています。
Michael Borgwardt

11
@sharptooth:私は数百人の特定の人々の別々の同時交通事故について話していました。あなたは本当にそれを低くするためにどんなステップも取ることができません。それはすでに奇妙に低いので、それは無意味でしょう。しかし、SHA-256の衝突よりもはるかに可能性が高いので、想像もできないほどです。それはトーマスがしたのと同じ議論です。
Michael Borgwardt

12
@sharptooth:いいえ、その数はSHA-256ハッシュスペースのサイズによって完全に小さくなっているため、可能性はそれほど大きくなりませ。これは、適切に考慮していない1つのことです。すべての要因は、等しくではなく、実際の大きさによって重み付けする必要があります。地球上のすべての人に対して毎秒10億のハッシュを生成し、それを1000年間実行した場合でも、衝突の可能性は1%未満です。
Michael Borgwardt、

3
メモリからのフェッチまたはディスクからの読み取りごとに未修正エラーの可能性をチェックしないと(SHA-256衝突よりもはるかに高い確率で)、確率を完全に理解できない可能性があります。
クリストフ

17

まず、ゼロではありませんが、非常にゼロに近いです

重要な問題は、衝突が実際に発生した場合にどうなるかです。答えが「原子力発電所が爆発する」なら、衝突の可能性を無視してはいけません。ほとんどの場合、結果はそれほど悲惨ではないので、衝突の可能性は無視できます。

また、ソフトウェア(またはその一部)が展開され、同時に膨大な数のコンピューター(最近ではほとんどどこにでもある小さな組み込みマイクロコンピューター)で使用される可能性があることも忘れないでください。そのような場合は、得られた見積もりに可能な限り多くのコピーを掛ける必要があります。


...コピー数ではなく、データセット数すべてのコピーがダイジェストされます。
Andreas Spindler 2013

1
これは誤りです。実行中のソフトウェアのコピー数は関係ありません。重要な唯一のことは、処理される一意のファイルの数であり、誕生日のパラドックスは計算の数学です。
ダークベスター2016

1
ハードウェア障害の可能性-つまり、輻射などによりどこかがビット反転する可能性-はハッシュ衝突よりも可能性が高いため、ハッシュ衝突を心配するのはばかげていると誰かが他の誰かが言っているのを聞きました。個人的に、私は両方のケースをカバーして安全になるように努力します(原子力発電所の安全性が高いほど良いでしょう)が、潜在的な危険のリストでハッシュの衝突はおそらく非常に低くなります(ハッシュスペースが十分に大きいと仮定) 。ただし、これはすべて、より頻繁に衝突を引き起こすハッシュ関数に隠れた動作がないことを前提としています。
Chris Middleton


@GreenTreeリンクしているのは、意図的に衝突を作成することです。
シャープトゥース2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.