SHA-3(Secure Hash Algorithm 3)是美国国家标准与技术研究院(NIST)于 2015 年发布的新一代密码哈希算法标准,其核心基于比利时密码学家团队设计的Keccak 算法。SHA-3 的诞生旨在应对 SHA-1 和 SHA-2 系列算法可能面临的未来安全威胁(如量子计算攻击),并引入了全新的海绵结构(Sponge Construction),显著提升了安全性和灵活性。
1 算法基本特性
|--------|--------------------------------------------------------------|
| 参数 | 说明 |
| 输出长度 | 支持 224、256、384、512 位(对应 SHA3-224/SHA3-256/SHA3-384/SHA3-512) |
| 状态大小 | 固定为 1600 位(5×5 的 64 位矩阵) |
| 比特率(r) | 不同输出长度对应不同的消息块大小:1152、1088、832、576 位 |
| 容量(c) | 安全冗余位:448、512、768、1024 位(c = 1600 - r) |
| 置换轮数 | 24 轮(每轮包含 5 个核心操作) |
| 抗攻击特性 | 对长度扩展攻击免疫,理论抗碰撞强度为 2²⁵⁶次运算(SHA3-512) |
| 并行能力 | 高度并行,适合硬件加速 |
2 核心设计原理:海绵结构
SHA-3 采用海绵结构替代传统的 Merkle-Damgård 结构,其核心思想是通过 "吸收→置换→挤压" 流程处理任意长度的输入:
2. 1 吸收阶段(Absorbing)
- 将输入消息分块(每块长度为 r),依次与状态矩阵的前 r 位异或。
- 每异或一个消息块后,应用Keccak-f 置换函数(24 轮复杂变换),将消息特征扩散到整个状态矩阵。
2. 2 挤压阶段(Squeezing)
- 从状态矩阵的前 r 位提取输出,生成所需长度的哈希值。
- 若输出长度超过 r,重复应用 Keccak-f 置换并继续提取,直至满足需求。
2. 3 与Merkle-Damgård 的区别
- 抗长度扩展攻击:海绵结构通过容量 c 隔离消息块间的关联性,避免攻击者通过追加数据伪造哈希值。
- 灵活性:可生成任意长度输出(如 SHAKE128/SHAKE256 等扩展函数)。
3 详细流程解析
3. 1. 消息填充(Pad10*1 规则)
- 步骤 1:在消息末尾添加二进制串 "011"(0x06)。
- 步骤 2:补 0 直到总长度满足 (原始长度 + 3 + k) ≡ 0 mod r。
- 步骤 3:将最后一个字节的最高位置 1(即添加 "1")。
示例:若原始消息为 575 位(SHA3-512 的 r=576 位),填充后变为 577 位(575+3+0+1),需拆分为两个块(576+1 位,但实际填充会补 0 至 576 位,最后一位补 1)。
3. 2 状态初始化
- 状态矩阵初始化为全 0 的 5×5×64 位立方体。
3. 3 吸收阶段
- 分块处理:将填充后的消息按 r 位分块,依次与状态矩阵的前 r 位异或。
- Keccak-f 置换:每异或一个块后,执行 24 轮置换,包括以下步骤:
- θ(Theta):列间异或与循环移位,实现线性扩散。
- ρ(Rho):对每个元素进行特定偏移量的循环右移。
- π(Pi):行内元素位置置换,增强混淆。
- χ(Chi):非线性变换(位级异或与取反),引入不可逆性。
- ι(Iota):添加轮常数,打破对称性。
3. 4 挤压阶段
- 从状态矩阵的前 r 位提取输出,若需要更多位,重复以下操作:
- 应用 Keccak-f 置换。
- 继续提取 r 位,直至总长度达标。
4 Keccak-f 置换函数详解
Keccak-f 是 SHA-3 的核心变换,每轮包含五个步骤:
4. 1 θ 步骤(列扩散)
- 计算列异或:对每列 5 个元素求和,再与相邻列异或。
- 循环移位:将结果循环右移 1 位,再次异或回原列。
4. 2 ρ 步骤(元素旋转)
每个元素按预设的偏移量(如第 (x,y) 元素旋转 (x+1)(y+1) 位)进行循环右移。
4. 3 π 步骤(行置换)
行内元素按固定置换表重新排列(如第 x 行的元素 y 移动到位置 (2x+3y) mod 5)。
4. 4 χ 步骤(非线性变换)
对每行元素进行位级运算:
s[x][y] = s[x][y] ^ ((~s[x+1][y]) & s[x+2][y])
(其中 x+1、x+2 取模 5)
4. 5 ι 步骤(轮常数注入)
与轮常数(RC [r])异或,RC [r] 由 LFSR 生成,每轮不同。
5 算法特点
安全性:
抗碰撞性:512 位输出的理论抗碰撞强度为 2²⁵⁶次运算。
抗量子攻击:海绵结构和复杂置换设计使其对 Grover 算法等量子攻击具有更强抵抗力12。
灵活性:
支持任意输出长度(如 SHAKE128 可生成 1KB 哈希值)。
兼容多种应用场景(哈希、消息认证码、伪随机数生成)。
高效性:
硬件实现简单,支持并行计算,现代 CPU(如 Intel AVX2)可通过指令集优化加速。
6 应用场景
数据完整性校验:
大型文件传输(如备份、分布式存储)中校验数据一致性。
密码学协议:
TLS 1.3 协议中用于密钥派生和消息认证1。
零知识证明、数字签名等场景。
区块链技术:
以太坊 2.0 采用 SHA3-256 生成账户地址和区块哈希。
抗量子特性为未来区块链安全提供保障12。
密码存储:
加盐哈希存储用户密码,防止彩虹表攻击。
7 与 Keccak 的关系
SHA-3 是 Keccak 算法的标准化实例,但存在以下差异:
填充规则:SHA-3 使用 Pad10*1,而 Keccak 支持多种填充方式。
参数固定:SHA-3 的状态大小固定为 1600 位,而 Keccak 允许自定义参数。
8 未来挑战与应对
尽管 SHA-3 目前被认为是安全的,但其长期安全性仍需关注:
量子计算威胁:Grover 算法可将 SHA-3 的碰撞攻击复杂度降低至√(2⁵¹²) = 2²⁵⁶次运算,与现有安全级别相当。
新型攻击手段:需持续关注密码分析进展,如差分攻击、线性攻击的变种。