通过生日攻击,可以在MD5中以264复杂度和在SHA1中以280复杂度发生冲突
众所周知,有一些算法可以破解这两种
我的问题是:仅因为容易产生碰撞的原因,MD5才被认为是不安全的吗?因为同时看待两者,在SHA1中产生冲突也不是那么困难。那么什么使SHA1更好呢?
更新02/2017-https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
#1 楼
产生SHA-1冲突并不是那么容易。在SHA-1上描述的攻击确实可以平均261的成本运行,这比通用的生日攻击(280倍)要快得多,但仍然相当困难(可行,但代价昂贵)。这么说,我们真的不知道是什么使哈希函数具有抵抗力(例如,请参见此答案以进行详细讨论)。通过大量的挥舞,我可以断言SHA-1比MD5更加健壮,因为它具有更多的回合,并且因为SHA-1中80个消息词的派生比MD5的“混合”得多(在尤其是1位旋转,顺便说一下,这是SHA-0和SHA-1之间的唯一区别,并且产生了SHA-0冲突。)同样,再看一下SHA-256,它的“质量”要高得多(比SHA-1多得多的操作,但结构相似),并且目前还没有中断。对于给定的结构来说,确保哈希函数的安全性似乎需要最少的操作(但是我以惊人的速度移动了手,所以不要相信我说的是真的或科学的东西)。
评论
今天是第一次碰撞:)security.googleblog.com/2017/02/…
– Reza S
17-2-24在2:05
#2 楼
不。不仅仅是输出的长度。它们在针对密码分析攻击的安全性水平上存在显着差异。MD5上存在毁灭性的碰撞攻击。 (有关MD5的Wikipedia文章提供了一些详细信息。)这些攻击意味着MD5基本上没有提供针对碰撞的安全性:很容易在MD5中找到碰撞。
相比之下,SHA1似乎更安全。 。尽管有一些已知的针对SHA1的攻击,但它们的严重性却不如对MD5的攻击。 (有关SHA1的Wikipedia文章进行了概述。)因此,在许多设置中,SHA1比MD5更好。
如今,您甚至不用MD5或SHA1了,甚至最好使用更现代的哈希函数之一,例如SHA256。那些攻击没有任何实际意义。
但是肯定不要在需要防碰撞的任何环境中使用MD5,因为MD5的这一方面已被完全破坏。
评论
@asudhak:缺陷不在MD5的实现中,而是在其规范中。 MD5的抗性取决于其结构,结果证明MD5的抗性不如最初所认为的那样。
–汤姆韭菜
2012年9月3日23:59
@asudhak顺便说一句,我不知道您在哪个上下文中询问此问题,但是请勿使用MD5或SHA256之类的哈希作为密码。了解如何安全地对密码进行哈希处理?以及如何储存盐?有关更多详细说明。
–多项式
2012年9月4日上午8:28
哦,不,不是开发人员...我更是一名顾问,我想要一个具体的原因来说明为什么SHA1> MD5而不是盲目地接受这一事实...
–sudhacker
2012年9月4日21:33
@ JMCF125,几乎该短语会让您思考。粗略地说,没有已知的攻击。更准确地说,可能存在理论上的“攻击”,但它们没有实际意义(它们不会危害任何实际应用)。
– D.W.
13年12月16日在17:01
报告SHA-1碰撞。 security.googleblog.com/2017/02/…
–妖怪
17年4月19日在8:31
#3 楼
哈希函数提供的安全级别基于生成纯文本的困难,该文本将产生给定的哈希签名(哈希的输出)。哈希是一种简化一组数据以指示用户拥有原始数据而没有实际揭示数据的快速方法。这对于验证某人是否是他们所说的人(通过将您知道的某人的哈希值与存储的值进行比较)以及验证消息未更改都非常有用。由于哈希是多对一的(许多值将产生相同的哈希值),因此从哈希到原始值的理论上很难实现。由于可能的哈希值数量很多,因此应该很难获得用于产生给定输出的哈希值。但是,不幸的是,这并不总是正确的。某些值对应于人类可读输入的期望允许针对哈希的字典攻击(称为彩虹表)试图发现原始值。盐析(将非人类可读的输入添加到输入的开头或结尾)是一种尝试,因为必须针对每种不同的盐制作彩虹表,以防止它们工作。另一个问题以及与您的问题相关的一个问题是哈希冲突。每当两个给定的输入产生相同的哈希输出时,就会发生哈希冲突。为了验证数据没有被更改,必须不容易为与原始哈希值匹配的已更改数据集生成哈希值。不幸的是,MD5在这方面受到了很大的损害,因为有多种方法可以相对容易地找到可以放置在有效负载的末尾或开头的更改,以使其看起来有效。 SHA-1在这方面也有一些较小的妥协,最近已经发现,但是它们没有MD5问题严重。使用SHA256之类的东西更加安全,因为它目前尚无针对哈希冲突的已知攻击。
#4 楼
这是MD5和SHA1之间的比较。您可以清楚地知道哪个更好。评论
该表将忽略任何加密技术(除了最后一行(已过时))。
–PaŭloEbermann
17年2月23日在19:48
似乎是交叉发布的,例如stackoverflow.com/questions/2948156/…
–auspicious99
20-10-9在9:11
评论
我的印象是,只要输入2 ^ 80种可能的输入,就可以确定碰撞。同样,[link] eprint.iacr.org/2008/469.pdf是对SHA1的理论攻击。如果有错请指正。有理论上的攻击。但是还没有人设法实现实际的碰撞。我仍然肯定不会信任SHA-1的抗碰撞性,因为它很可能是针对一种流行的加密原语的下一次实际攻击。但这还没有发生(至少公开)。
@CodesInChaos工作了5年:security.googleblog.com/2017/02/…