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

3
众所周知,
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个回答

1

第一句话只适用于特定的z,需要根据给定的ab进行计算。虽然可以生成MD5碰撞,但这并不是轻而易举的事情——需要一些计算工作,而且不能指望任何z都能做到。

目前,SHA-1被认为是具有密码学安全性的,这意味着没有人想出了生成SHA-1碰撞的方法。这并不意味着它真的很安全,也不意味着碰撞生成是不可能的——也许存在尚未发现的漏洞。即使存在漏洞,同一字符串同时形成MD5和SHA-1碰撞的可能性极小。


实际上,任何z都可以胜任。我在这个网站上找到了a和b:http://www.mscs.dal.ca/~selinger/md5collision/如果你在这些“字符串”后面放置任何相同的东西,你最终会得到相同的md5。我的问题不是关于安全性的,我只是好奇。请检查以下内容: http://hexpaste.com/qzNCBRYb/1 http://hexpaste.com/mSXMl13A/1 顺便说一句:我正在谈论不同的字符串(a、b、c和d)。 - Vili
@Vili: 我明白了,我不知道碰撞对于MD5来说是如此糟糕。无论如何,SHA1被认为是安全的,这意味着生成碰撞是如此困难,以至于没有人可以在合理的时间内尝试它。 - sharptooth

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的评论)

来自IAIK网站的信息 -

请注意,对于发生碰撞的SHA-1消息对(对于所有遵循类似设计原则的其他哈希函数),始终可以将后缀附加到两个消息,只要它们相同即可。

我认为目前还没有人找到两个SHA1哈希碰撞的字符串,所以这主要是一场学术讨论。但据我所知,发现碰撞时,可以利用这个属性创建几个其他的碰撞。


0

在我看來,你的例子是不正確的。 讓我告訴你為什麼:

md5(a) == md5(b)

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

a = b

当您现在使用字符串z连接这两个字符串时,您将会得到a.z = b.z,并且它们的md5哈希值将相同,因为它们具有相同的字符串输入。
md5(a.z) == md5(b.z)

当两个字符串输入相同时,md5哈希值将第三次相等

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

对于MD5和其他哈希算法来说,它们必须是确定性的和无副作用的。


所以你的例子只有在z是一个特殊字符串时才有意义,这将导致碰撞。因此,md5和sha1的行为将完全相同: 附加的碰撞字符串将导致碰撞,但前置的哈希将是不同的(但是你几乎不可能找到一个前后都会导致碰撞的碰撞字符串,但现实中还没有找到任何例子) 你之所以没有找到两个具有相同sha1的不同字符串,是因为如前面的人所解释的那样,碰撞更难找到。


a!=b,请查看问题的编辑部分。z可以是任何东西。我认为有一个规则,即a mod 128必须为0 - Vili

0

Sha1并不像md5那样容易被破解,但是在05年左右,人们发现了一些它的漏洞。


a paper, written with John Kelsey, that describes an algorithm to find second preimages with SHA-1 ­-- a technique that generalizes to almost all other hash functions -- in 2^106 calculations: much less than the 2^160 calculations for brute force. - Aaron Butacov
我的问题不是关于破解sha1,而是关于这个问题:如果sha1(c) == sha1(d),那么sha1(c.z)和sha1(d.z)是否相等? - Vili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接