简体中文

开发者工具 · SHA 哈希计算器

从 SHA-0 到 SHA-3:NIST 安全哈希标准如何演变

· 背景

sha-256 密码学 浏览器 API

从 SHA-0 到 SHA-1、SHA-2 系列和 SHA-3 的时间线显示了二十年的演变
原始 ToolAcre 矢量图

SHA-1、SHA-2 和 SHA-3 是具有不同起源的三代。这篇文章追溯了从被撤回的 SHA-0 到 Keccak 竞争的安全哈希标准,并解释了为什么 SHA-2 仍然占据主导地位。

这些数字是什么意思? — 为什么 SHA-256 是 SHA-2 但 SHA-3 完全是另一回事

开发人员看到 SHA-1、SHA-256 和 SHA-3 并假设它们是线性进展。他们不是。这些数字在不同的上下文中意味着不同的东西,了解家族历史可以解释为什么 SHA-256 是新应用程序的明智选择,为什么 SHA-1 尽管被广泛部署但仅保留旧版,以及为什么 SHA-3 是单独的设计而不是演进。

当 NIST 首次发布安全哈希函数时,他们将其称为 SHA,后来称为 SHA-0,这个版本生命周期非常短暂,以至于大多数开发人员从未听说过它。由于从未公开披露的未指明的缺陷,SHA-0 在几年内被撤回。这次撤回悄然发生,随之而来的算法引发了命名混乱。 SHA-0 被撤销后,NIST 发布了 SHA-1,成为标准长达二十年。

该工具涵盖 SHA-1 和 SHA-2;详细的 SHA-0 历史记录位于存储库证据之外

SHA-1 是一个 160 位哈希函数,可生成 40 字符十六进制输出。它基于 Merkle-Damgård 结构,其中压缩函数逐块处理输入,将状态向前链接。该设计在发布时是健全的,多年来没有发生实际的攻击。然而,2005 年带来了密码分析的突破。由Xiaoyun Wang领导的团队发布了对SHA-1的碰撞攻击,表明使用比暴力方法更有效的技术找到具有相同散列的两个不同消息是可行的。

几年后,在 2017 中,一个名为 SHAttered 的团队演示了第一次实际碰撞,使用 GPU 集群查找两个具有相同 SHA-1 哈希值的不同 PDF 文件。在 2020 中,后续论文表明选择前缀冲突(更危险的变体)是可以承受的。 SHA-1 不再只是弱;它坏了。对 SHA-1 中断的响应是引入 SHA-2,这是一个由四个函数组成的系列:SHA-224、SHA-256、SHA-384 和 SHA-512。

SHA-2 — 2000 年代初期的系列(224、256、384、512 以及后来截断的 512/224 和512/256) 建立在相同的结构上

这四个在不同的状态大小和不同的块大小上运行,但它们使用与 SHA-1 相同的基本结构。 SHA-2 系列在 2001 上发布,比 SHA-1 重大突破早几年,但直到 SHA-1 崩溃变得具体之后才被广泛采用。 SHA-256 生成 256 位哈希值,现在是新应用程序的标准选择。 SHA-512 生成 512 位散列,并且在 64 位处理器上通常更快,因为它在 64 位字而不是 32 位字上运行。

SHA-2 的命名约定是混乱的根源。这些函数称为 SHA-256、SHA-384 和 SHA-512,它们都是 SHA-2 系列的一部分。当有人说 SHA-2 时,他们指的是设计理念和 Merkle-Damgård 结构,而不是单一算法。名称中的数字是以位为单位的输出宽度,而不是版本方案。 SHA-256 不是 SHA-1 的更新;它是一种现代设计,使用相同的框架,但具有更好的安全特性。

存储库文档演示了 SHA-1 碰撞,而无需重建无源理论历史

在 SHA-1 和 SHA-2 使用的 Merkle–Damgård 结构内部,压缩函数逐块处理输入。状态从一个块转移到下一个块,最终状态作为摘要输出。 SHA-256 压缩函数使用 32 位操作和 256 位状态,因此它处理 512 位块。 SHA-512 压缩函数使用 64 位操作和 512 位状态,因此它处理 1024 位块。这些选择会影响性能和带宽 - SHA-512 通常更快,因为 64 位算术是现代硬件上本机的。

新系统的 SHA-256 和 SHA-512 之间的决定通常基于性能测试和空间限制而不是安全性,因为截至 2020 年代初期,两者仍然是安全的。 ToolAcre SHA 哈希计算器提供 SHA-256、SHA-384 和 SHA-512,当读者并排比较摘要时,他们会看到 SHA-256(64 十六进制字符)和 SHA-512(128 十六进制字符)之间的四个字符差异。

SHA-3 不在支持的 API 范围内;存储库证据未断言竞争历史

替换 SHA-1 的动机在 2000 年代初期就很明确,因此 NIST 开始了 SHA-3 选择过程。 NIST 没有单独设计替代方案,而是向密码学研究界开放了竞争。目标是选择一个与 Merkle-Damgård 结构根本不同的哈希函数,以从多样化的设计中获得信心。多个团队提交了提案,多年来,比赛最终选择 Keccak 为获胜者。 Keccak 是一种海绵结构,是一种构建哈希函数的不同方式,以前在标准中从未使用过。

SHA-3 是 Keccak 的 NIST 标准化,在 2015 中最终确定。与算法系列 SHA-2 不同,SHA-3 通常被称为单个算法,尽管它也有多个宽度。 SHA-3 尚未广泛部署,考虑到它已成为标准近十年,这一点令人震惊。原因是 SHA-2 没有被破坏。没有紧迫的安全理由从 SHA-2 升级到 SHA-3。浏览器的 Web Crypto API 实现 SHA-1 和 SHA-2 但不实现 SHA-3,这就是 ToolAcre SHA 哈希计算器不提供 SHA-3 的原因。

SHA-2 保留工具默认值;本文避免了不受支持的通用安全声明

为什么 SHA-2 仍然无处不在,这是哈希算法选择的核心问题。 SHA-2 没有已知的实际冲突。硬件实现已经成熟。每个编程语言和平台都支持它。更改系统的哈希算法具有破坏性:必须迁移或保留每个存储的哈希以进行验证,必须更新每个集成点,并且必须执行测试以确保新算法适用于每个下游系统。

对于 SHA-2 仍然安全的系统,这种中断是不合理的。对于新系统和新协议,SHA-2 是合理的默认值。 ToolAcre SHA 哈希计算器将 SHA-256 和 SHA-512 显示在显着位置,因为它们是新应用程序应该使用的内容。 SHA-1 被列为仅旧版。显示 SHA-384 是为了完整性和特别需要的用例。

这没有涵盖的内容 — Keccak 的内部结构,值得单独发表一篇文章

哈希标准的未来目前尚不清楚。 SHA-3 是安全且成熟的,如果 SHA-2 被破坏,它可以提供替代方案。量子计算对当前所有哈希函数构成长期威胁,但抗量子哈希函数设计是一个开放的研究领域。 NIST 正在进行后量子密码学竞赛,选择旨在抵抗量子攻击的算法,但与公钥系统相比,哈希函数并不是该竞赛的优先事项。

对于 2020 年代的实际应用,SHA-256 是“我应该使用哪个哈希?”这个问题的答案。对于完整性验证、内容寻址和指纹识别,SHA-256 是标准。对于需要更广泛摘要的系统,SHA-512 在 64 位硬件上通常更快。 SHA-384 在 TLS 密码套件规范中最常见。 SHA-1 仅用于遗留验证。 ToolAcre SHA 哈希计算器提供所有四种 Web 加密算法,以便开发人员可以查看其输出。

要点:三代同姓 — ToolAcre SHA 哈希计算器涵盖浏览器提供的 SHA-1 和 SHA-2 算法

了解 SHA 的历史可以阐明为什么这些数字和名称意味着它们的用途,以及为什么 20 世纪 90 年代和 2000 年代所做的选择仍然决定着今天新应用程序的用途。 SHA-0 被悄悄撤回,SHA-1 被实际攻击破坏,SHA-2 仍然安全,而 SHA-3 是为未来的鲁棒性而选择的替代设计。新代码应使用 SHA-256 进行通用哈希。旧系统仍然使用 SHA-1,并且与这些系统的互操作性需要能够计算 SHA-1 哈希值。

ToolAcre SHA 哈希计算器体现了这一观点:它提供 SHA-256 作为默认值,SHA-512 作为更广泛的选项,SHA-384 满足特定要求,以及 SHA-1 标记为旧版。这为开发人员提供了准确的工具和准确的标签。浏览器的 Web Crypto 实现提供了这些算法,而 ToolAcre 直接使用该实现而不是传送自定义代码。这一选择反映了数十年的密码学演变和当前的实践状态。