CREST分组密码算法的密钥扩展算法
字数 1574 2025-11-10 20:29:33
CREST分组密码算法的密钥扩展算法
题目描述
CREST是一种轻量级分组密码算法,采用SPN(Substitution-Permutation Network)结构,分组长度为64位,密钥长度支持80位或128位。其密钥扩展算法需要将原始密钥扩展为多轮轮密钥(共31轮),每轮轮密钥长度为64位。本题要求详细分析CREST密钥扩展算法的步骤,包括密钥初始化、轮密钥生成逻辑以及算法设计中的关键技巧。
解题过程
1. 密钥扩展的基本需求
- 输入:80位或128位原始密钥。
- 输出:31个64位的轮密钥(\(RK_0, RK_1, \dots, RK_{30}\))。
- 核心挑战:如何用较短的原始密钥生成足够多的轮密钥,同时保证轮密钥之间无明显相关性,避免密码分析中的密钥调度攻击。
2. 密钥初始化(以80位密钥为例)
原始密钥被划分为两个部分:
- 寄存器A:64位,直接作为初始轮密钥 \(RK_0\)。
- 寄存器B:16位,用于在后续步骤中生成其他轮密钥。
初始化步骤:
- 将80位密钥表示为 \(K = k_{79}k_{78} \dots k_0\)。
- 高64位(\(k_{79} \dots k_{16}\))存入寄存器A,低16位(\(k_{15} \dots k_0\))存入寄存器B。
3. 轮密钥生成迭代过程
每一轮通过以下操作生成新的轮密钥:
- 循环左移:寄存器B循环左移1位(例如,原B值为 \(b_{15}b_{14} \dots b_0\),左移后为 \(b_{14}b_{13} \dots b_0b_{15}\))。
- S盒替换:将寄存器B的16位划分为4个4位块,每个块通过CREST的4×4 S盒进行非线性替换(S盒的具体置换表需参考算法标准)。
- 轮常数异或:对寄存器B的第4位(从高位开始)与当前轮号 \(i\)(1≤i≤30)进行异或,以消除对称性。
- 更新寄存器A:
- 将寄存器A的高16位与处理后的寄存器B进行异或,结果作为新寄存器A的低16位。
- 寄存器A整体右移16位,原低16位丢弃,新低16位为上述异或结果。
- 输出轮密钥:更新后的寄存器A作为本轮轮密钥 \(RK_i\)。
数学形式化描述:
设第 \(i\) 轮时寄存器A为 \(A_i\),寄存器B为 \(B_i\):
\[\begin{aligned} B_i &= \text{RotateLeft}(B_{i-1}, 1) \\ B_i &= \text{SBox}(B_i) \\ B_i &= B_i \oplus (\text{轮常数} \ll 4) \quad \text{(轮常数与轮号相关)} \\ A_i &= (A_{i-1} \gg 16) \oplus (B_i \ll 48) \\ RK_i &= A_i \end{aligned} \]
4. 关键设计技巧分析
- 非线性性:通过S盒引入非线性,防止密钥扩展成为线性变换,避免弱密钥。
- 轮常数:每轮异或轮常数(通常为轮号)破坏对称性,防止不同轮的轮密钥相同。
- 效率优化:仅对16位寄存器B进行复杂操作,64位寄存器A通过移位和异或快速更新,适合轻量级场景。
5. 安全性考虑
- 抗相关攻击:S盒和轮常数确保相邻轮密钥的差异足够随机。
- 密钥冗余:80位密钥扩展为31×64=1984位轮密钥,但实际熵仍受原始密钥长度限制,需避免短密钥场景下的暴力破解。
总结
CREST的密钥扩展算法通过交替使用移位、S盒和轮常数,以低计算成本实现轮密钥的充分随机化。其设计平衡了轻量级设备的资源限制与密码学安全性要求,是SPN结构密钥调度的典型代表。