了解sha-1碰撞的弱点

时间:2009-07-18 15:34:57

标签: hash cryptography sha1

根据各种消息来源,寻找sha-1碰撞的攻击已经改进为2 ^ 52次操作:

http://www.secureworks.com/research/blog/index.php/2009/6/3/sha-1-collision-attacks-now-252/

我想知道的是这些发现对未受攻击的系统的影响。这意味着如果我对随机数据进行散列,那么碰撞的统计几率是多少?换句话说,最近的研究是否表明蛮力生日攻击有更大的机会发现最初提出的碰撞?

有些文章,如上所述,说通过蛮力获得SHA-1碰撞需要2 ^ 80次操作。大多数消息来源说2 ^ 80是一个理论数字(我假设因为即使在其摘要空间上也没有完美地分配散列函数)。

基本散列分布中是否有任何已公布的sha1冲突弱点?或者只是导致数学攻击导致碰撞几率增加?

我意识到最终它只是一场赔率游戏,并且它们是一个无限小的变化,你的第一个和第二个消息将导致碰撞。我也意识到即使是2 ^ 52也是一个非常大的数字,但我仍然想了解对不受攻击的系统的影响。所以请不要回答“不要担心”。

3 个答案:

答案 0 :(得分:6)

良好的哈希函数可抵抗3种不同类型的攻击(如文章所述)。

实际意义上最重要的阻力是第二前映像电阻。这基本上意味着给定消息M1和Hash(M1)= H1,很难找到M2使得Hash(M2)= H1。

如果有人找到了有效地做到这一点的方法,那就太糟糕了。此外,preimage攻击不容易受到生日悖论的影响,因为消息M1对我们来说是固定的。

这不是前映像或第二次前映像攻击,仅仅是碰撞发现攻击。 要回答你的问题,没有蛮力攻击没有更高的机会发现碰撞。这意味着天真蛮力方法与研究人员方法相结合,导致在2 ^ 52之后发现碰撞。标准的暴力攻击仍需要2 ^ 80。

答案 1 :(得分:5)

你的链接中公布的结果是攻击,这是一系列仔细的,算法选择的步骤,它们产生的冲突比随机攻击的概率更大。它不是哈希函数分布的弱点。嗯,好吧,它是,但不是那种使得随机攻击可能在2 ^ 52的顺序上成功的。

如果没有人试图在您的哈希输出中生成冲突,则此结果不会影响您。

答案 2 :(得分:5)

关键问题是“攻击者能否同时修改m1和m2消息”?如果是这样,攻击者需要找到m1,m2,使得hash(m1)= hash(m2)。这是生日攻击,复杂性显着降低---变成平方根。如果散列输出是128位(MD5),则复杂度为2 ^ 64,并且具有当前计算能力。

通常的例子是卖方要求他的秘书输入信息“我将以1000万美元的价格卖掉它”。诡计多端的秘书创建了2个文件,其中一个说“我将以1000万美元的价格出售”,另一个文件说“我将以x百万美元出售它”,其中x远小于10,通过添加空格来修改这两个消息,大写单词等,修改x,直到hash(m1)= hash(m2)。现在,秘书向卖家显示正确的消息m1,并使用他的私钥对其进行签名,从而产生散列h。秘书切换消息并发出(m2,h)。只有卖家可以访问他的私钥,因此他不能否认并说他没有签署该消息。

对于输出160位的SHA1,生日攻击将复杂性降低到2 ^ 80。这应该是安全的30年或更长时间。新的政府法规,4G 3gpp规格开始要求SHA256。

但是如果在你的用例中,攻击者无法修改这两个消息(preimage或第二个preimage场景),那么对于SHA1,复杂度是2 ^ 160。除非发现非强力攻击,否则应该是永恒的安全。