在这种情况下,md5和sha1之间有什么区别吗?

时间:2010-05-31 09:41:20

标签: md5 theory sha1

众所周知

1.    if   ( md5(a)   == md5(b)   )
2.    then ( md5(a.z) == md5(b.z) )
3.    but  ( md5(z.a) != md5(z.b) )

其中点连接字符串。

编辑---

您可以在此处找到ab
http://www.mscs.dal.ca/~selinger/md5collision/

检查以下链接:
hexpaste.com/qzNCBRYb/1 - 这是a.md5(a)."kutykurutty"
hexpaste.com/mSXMl13A/1 - 这是b.md5(b)."kutykurutty"

他们共享相同的md5哈希,但它们是不同的。但您可以调用这些字符串a'b',因为它们具有相同的md5。

---编辑

如果我们将所有 md5 更改为 sha1 ,第二行会发生什么?所以:

1.    if   ( sha1(c)   == sha1(d)   )
2.    then ( sha1(c.z) ?= sha1(d.z) )

我找不到两个具有相同 sha1 的不同字符串,这就是我问这个问题的原因。关于 sha1 还有其他有趣的“规则”吗?

4 个答案:

答案 0 :(得分:1)

第一个语句仅适用于针对给定za专门计算的非常具体的b。确实,您可以生成MD5冲突,但这并非易事 - 需要一些计算工作,当然您不能指望任何z都可以。

目前,SHA-1被认为是加密安全的,这意味着没有人想出一种生成SHA-1冲突的方法。这并不意味着它确实是安全的,并且不可能产生冲突 - 也许还有一个尚未发现的漏洞。即使存在漏洞,相同的字符串也不太可能同时形成MD5和SHA-1冲突。

答案 1 :(得分:1)

在这种情况下,SHA1的行为与MD5完全相同。

我找到的唯一两个参考文献如下 -

  1. http://www.iaik.tugraz.at/content/research/krypto/sha1/MeaningfulCollisions.php
  2. http://www.schneier.com/blog/archives/2005/02/sha1_broken.html#c1654(见David Schwartz的评论)
  3. 来自IAIK网站 -

      
        

    请注意,对于冲突的SHA-1消息对(对于遵循类似设计原则的所有其他散列函数),只要它们相同,就始终可以在两个消息中附加后缀。

      

    我认为没有人为SHA1找到两个碰撞字符串,所以这主要是学术讨论。但据我所知,发现碰撞时,应该可以通过使用此属性创建其他几个碰撞。

答案 2 :(得分:0)

Sha1并不像md5那样容易破解,但他们确实在05年发现了一些漏洞。我相信。

答案 3 :(得分:0)

我认为你的例子是错误的。 让我告诉你原因:

md5(a) == md5(b)

当两个哈希值相同时,相应的字符串必须相同(这可能是碰撞,但在我的论文中并不重要),所以我们将:

a = b

当你现在用字符串z连接两个字符串时,你将拥有     a.z = b.z. 并且它们的md5-hashes将是相同的,因为它们具有相同的字符串输入

md5(a.z) == md5(b.z)

并且md5-hash将第三次等于两个字符串输入相同

md5(z.a) == md5(z.b)

对于md5和其他所有哈希算法都是如此,而它们必须是确定性的并且没有副作用。


所以你的例子只有在z是一个会导致碰撞的特殊字符串时才有意义。因此md5和sha1的行为完全相同: 附加的碰撞字符串将导致碰撞,但前置的将是不同的哈希值(但是你发现碰撞字符串的概率确实非常低,它将被预先依赖并附加导致碰撞,但是还没有找到任何示例事实上) 你只是没有找到两个具有相同sha1的不同字符串,因为碰撞很难找到,正如我之前的人所解释的那样。