【问题标题】:characteristics of various hash algorithms?各种哈希算法的特点?
【发布时间】:2011-11-13 16:24:49
【问题描述】:

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

在非常高的层次上,所有这些 3/4 字母缩写词在性能、碰撞概率和一般难以破解方面有什么区别?这些是否取决于我正在散列的数据类型或数量?

当我选择一个而不是另一个时,我做了哪些权衡?我读到 CRC 不适合用于安全性,但是对于一般的哈希表冲突避免呢?

【问题讨论】:

  • 你读过关于这些的维基百科文章吗?你用谷歌搜索过吗?
  • 请参阅stackoverflow.com/questions/996843/… 进行一些讨论。
  • @Corbin:我用谷歌搜索过它并在维基上搜索过。大量详细的技术信息,仍然没有对它们相对于彼此的位置有任何高层次的了解。 aix:谢谢,我去看看。

标签: performance algorithm security hash


【解决方案1】:

要完成其他答案:哈希函数的性能各不相同。散列函数建立在基本操作之上,这些操作或多或少是有效的,具体取决于架构。例如,SHA-3 候选 Skein 在 64 位整数上使用加法,并且在提供 64 位操作的平台上非常快,但在仅 32 位系统(包括所有 ARM 处理器)上,Skein 慢得多。

SHA-256 通常被称为“慢”,但在基本 PC(2.4 GHz Core2)上仍会以每秒约 150 兆字节的速度散列数据,这对于大多数应用程序来说已经绰绰有余了。很少有散列函数性能在 PC 上非常重要。在嵌入式系统(从智能卡到智能手机)上情况可能会有所不同,在这些系统中,您可以获得比 CPU 可以处理的更多的数据来处理。 MD5 通常比 SHA-256 快 3 到 6 倍。 SHA-256 仍然是推荐的默认选择,因为它的安全性仍然完好;仅当您遇到真实的、经过适当说明和衡量的性能问题时,才考虑使用其他东西。

在小型 32 位架构(MIPS、ARM...)上,所有剩余的 SHA-3 候选者都比 SHA-256 慢,因此获得更快且安全的东西可能具有挑战性。

【讨论】:

    【解决方案2】:

    CRC-whatever 主要(应该专门)用于防止数据发生意外更改。它们在检测噪声等方面做得很好,但不用于加密目的 - 找到第二个原像(产生相同哈希的第二个输入)(根据加密标准)是微不足道的。 [编辑:正如@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 和 Skein2)参加比赛。第 3 轮计划于 2012 年 1 月结束,届时算法上的公共 cmets 将不再(至少正式)被接受。 2012 年 3 月,将举行(第三次)SHA-3 会议(在华盛顿特区)。最终选择将在 2012 年晚些时候的某个未指定日期公布。


    1 对于那些关心攻击 SHA-1 比 MD-5 更昂贵的人,我将尝试给出一些具体的数字。对于 MD-5,我大约 5 岁的机器可以在大约 40-45 分钟内产生碰撞。对于 SHA-1,我只有一个估计值,但我的估计是,以每周 一周 一次的速度产生碰撞的集群将花费超过 100 万美元(可能接近 1000 万美元) )。即使给定一台现有机器,运行机器足够长的时间以发现碰撞的成本也是巨大的。

    2 由于几乎不可避免地有人至少会想知道,所以我要指出 Bruce Schneier 的作品是 Skein。

    【讨论】:

    • 对SHA-3 候选人的引用可以很好地完成这一点。此外,也许应该将 CRC 明确标记为该列表中唯一的非加密哈希函数。
    【解决方案3】:

    这是非常简短的摘要:

    1. MD4、MD5、SHA-1 和 SHA-2 都属于通用安全散列算法类别。它们通常是可互换的,因为它们都从纯文本生成哈希码,因此它被设计为在计算上无法确定生成哈希(“原像”)的纯文本,或者找到两个哈希到同一事物的文本(“碰撞”)。它们都在不同程度上被破坏,或者至少被认为是脆弱的。
    2. MD6 是 NIST's SHA-3 competition 的候选者,但被撤回。它与上述散列函数具有相同的一般特征,但与许多 SHA-3 候选函数一样,添加了额外的特性——在这种情况下,类似于merkle-tree 的结构用于改进散列的并行化。毋庸置疑,它以及其余的 SHA-3 候选者尚未经过良好测试。
    3. CRC 实际上根本不是哈希算法。它的名字代表Cyclic Redundancy Check,它是一个校验和而不是一个散列。不同的 CRC 旨在抵抗不同级别的传输错误,但它们都有一个共同的保证,即它们将检测到一定数量的比特错误,而哈希算法不共享这一点。它们的分布不如散列算法好,因此不应作为一个算法使用。
    4. 有一系列通用哈希算法适用于哈希表等,例如FNV。这些往往比加密哈希快得多,但并非旨在抵抗对手的攻击。与安全散列不同,它们中的一些表现出很差的分布特征,并且仅适用于对某些类型的数据进行散列。

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 2020-03-26
      相关资源
      最近更新 更多