CREST分组密码算法的密钥扩展算法
字数 1185 2025-11-04 20:47:20
CREST分组密码算法的密钥扩展算法
题目描述
CREST是一个轻量级分组密码算法,采用64位分组长度和128位密钥长度。其密钥扩展算法需要从128位主密钥生成11轮轮密钥(每轮64位)。请详细讲解密钥扩展过程,包括初始密钥处理、轮密钥生成逻辑和密钥编排设计。
解题过程
1. 算法背景与参数
CREST算法的密钥扩展设计目标是:
- 输入:128位主密钥 K = k₀k₁...k₁₂₇
- 输出:11个64位轮密钥 RK₀, RK₁, ..., RK₁₀
- 设计原则:确保密钥位充分扩散,抵抗相关密钥攻击
2. 初始密钥分组
将128位主密钥划分为4个32位字:
- K = W₀ || W₁ || W₂ || W₃(每个Wᵢ为32位)
- 示例:若K=0x00112233445566778899AABBCCDDEEFF
- W₀ = 0x00112233, W₁ = 0x44556677
- W₂ = 0x8899AABB, W₃ = 0xCCDDEEFF
3. 轮常数生成
定义轮常数RCᵢ用于消除对称性:
- RCᵢ = (2⁶⁴ - 2) × i mod 2⁶⁴(i=0,1,...,10)
- 具体值(十六进制):
- RC₀ = 0x0000000000000000
- RC₁ = 0xFFFFFFFFFFFFFFFE
- RC₂ = 0xFFFFFFFFFFFFFFFC
- ...(依次递减2)
4. 轮密钥生成步骤
对每轮i(0≤i≤10)执行:
RKᵢ = (W₀ ⊕ W₂ ⊕ RCᵢ) || (W₁ ⊕ W₃ ⊕ RCᵢ)
- 高位32位:W₀ ⊕ W₂ ⊕ RCᵢ的低32位
- 低位32位:W₁ ⊕ W₃ ⊕ RCᵢ的低32位
- ⊕表示按位异或
5. 密钥更新逻辑
每生成一个轮密钥后,更新W数组:
W₀' = (W₀ ⋘ 13) ⊕ (RKᵢ的高32位)
W₁' = (W₁ ⋘ 13) ⊕ (RKᵢ的低32位)
W₂' = (W₂ ⋘ 13)
W₃' = (W₃ ⋘ 13)
- ⋘ 13表示循环左移13位
- 更新后的W用于下一轮密钥生成
6. 完整示例(第0轮)
假设主密钥K=0x000102030405060708090A0B0C0D0E0F:
- W₀=0x00010203, W₁=0x04050607
- W₂=0x08090A0B, W₃=0x0C0D0E0F
- RC₀=0x00000000
- RK₀高位:0x00010203⊕0x08090A0B⊕0x00000000=0x08080808
- RK₀低位:0x04050607⊕0x0C0D0E0F⊕0x00000000=0x08080808
- RK₀=0x0808080808080808
更新W:
- W₀'=(0x00010203⋘13)⊕0x08080808=0x01018000⊕0x08080808=0x09098808
- (继续计算W₁', W₂', W₃')
7. 安全性设计要点
- 循环移位13位:打破32位字内的对齐
- 轮常数:确保每轮密钥差异,防止滑动攻击
- 异或操作:实现非线性扩散,避免密钥位孤立
通过11轮迭代,最终生成全部轮密钥,每轮密钥都与主密钥所有位相关且彼此不同。