【发布时间】:2017-04-16 16:43:00
【问题描述】:
我想将 md5 散列截断到大约一半大小。这会增加多少碰撞的几率?如果我正在处理大约 500 000 代,我应该担心碰撞吗? 100 万代呢?
【问题讨论】:
-
为了澄清这个问题,你是说你想从一个已经存在已知漏洞的弱哈希算法开始,然后故意让它变得更弱吗?
-
他不一定使用哈希来保证安全
标签: md5
我想将 md5 散列截断到大约一半大小。这会增加多少碰撞的几率?如果我正在处理大约 500 000 代,我应该担心碰撞吗? 100 万代呢?
【问题讨论】:
标签: md5
您要查找的数学在 Wikipedia 的 birthday attack 页面上。
我们考虑以下实验。我们从一组 H 值中随机均匀地选择 n 值,从而允许重复。设 p(n; H) 是在这个实验中至少一个值被多次选择的概率。这个概率可以近似为
对于 128 位,500,000 个哈希值之间发生冲突的可能性约为 10-28。如果你将碰撞空间的大小减半,那么碰撞的几率大约是10-9。也就是说,即使机会大大 更大,它仍然非常非常低。这取决于没有碰撞的重要性。 10-9 大约是十亿分之一,因此虽然极不可能,但它在可能性范围内。
供参考:
1028 = 10 octillion = 100 亿亿
109 = 10 亿
【讨论】:
有一个名为birthday problem 的有趣数学问题可以处理这种情况。事实上,你推入的条目越多,发生冲突的机会就越大。
按照上面链接上发布的表格,假设您的摘要每个都是 64 位(因为单个 MD5 哈希是 128 位)并且 MD5 具有均匀分布,那么两个哈希发生冲突的可能性非常低。在 610,000,000 个条目时,它变得显着(1% 或更多)。
【讨论】: