MD5,MD6 ?,所有SHA-somethings,CRC-somethings。我以前用过它们,看过它们用在各个地方,但我不知道为什么你会用它们而不是另一个。
在很高的层面上,所有这些3/4字母首字母缩略词之间的差异在性能,碰撞概率和一般难以破解方面有何不同?这些中的任何一个取决于我正在散列的数据类型或数量吗?
当我选择一个而不是另一个时,我做出了什么样的权衡?我已经读过CRC不适合用于安全性,但是对于一般的哈希表冲突避免呢?
答案 0 :(得分:5)
CRC-主要用于(应该是唯一的)用于防止意外数据更改的内容。它们在检测噪声方面做得相当不错,但不是用于加密目的 - 找到第二个原像(产生相同散列的第二个输入)(通过加密标准)是微不足道的。 [编辑:如@Jon所述,与此处提到的其他哈希不同,CRC不是,也绝不是用于加密使用。]
MD-5。最初用于加密使用,但相当陈旧,现在认为相当弱。虽然没有已知的第二原像攻击,但已知碰撞攻击(即,产生两个产生相同结果的选定输入的方式,但不产生第二输入以产生与指定结果相同的结果)。关于唯一一次使用它是一个更精细的CRC版本。
曾几何时,只有“SHA”。在其历史的早期,发现了一个缺陷,并且对产生SHA-1进行了轻微修改。 SHA的使用时间很短,很少有实际意义。
SHA-1通常更多比MD-5更安全,但仍处于相同的一般范围内 - 碰撞攻击已知,尽管它是很多 1 比MD-5贵。没有第二次原始图像攻击是已知的,但是碰撞攻击足以说“远离”。
SHA-256,SHA-384,SHA-512:这些是基于SHA-1的,但在内部有点复杂。至少据我所知,目前在这些方面都没有发现第二次原像攻击或碰撞攻击。
SHA-3:美国国家标准与技术研究院(NIST)目前正在使用competition来标准化当前SHA-2系列哈希算法的替代品,该算法显然将被称为SHA-3。在我写这篇文章时(2011年9月),比赛目前已进入第三轮,有五名候选人(Blake,Grøstl,JH,Kaccek和Skein 2 )离职。第3轮计划于2012年1月结束,届时公众对算法的评论将不再(至少正式)被接受。 2012年3月,将举行(第三届)SHA-3会议(华盛顿特区)。在2012年晚些时候某个未指明日期,将公布最终选择。
1 对于任何关心攻击SHA-1比MD-5贵多少的人,我会尝试给出一些具体数字。对于MD-5,我5岁左右的机器可以在大约40-45分钟内发生碰撞。对于SHA-1,我只有一个估计值,但我的估计是一个以每周一次产生冲突的集群将花费超过一百万美元(可能接近1000万美元) )。即使使用现有的机器,操作机器足够长的时间来发现碰撞的成本也很高。
2 由于几乎不可避免地会有人至少想知道,我会指出Bruce Schneier所做的工作是Skein。
答案 1 :(得分:1)
以下是非常简短的摘要:
答案 2 :(得分:1)
要完成其他答案:哈希函数的性能各不相同。散列函数建立在基本操作之上,这些操作或多或少都有效,具体取决于体系结构。例如,SHA-3候选Skein在64位整数上使用加法,并且在提供64位操作的平台上非常快,但在仅32位系统(包括所有ARM处理器)上,Skein要慢得多。 / p>
SHA-256通常被称为“慢”,但仍然会在基本PC(2.4 GHz Core2)上以大约每秒150兆字节的速率散列数据,这对于大多数应用来说已经足够了。哈希函数性能在PC上非常重要。嵌入式系统(从智能卡到智能手机)的情况可能会有所不同,在这些系统中,您可以获得比CPU可处理的数据更多的数据。 MD5通常比SHA-256快3到6倍。 SHA-256仍然是推荐的默认选择,因为它的安全性仍然完好无损;只有在你得到一个真实的,适当规定的和衡量的性能问题时才考虑使用别的东西。
在小型32位架构(MIPS,ARM ......)上,所有剩余的SHA-3候选者慢于而不是SHA-256,因此获得更快且更安全的东西可能具有挑战性。 / p>