各种哈希算法的特点?

时间:2011-09-09 10:20:38

标签: performance algorithm security hash

MD5,MD6 ?,所有SHA-somethings,CRC-somethings。我以前用过它们,看过它们用在各个地方,但我不知道为什么你会用它们而不是另一个。

在很高的层面上,所有这些3/4字母首字母缩略词之间的差异在性能,碰撞概率和一般难以破解方面有何不同?这些中的任何一个取决于我正在散列的数据类型或数量吗?

当我选择一个而不是另一个时,我做出了什么样的权衡?我已经读过CRC不适合用于安全性,但是对于一般的哈希表冲突避免呢?

3 个答案:

答案 0 :(得分:5)

CRC-主要用于(应该是唯一的)用于防止意外数据更改的内容。它们在检测噪声方面做得相当不错,但不是用于加密目的 - 找到第二个原像(产生相同散列的第二个输入)(通过加密标准)是微不足道的。 [编辑:如@Jon所述,与此处提到的其他哈希不同,CRC不是,也绝不是用于加密使用。]

MD-5。最初用于加密使用,但相当陈旧,现在认为相当弱。虽然没有已知的第二原像攻击,但已知碰撞攻击(即,产生两个产生相同结果的选定输入的方式,但不产生第二输入以产生与指定结果相同的结果)。关于唯一一次使用它是一个更精细的CRC版本。

SHA-X

曾几何时,只有“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)

以下是非常简短的摘要:

  1. MD4,MD5,SHA-1和SHA-2都属于一类通用安全散列算法。它们通常是可互换的,因为它们都是从明文产生哈希码,因此它被设计为在计算上不可行来确定生成哈希('preimage')的明文,或者找到两个散列到同一个东西的文本。 ('碰撞')。所有这些都被打破到不同程度,或者至少被认为是脆弱的。
  2. MD6NIST's SHA-3 competition的候选人,但已被撤回。它具有与上述散列函数相同的一般特性,但与许多SHA-3候选者一样,增加了额外的功能 - 在这种情况下是一种merkle-tree类似的结构,用于改善散列的并行化。不言而喻,它与其余的SHA-3候选人一样,尚未经过充分测试。
  3. CRC实际上根本不是哈希算法。它的名字代表Cyclic Redundancy Check,它是校验和而不是哈希。不同的CRC被设计为抵抗不同级别的传输错误,但是它们都共同保证它们将检测到一定数量的比特错误,这是哈希算法不共享的。它们的散布不如哈希算法,所以不应该用作一个。
  4. 有一系列通用哈希算法适用于哈希表等,例如FNV。这些往往比加密哈希要快得多,但并不是为了抵御对手的攻击。与安全哈希不同,它们中的一些显示出相当差的分布特征,并且仅适用于散列某些类型的数据。

答案 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>