MD5が衝突を起こす前のランダム要素の数は?


164

Amazon S3に画像ライブラリがあります。画像ごとに、サーバー上のソースURLと一意のファイル名を取得するためのタイムスタンプをmd5します。S3はサブディレクトリを持つことができないため、これらの画像をすべて1つのフラットフォルダーに保存する必要があります。

生成されるMD5ハッシュ値の衝突について心配する必要がありますか?

おまけ:MD5が生成するハッシュ値で衝突が発生し始める前に、いくつのファイルを取得できますか?



2
文字通りの答えは、2番目のファイルは最初のファイルと同じMD5を持つことができるということです。ただし、オッズは非常に小さいです。
リックジェームズ

回答:


307

偶然に衝突するハッシュが2つある確率は1/2 128です。 これは、340百万分の1、282デシロン、366ノリオン、920 octillion、938 septillion、463 sextillion 463 quintillion 374 quadrillion 607兆431 billion 768 billion 211,000 456の1です。

ただし、すべてのハッシュを保持すると、誕生日のパラドックスのおかげで、確率が少し高くなります。ハッシュが他のハッシュと衝突する可能性を50%にするには、2 64ハッシュが必要です。衝突を取得するには、この手段は、平均して、あなたはハッシュする必要があります6 十億個のファイル毎秒の 100年のため


20
「衝突の確率は1/2 ^ 64」 -何ですか?衝突の確率は、すでにハッシュされているアイテムの数に依存します。固定数ではありません。実際、これはとまったく同じです1 - sPn/s^n。ここsで、は検索スペースのサイズ(2^128この場合)でありn、ハッシュされたアイテムの数です。おそらくあなたが考えているのは2^64、衝突の可能性を50%にするためにMD5ハッシュする必要があるアイテムのおおよその数です。
BlueRaja-Danny Pflughoeft 2013年

19
+1私は常に999兆lolを超えて数える方法を知りたいと思っていました(そして、ええ、あなたの答えは有益でした)
Kmeixner

7
残念ながら、あなたはまだ正しくありません。ハッシュ関数は本当にランダムであると想定しています。そうではない。これは、衝突確率が高いことを意味します。
ヨルゲンFogh

22
JørgenFogh:物理法則もすべて「正しくありません」。このようなレベルのペンダティズムは、意味のある方法で答えを変更しないため不要です。
Kornel 2015

20
だからチャンスがあると言っているのです!
ワルゴニア語2018年

27

S3はサブディレクトリを持つことができます。キー名に「/」を入れるだけで、ファイルが別のディレクトリにあるかのようにアクセスできます。これを使用して、ユーザーファイルをS3のユーザーIDに基づいて個別のフォルダーに保存します。

例:「mybucket / users / 1234 / somefile.jpg」。これは、ファイルシステムのディレクトリとまったく同じではありませんが、S3 APIには、ほぼ同じように機能するいくつかの機能があります。「users / 1234 /」で始まるすべてのファイルを一覧表示するように要求すると、その「ディレクトリ」内のすべてのファイルが表示されます。


7
衝突の可能性についての質問には実際には答えないので、これは私が考えるコンテンツであるべきです
Ian Clark

18

待ってください、それは:

md5(filename) + timestamp

または:

md5(filename + timestamp)

前者の場合、あなたはGUIDへの道のほとんどであり、私はそれについて心配しません。後者の場合は、最終的に衝突に遭遇する方法についてのKargの投稿を参照してください。


1
タイムスタンプを含めると衝突の可能性がどのように増加するかについて詳しく説明してください
ブラッドトーマス

14
@BradThomas:ありません。MD5の衝突リスクは、ファイル名であっても、ファイル名+タイムスタンプの組み合わせであっても同じです。ただし、最初のシナリオでは、MD5衝突とタイムスタンプ衝突の両方が必要になります。
Vincent Hubert

2
これでも、1分あたり2人のユーザーと衝突する可能性は2 ^(128 ^ 60)です。文字通り使用できません。
ベリーM.

2
@BradThomas明確にmd5(filename) + timestampする必要があります。衝突が全体的に同じになるには、まったく同じタイムスタンプでmd5衝突が必要になるため、衝突リスクが大幅に減少します。ファイル名が最初はランダムであると仮定するmd5(filename + timestamp)と、と同じですmd5(filename)(ランダムに何かをランダムに追加すると、個々のmd5の結果が変更されるだけであり、すべてのmd5ハッシュにわたって誕生日の問題が依然として存在するため)。
robocat 2018年


7

ランダムなMD5衝突は非常にまれですが、ユーザーが(逐語的に格納される)ファイルを提供できる場合、衝突が発生するように設計できます。つまり、MD5sumが同じでデータが異なる2つのファイルを意図的に作成できます。アプリケーションがこのケースを賢明な方法で処理できることを確認するか、SHA-256などのより強力なハッシュを使用してください。


ソルトを使用すると、ユーザーエンジニアリングの問題に対処できます。
StackOverflowed 2014年

それは塩がどのように適用されるかに依存します。これは、ユーザー提供のデータのプレフィックス、またはHMACのキーである必要があります。ただし、防御を徹底的に実践することは、おそらくまだ良い考えです。
bdonlan 2014

SHA256は256ビット長ですが、SHA256をより少ないビットに切り捨てることで、格納している鍵の長さとの衝突のリスクをトレードオフできます。たとえば、SHA256を使用して128ビットに切り捨てます(MD5を使用するよりも安全です)同じビット数ですが)。
robocat 2018年

5

衝突が原因でMD5でよく知られた問題がありましたが、ランダムデータ間の意図しない衝突は非常にまれです。一方、ファイル名をハッシュしている場合、それはランダムなデータではなく、衝突がすぐに発生すると予想されます。


私はテイラーズ例を持っている唯一の問題は...誰かがあなたのデータベースのコピーを取得する場合、彼らはおそらく、レインボーテーブルを使用したクレジットカード番号を把握できることである
サムサフラン

1
私はクレジットカードにMD5を使用することを選択しませんが、10,000,000(8桁は私が見た中で最小の長さのクレジットカードです)から9,999,999,999,999,999(最大の16桁の番号)までのすべての有効なクレジットカード番号のRainbowテーブルは依然として大きいです生成するテーブル。これらの数字を盗むためのより簡単な方法があるでしょう。
アクロマン

1

それがどれほど可能性があるかは本当に重要ではありません。可能です。ハッシュする最初の2つのことで発生する可能性があります(ほとんどありませんが、可能です)。そのため、最初から衝突をサポートする必要があります。


36
もちろん、1/2 ^ 128の確率で発生する可能性のある他の多くの悪いことがあるかもしれません。あなたは心配するためにこれを選び抜くことを望まないかもしれません。
ウィルディーン

2
ここで起こりうる最悪のことは、写真を撮ることです。比較的少数の場合は心配しません。ソフトウェアが航空機の着陸の自動操縦を制御している場合は、別の話です。
ジムC

9
あなたは真剣にすることはできません。衝突の可能性を高めるには、毎秒60億のファイルを毎秒100秒間ハッシュする必要があります。非常に運が悪い場合でも、S3の全容量を人間の寿命よりも長く使用することになるでしょう。
Kornel

12
データベースとそのバックアップがすべて失敗する可能性は数十億倍も高くなります。衝突は心配する価値がありません。
Artelius 2009

5
衝突防止時間を利用してバンカーを構築し、サーバーを配置します!それらの厄介な流星はあなたを襲う可能性が非常に高いですが、可能性は非常に高いので、物乞いから流星シェルターをサポートする必要があります。
polvoazul

1

MD5の衝突はほとんど起こりません。あなたがお持ちの場合9000000000000 MD5sを、で唯一のチャンスがあり9000000000000衝突があることを。


1
他の回答の多くは、もう1つ項目を追加するときの衝突の可能性について話します。私の回答は、おそらくテーブル全体が重複していることについて話しているので、より役立つと思います。
リックジェームズ

1
これはMD5とは関係がなく、正しくありません。9兆匹の猫がいる場合、他の誰かが同じ猫を飼っている可能性は9兆分の1であると言っているようなものです。ここでの重要な問題は、複数の値を持つ同じハッシュを取得できることです。
Joonas Alhonen

@JoonasAlhonen-はい、そうです。そして多くの貧しい人々は彼らが買うことができないさらにもう一つの宝くじを買う口実としてそれを使います。
リックジェームズ

おかげで、これは実際には非常に有用な統計です。9兆アイテムの挿入時に衝突が発生した確率。ありがとう。
トムP.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.