Skip to content

SHA-3(Secure Hash Algorithm 3)

SHA-3(Secure Hash Algorithm 3)是由美国国家标准与技术研究院(NIST)发布的密码学哈希函数族,基于 Keccak 算法。它与 SHA-1、SHA-2 的结构不同,作为 SHA-2 的补充选择,而不是因为 SHA-2 已失效才替代 SHA-2。

  1. 独特的结构

    • SHA-3 基于一种称为“海绵构造”(Sponge Construction)的结构,与 SHA-1 和 SHA-2 的 Merkle-Damgård 结构不同。
    • 该结构按 FIPS 202 定义了不同输出长度对应的安全强度。
  2. 灵活性和多样性

    • SHA-3 提供了多种输出长度的哈希函数:
      • SHA3-224:生成 224 位(28 字节)的哈希值。
      • SHA3-256:生成 256 位(32 字节)的哈希值。
      • SHA3-384:生成 384 位(48 字节)的哈希值。
      • SHA3-512:生成 512 位(64 字节)的哈希值。
  3. 可定制性

    • SHA-3 还包括两个扩展函数:SHAKE128SHAKE256,它们允许可变长度的输出,是所谓的“可扩展输出函数”(XOF)。
  4. 设计初衷

    • SHA-3 是为了应对 SHA-2 可能面临的潜在攻击威胁而设计的,尽管目前 SHA-2 仍然被认为是安全的。
    • SHA-3 并不是要替代 SHA-2,而是为增强安全性和抵御未来可能的攻击提供了一个额外的选择。
  5. 应用场景

    • SHA-3 可以应用于数字签名、密钥生成、随机数生成等需要高安全性哈希的场景。
    • SHA-3 可用于数字签名、密钥派生、随机数生成等需要标准化哈希或 XOF 的场景;是否满足后量子安全需求取决于完整协议和参数,不能只由哈希函数名称决定。

SHA-3 采用了 Keccak 算法的海绵构造,它的工作原理包括以下几个步骤:

  1. 吸收阶段

    • 输入数据被分成若干个比特块,这些比特块依次被吸收到一个固定大小的状态空间中。
  2. 转换阶段

    • 每个输入块与状态空间进行复杂的混合操作,这些操作包括置换、非线性变换和 XOR 操作等。
  3. 挤出阶段

    • 一旦所有输入数据被吸收,状态空间会通过类似的操作输出固定大小的哈希值或可变大小的输出。
  • 抗碰撞性:SHA-3 的结构在抗碰撞攻击方面表现出色,迄今为止没有已知的有效攻击。
  • 抗预映像性:SHA-3 设计为能抵抗已知的预映像攻击,确保哈希值无法被逆向计算出原始输入。
  • 抗长度扩展攻击:由于海绵结构的特点,SHA-3 天生抗长度扩展攻击,这在某些应用中尤为重要。
  • NIST 哈希函数竞赛:SHA-3 的开发始于 2007 年的 NIST 哈希函数竞赛,Keccak 算法最终在 2012 年被选为新的标准。
  • 与 SHA-2 的关系:SHA-3 并没有直接取代 SHA-2,而是提供了一个具有不同架构的替代方案,以防止可能的未来攻击。
  1. NIST FIPS 202: SHA-3 Standard(访问日期:2026-05-31)