MD5中的碰撞概率

时间:2017-01-20 17:58:51

标签: md5

最糟糕的情况是,我在缓存中有1.8亿个值(15分钟窗口,然后它们变得陈旧),MD5有2 ^ 128个值。碰撞的概率是多少?或者更好的是,是否有一个网页可以回答这个问题或粗略估计?那会摇滚,所以我知道我的机会。

1 个答案:

答案 0 :(得分:6)

概率 1-m!/(mⁿ(mn)!)其中 m = 2 12 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.

搜索生日问题会显示Wikipedia page,其中提供了一个显示128位和2.6×10 15哈希的表格,碰撞的概率是10十分之一,所以这个数字是140×哈希比你正在考虑的哈希。所以你知道你的几率比这更糟糕。

如果 n << m 1-e -n 2 / 2m ,那么这是一个很好的近似值,其中if你插入上面的 m n ,你会得到4.76×10 -2或3或2.10×10 2中的1作为碰撞的概率。

即使碰撞的概率非常低,在FOOBAR情况下也是谨慎的,比如说如果有问题并且哈希累积超过15分钟,至少要确认会发生什么发生碰撞事件。如果某人以某种方式注入重复的哈希以试图破坏它,这也会有所帮助。