我想将md5哈希截断为大约一半的大小。多少会增加碰撞的几率?如果我要处理大约50万代,我应该担心碰撞吗?那一代人呢。
答案 0 :(得分:15)
您正在寻找的数学是在维基百科的birthday attack页面上。
我们考虑以下实验。从一组 H 值中,我们随机均匀地选择 n 值,从而允许重复。设 p(n; H)是在此实验中至少选择一个值多次的概率。该概率可以近似为
对于128位,500,000个哈希值之间发生冲突的可能性大约为10-28。如果将碰撞空间的大小减半,则碰撞的可能性大约为10-9。也就是说,即使机会大大更大,它仍然非常非常低。这取决于没有碰撞的重要性。 10 -9 大约十亿分之一,所以虽然极不可能,但它在可能性范围内。
供参考:
10 28 = 10 octillion = 100亿亿亿 10 9 = 10亿
答案 1 :(得分:1)
有一个名为birthday problem的有趣数学问题可以解决这种情况。事实是,你输入的条目越多,发生碰撞的可能性就越大。
在上面链接上发布的表之后,假设您的摘要每个是64位(因为单个MD5散列是128位)并且MD5具有均匀分布,则两个散列将碰撞的可能性非常小。它在610,000,000个参赛作品中变得非常重要(1%或更多)。