SHA-256哈希算法的消息扩展过程详解
字数 864 2025-12-01 13:35:04
SHA-256哈希算法的消息扩展过程详解
题目描述
SHA-256的消息扩展过程是将一个512位的输入消息块(划分为16个32位字)扩展为64个32位字(记为W₀到W₆₃),用于后续的64轮压缩函数计算。扩展过程需满足非线性性和扩散性,以增强哈希算法的抗碰撞能力。
解题过程
-
输入分块与初始化
- 将512位消息块划分为16个32位字:W₀, W₁, ..., W₁₅。
- 剩余48个字(W₁₆到W₆₃)通过扩展规则生成。
-
扩展规则的核心操作
扩展过程依赖以下位运算函数(定义见SHA-256标准):- σ₀(x) = (x ⋙ 7) ⊕ (x ⋙ 18) ⊕ (x ≫ 3)
⋙表示循环右移,≫表示逻辑右移(高位补0)。- 示例:若x=0x12345678,则计算各部分后按位异或。
- σ₁(x) = (x ⋙ 17) ⊕ (x ⋙ 19) ⊕ (x ≫ 10)
- 结构与σ₀类似,但参数不同,确保不同位置的比特混合。
- σ₀(x) = (x ⋙ 7) ⊕ (x ⋙ 18) ⊕ (x ≫ 3)
-
递推生成Wₜ(16 ≤ t ≤ 63)
每个新字由已生成的字通过非线性组合得到:
\[ W_t = σ₁(W_{t-2}) + W_{t-7} + σ₀(W_{t-15}) + W_{t-16} \]
- 步骤分解(以W₁₆为例):
a. 计算σ₁(W₁₄):对W₁₄循环右移17、19位,逻辑右移10位,结果异或。
b. 计算σ₀(W₁):对W₁循环右移7、18位,逻辑右移3位,结果异或。
c. 将σ₁(W₁₄)、W₉、σ₀(W₁)、W₀模2³²相加(忽略进位溢出)。 - 设计意图:
- σ₀和σ₁引入非线性,避免线性扩展的脆弱性。
- 加法运算增强扩散,微小输入变化影响后续所有Wₜ。
- 安全性分析
- 若直接线性扩展(如Wₜ=Wₜ₋₁₆⊕Wₜ₋₃),易受差分攻击。
- SHA-256的扩展通过σ函数和加法,使每个Wₜ依赖多个历史字,提高攻击难度。
总结
消息扩展是SHA-256压缩函数的关键预处理步骤,通过σ₀、σ₁的非线性变换和模加运算,将16个字扩展为64个字,确保消息比特充分扩散到每一轮计算中。