Amazon S3に画像ライブラリがあります。画像ごとに、サーバー上のソースURLと一意のファイル名を取得するためのタイムスタンプをmd5します。S3はサブディレクトリを持つことができないため、これらの画像をすべて1つのフラットフォルダーに保存する必要があります。
生成されるMD5ハッシュ値の衝突について心配する必要がありますか?
おまけ:MD5が生成するハッシュ値で衝突が発生し始める前に、いくつのファイルを取得できますか?
Amazon S3に画像ライブラリがあります。画像ごとに、サーバー上のソースURLと一意のファイル名を取得するためのタイムスタンプをmd5します。S3はサブディレクトリを持つことができないため、これらの画像をすべて1つのフラットフォルダーに保存する必要があります。
生成されるMD5ハッシュ値の衝突について心配する必要がありますか?
おまけ:MD5が生成するハッシュ値で衝突が発生し始める前に、いくつのファイルを取得できますか?
回答:
偶然に衝突するハッシュが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年のため。
1 - sPn/s^n
。ここs
で、は検索スペースのサイズ(2^128
この場合)でありn
、ハッシュされたアイテムの数です。おそらくあなたが考えているのは2^64
、衝突の可能性を50%にするためにMD5ハッシュする必要があるアイテムのおおよその数です。
S3はサブディレクトリを持つことができます。キー名に「/」を入れるだけで、ファイルが別のディレクトリにあるかのようにアクセスできます。これを使用して、ユーザーファイルをS3のユーザーIDに基づいて個別のフォルダーに保存します。
例:「mybucket / users / 1234 / somefile.jpg」。これは、ファイルシステムのディレクトリとまったく同じではありませんが、S3 APIには、ほぼ同じように機能するいくつかの機能があります。「users / 1234 /」で始まるすべてのファイルを一覧表示するように要求すると、その「ディレクトリ」内のすべてのファイルが表示されます。
待ってください、それは:
md5(filename) + timestamp
または:
md5(filename + timestamp)
前者の場合、あなたはGUIDへの道のほとんどであり、私はそれについて心配しません。後者の場合は、最終的に衝突に遭遇する方法についてのKargの投稿を参照してください。
md5(filename) + timestamp
する必要があります。衝突が全体的に同じになるには、まったく同じタイムスタンプでmd5衝突が必要になるため、衝突リスクが大幅に減少します。ファイル名が最初はランダムであると仮定するmd5(filename + timestamp)
と、と同じですmd5(filename)
(ランダムに何かをランダムに追加すると、個々のmd5の結果が変更されるだけであり、すべてのmd5ハッシュにわたって誕生日の問題が依然として存在するため)。
衝突の大まかな目安は、値の範囲の平方根です。MD5 sigはおそらく128ビット長であるため、2 ^ 64画像を超えて衝突が発生する可能性があります。
ランダムなMD5衝突は非常にまれですが、ユーザーが(逐語的に格納される)ファイルを提供できる場合、衝突が発生するように設計できます。つまり、MD5sumが同じでデータが異なる2つのファイルを意図的に作成できます。アプリケーションがこのケースを賢明な方法で処理できることを確認するか、SHA-256などのより強力なハッシュを使用してください。
衝突が原因でMD5でよく知られた問題がありましたが、ランダムデータ間の意図しない衝突は非常にまれです。一方、ファイル名をハッシュしている場合、それはランダムなデータではなく、衝突がすぐに発生すると予想されます。
それがどれほど可能性があるかは本当に重要ではありません。可能です。ハッシュする最初の2つのことで発生する可能性があります(ほとんどありませんが、可能です)。そのため、最初から衝突をサポートする必要があります。
MD5の衝突はほとんど起こりません。あなたがお持ちの場合9000000000000 MD5sを、で唯一のチャンスがあり9000000000000衝突があることを。