【问题标题】:Truncating an md5 hash, How do I calculate the odds of a collision occurring?截断 md5 哈希,如何计算发生冲突的几率?
【发布时间】:2017-04-16 16:43:00
【问题描述】:

我想将 md5 散列截断到大约一半大小。这会增加多少碰撞的几率?如果我正在处理大约 500 000 代,我应该担心碰撞吗? 100 万代呢?

【问题讨论】:

  • 为了澄清这个问题,你是说你想从一个已经存在已知漏洞的弱哈希算法开始,然后故意让它变得更弱吗?
  • 他不一定使用哈希来保证安全

标签: md5


【解决方案1】:

您要查找的数学在 Wikipedia 的 birthday attack 页面上。

我们考虑以下实验。我们从一组 H 值中随机均匀地选择 n 值,从而允许重复。设 p(n; H) 是在这个实验中至少一个值被多次选择的概率。这个概率可以近似为

对于 128 位,500,000 个哈希值之间发生冲突的可能性约为 10-28。如果你将碰撞空间的大小减半,那么碰撞的几率大约是10-9。也就是说,即使机会大大 更大,它仍然非常非常低。这取决于没有碰撞的重要性。 10-9 大约是十亿分之一,因此虽然极不可能,但它在可能性范围内。

供参考:

1028 = 10 octillion = 100 亿亿
109 = 10 亿

【讨论】:

  • 有人曾经说过“百万分之一是下周二”:)
  • 10^-9 会让我非常担心。一般来说,MD5 的碰撞次数令人担忧,更不用说这些天周围的所有彩虹表了。
【解决方案2】:

有一个名为birthday problem 的有趣数学问题可以处理这种情况。事实上,你推入的条目越多,发生冲突的机会就越大。

按照上面链接上发布的表格,假设您的摘要每个都是 64 位(因为单个 MD5 哈希是 128 位)并且 MD5 具有均匀分布,那么两个哈希发生冲突的可能性非常低。在 610,000,000 个条目时,它变得显着(1% 或更多)。

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2014-04-10
    • 2014-02-24
    • 2020-10-21
    相关资源
    最近更新 更多