MD5中碰撞的概率

8

假设我在缓存中有1.8亿个值(它们在15分钟后过期),而MD5有2^128个值。 那么我的碰撞概率是多少?或者更好的,是否有一个网页可以回答这个问题或提供大致估计?这将非常有用,因为我需要了解自己的机会。


1
可能是MD5生成碰撞之前需要多少随机元素?的重复问题。 - mrogers
我很好奇,你最终是否在你的用例中使用了MD5? - Nilan Saha
1个回答

8
这里是需要翻译的内容:

概率为 1-m!/(mⁿ(m-n)!),其中 m = 2¹²⁸n = 180000000

在在线 Wolfram 上运行它会超出可用的计算时间!

如果您在本地已安装 SmallTalk,则可以运行此命令:

|m n p|

m := 2 raisedTo:128.
n := 180000000.
p := (1-(m factorial/((m raisedTo:n)*(m-n)factorial)))asFloat.

Transcript show:p printString;cr.

一次生日悖论的搜索会出现一个 维基百科页面,其中提供了一个表格,显示对于128位和2.6×10¹⁰个哈希,碰撞的概率为10¹⁸分之1,因此这是比您考虑的哈希数量多140倍,所以您知道您的胜算比这要“差”。
如果 n ≪ m,则一个很好的近似值为 1-e-n2/2m,如果您将上面的 mn 代入公式,则得到4.76×10⁻²³或10²²分之2.10中的1作为碰撞概率。
即使碰撞的概率非常低,在 FOOBAR 的情况下,如果存在问题并且哈希累积超过15分钟,至少要确认在发生碰撞事件时会发生什么。这也有助于防止某人通过注入重复的哈希来尝试破坏它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接