MD5产生冲突之前有多少随机元素



我在AmazonS3上有一个图像库。对于每个图像,我md5服务器上的源URL加上一个时间戳,以获得一个唯一的文件名。由于S3不能有子目录,我需要将所有这些图像存储在一个平面文件夹中。

我需要担心生成的MD5哈希值发生冲突吗?

额外的好处:在MD5产生的哈希值发生冲突之前,我可以有多少个文件?

只有两个散列意外碰撞的概率为1/2128,即1/340万亿分之一282万亿分之一366非亿920 10月938 9月463六次方463五分之一374万亿607万亿4310亿7.68亿211000 456。

然而,如果你保留了所有的散列,那么由于生日悖论,概率会更高。要使任何哈希与任何其他哈希碰撞的几率达到50%,您需要264哈希。这意味着,要获得碰撞,平均而言,您需要在100年内每秒哈希6个亿个文件。

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但数据不同的文件。确保您的应用程序能够以合理的方式处理这种情况,或者可能使用像SHA-256这样更强的哈希。

虽然MD5因冲突而出现的问题已经广为人知,但随机数据之间的非约定冲突极为罕见。另一方面,如果你对文件名进行散列,那就不是随机数据,我预计很快就会发生冲突。

可能性有多大并不重要;这是可能的。它可能发生在你散列的前两件事上(非常不可能,但有可能),所以你需要从一开始就支持冲突。

MD5冲突极不可能发生。如果您有9万亿MD5,则9万亿只有一次发生碰撞的机会。

最新更新