【问题标题】:Probability of SHA1 collisionsSHA1 冲突的概率
【发布时间】:2010-12-24 10:38:02
【问题描述】:

给定一组 100 个相同长度的不同字符串,您如何量化这些字符串不太可能发生 SHA1 摘要冲突的概率...?

【问题讨论】:

  • 澄清一下,你怎么能有“不同但等长”的字符串?
  • @kevindtimm "a", "b", "c" 长度相等,但字符串不同
  • @anthony,为什么这么明显?不知道是不是真的
  • doh,重读后,一目了然。
  • 这与这个问题有关:sites.google.com/site/itstheshappening 至少发现了一次碰撞。

标签: hash sha1 probability


【解决方案1】:

是否生成了 160 位哈希值 通过 SHA-1 足够大,以确保 每个区块的指纹都是唯一的吗? 假设随机散列值具有 均匀分布,集合 n个不同的数据块和一个哈希 生成 b 位的函数,即 有一个的概率 p 或更多的碰撞由 成对的块数相乘 通过给定对的概率 会发生碰撞。

(来源:http://bitcache.org/faq/hash-collision-probabilities

【讨论】:

  • 总之,发生碰撞的可能性大约为 10^-45。这是非常、非常不可能的。
  • 但是 SHA-1 不是均匀分布的,它可能大于这个上限。我怀疑这个等式是不正确的。至少等于。
  • 这个答案没有考虑到 2005 年的中国发现,他们能够在 2^69 次迭代中产生碰撞,而不是蛮力预测的 2^80 次 schneier.com/blog/archives/2005/02/sha1_broken.html
  • @Djarid 重要的是不要混淆意外的哈希碰撞和对抗性碰撞搜索。前者是两个项目的哈希发生碰撞的概率,并遵循上面的公式(尽管,正如 Kamel 所指出的,分布并不完全均匀,因此概率可能更高)。后者用于故意尝试发现冲突,并依赖于发现和利用哈希中的弱点。加密散列试图对此类攻击具有鲁棒性,但对于更简单的散列应用程序(不传输秘密)来说,它们通常是多余的。
  • 当 2^b >> n^2 (并且当 2^b 非常大时)时,该公式是准确的。我知道这是 sha1 的市长(如果不是全部的话)......但要记录在案!
【解决方案2】:

嗯,碰撞的概率是:

1 - ((2^160 - 1) / 2^160) * ((2^160 - 2) / 2^160) * ... * ((2^160 - 99) / 2^160)

考虑 2 个项目在 10 个空间中发生碰撞的概率。第一个项目是唯一的,概率为 100%。第二个是唯一的,概率为 9/10。所以两者唯一的概率是100% * 90%,碰撞的概率是:

1 - (100% * 90%), or 1 - ((10 - 0) / 10) * ((10 - 1) / 10), or 1 - ((10 - 1) / 10)

这不太可能。你必须有更多的字符串才能成为一个遥远的可能性。

看看this page on Wikipedia上的表格;只需在 128 位和 256 位的行之间进行插值。

【讨论】:

    【解决方案3】:

    那是Birthday Problem - 这篇文章提供了很好的近似值,可以很容易地估计概率。实际概率会非常非常低 - 请参阅 this question 示例。

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2022-01-01
      • 2012-12-22
      相关资源
      最近更新 更多