首页/安全/加密与证书速查/SHA-3(Keccak)海绵结构哈希
加密算法基础95 条

SHA-3(Keccak)海绵结构哈希

FIPS 202 定义的哈希家族:SHA3-224/256/384/512 采用海绵结构,与 SHA-2 的迭代结构不同,天然不受长度扩展攻击影响。

加密与证书速查安全更新于 2026-10-13

SHA-3 是什么

SHA-3 是 NIST 通过 FIPS 202(2015 年)发布的哈希标准,算法核心是 Keccak 的海绵结构。与 SHA-2 的 Merkle-Damgard 迭代不同,海绵结构先吸收整条消息再挤压出输出,内部状态不直接暴露,因此天然不受长度扩展攻击影响。它与 SHA-2 是并列标准而不是替代品:SHA-2 并未被攻破,SHA-3 的价值主要在于提供结构完全不同的备份方案,以及 SHAKE 这类可变长输出能力。

基本信息

标准FIPS 202(2015 年发布)
家族SHA3-224/256/384/512、SHAKE128/SHAKE256
结构海绵结构(吸收阶段 + 挤压阶段)
容量与速率容量决定安全强度,速率影响性能
与 SHA-2 关系并列标准,生态支持度略低
扩展输出SHAKE 支持任意长度输出,可当 XOF 使用

典型使用场景

  • 需要与 SHA-2 结构解耦的备份方案:算法多样性或合规明确要求时
  • 用 SHAKE 做可变长输出:密钥派生、随机数扩展、需要任意长度摘要的场合
  • 区块链与智能合约环境:Keccak-256 变体被广泛使用,注意与 SHA3-256 区分
  • 文件完整性交叉核验:与 SHA-256 并行计算,避免单一算法实现缺陷带来盲区

计算 SHA-3

计算 SHA-3
# 命令行:默认十六进制输出,注意算法名里带连字符
printf abc | openssl dgst -sha3-256
sha3sum -a 512 file.bin    # 部分发行版需单独安装该工具
# Python
import hashlib
hashlib.sha3_512(b'abc').hexdigest()
hashlib.shake_128(b'abc').hexdigest(32)   # SHAKE 可变长输出,必须指定字节数

家族对照

算法输出长度抗碰撞强度说明
SHA3-256256 位约 128 位与 SHA-256 强度相当
SHA3-512512 位约 256 位高安全等级场景
SHAKE128可变取决于输出长度可作 XOF 或派生函数
Keccak-256256 位同量级以太坊使用,域填充与 SHA3-256 不同
SHA-3 的抗碰撞强度约为输出长度的一半:选 SHA3-256 得到的抗碰撞强度与 SHA-256 相当,需要更高强度时升到 SHA3-512 而不是去改参数。
跨系统对接先用已知向量对齐:SHA3-256 与 Keccak-256 的填充规则不同,同一输入输出完全不同。用空串与 abc 这类公开向量在双方各跑一次,能快速确认用的是哪一种。
不要期待 SHA-3 更快:软件实现通常与 SHA-2 相近甚至略慢,而带 SHA 扩展指令的 CPU 会让 SHA-2 明显占优。SHA-3 的收益在结构安全性与 XOF 能力,不在速度。

易错点

  • SHA3-256 与 Keccak-256(以太坊使用)不是同一算法,测试向量不通用
  • 把 SHA-3 当作性能更好的 SHA-2 是误解:软件实现速度通常相近或略慢
  • 用 SHAKE 派生密钥时不固定输出长度与上下文标识,会让不同用途共用同一密钥流
  • 哈希只能校验完整性不能替代签名:校验文件要同时给出哈希与来源可信的签名

数据来源与参考

  • FIPS 202(SHA-3 标准)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌