MD5が衝突を起こすまでにいくつのランダム要素がありますか?

StackOverflow https://stackoverflow.com/questions/201705

  •  03-07-2019
  •  | 
  •  

質問

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

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

ボーナス:MD5が生成するハッシュ値の衝突を確認し始める前に、いくつのファイルを保持できましたか?

役に立ちましたか?

解決

2つのハッシュが誤って衝突する確率は 1/2 128 これは、340分の1、282のdec、366のillion、920のoct、938のseptillion 463のsextillion 463のquintillion 374のquadillion 607兆431億768百万211の456です。

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

他のヒント

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

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

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

md5(filename) + timestamp

または:

md5(filename + timestamp)

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

衝突の大まかな目安は、値の範囲の平方根です。 MD5 sigはおそらく128ビット長であるため、2 ^ 64の画像を超えて衝突が発生する可能性が高くなります。

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

衝突によるMD5の問題は十分に公表されていますが、ランダムデータ間のUNINTENTIONAL衝突は非常にまれ。一方、ファイル名でハッシュしている場合、それはランダムなデータではなく、衝突がすぐに起こると予想されます。

MD5の衝突はほとんどありません。 9兆 MD5がある場合、 9兆で衝突が起こる可能性は1つだけです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top