CREST分组密码算法的轮函数设计
CREST是一种轻量级分组密码算法,适用于资源受限环境(如物联网设备)。其分组长度为64位,密钥长度为80位,采用SPN(Substitution-Permutation Network)结构,共31轮。下面详细讲解其轮函数的设计与执行步骤。
1. 轮函数整体结构
每轮轮函数包含以下4个步骤:
- 轮密钥加(AddRoundKey):将64位状态与轮密钥异或。
- S盒替换(SubBytes):通过4×4的S盒对状态进行非线性变换。
- 行移位(ShiftRows):对状态矩阵的行进行循环移位。
- 列混淆(MixColumns):通过矩阵乘法对状态矩阵的列进行线性扩散。
2. 步骤详解
(1)轮密钥加(AddRoundKey)
- 输入:64位状态(划分为16个4位半字节)、64位轮密钥(从80位主密钥通过密钥扩展算法生成)。
- 操作:将状态与轮密钥按位异或(XOR)。
- 公式:
\[ \text{State} \leftarrow \text{State} \oplus \text{RoundKey} \]
(2)S盒替换(SubBytes)
- 状态划分:将64位状态视为16个4位半字节(每个半字节作为S盒的输入)。
- S盒设计:使用4×4的S盒(具体值由算法定义,例如:输入
0x0映射到0xE,输入0x1映射到0x4等)。 - 操作:对每个半字节执行S盒替换,确保非线性性。
\[ \text{State}[i] \leftarrow S[\text{State}[i]] \quad (0 \leq i \leq 15) \]
(3)行移位(ShiftRows)
- 状态排列:将16个半字节排列为4×4矩阵(按行填充):
\[ \begin{bmatrix} b_0 & b_1 & b_2 & b_3 \\ b_4 & b_5 & b_6 & b_7 \\ b_8 & b_9 & b_{10} & b_{11} \\ b_{12} & b_{13} & b_{14} & b_{15} \end{bmatrix} \]
- 移位规则:
- 第0行不移位。
- 第1行循环左移1位。
- 第2行循环左移2位。
- 第3行循环左移3位。
- 示例:第1行原始序列
[b4, b5, b6, b7]移位后变为[b5, b6, b7, b4]。
(4)列混淆(MixColumns)
- 列处理:将4×4矩阵的每一列视为4维向量,与固定矩阵相乘(运算在GF(2^4)上进行)。
- 矩阵乘法:
\[ \begin{bmatrix} c_0 \\ c_1 \\ c_2 \\ c_3 \end{bmatrix} = \begin{bmatrix} 2 & 3 & 1 & 1 \\ 1 & 2 & 3 & 1 \\ 1 & 1 & 2 & 3 \\ 3 & 1 & 1 & 2 \end{bmatrix} \times \begin{bmatrix} b_0 \\ b_1 \\ b_2 \\ b_3 \end{bmatrix} \]
- 乘法与加法定义在GF(2^4)上,不可约多项式为\(x^4 + x + 1\)。
- 系数
2表示多项式x,3表示多项式x+1。 - 作用:通过线性变换增强扩散性,确保单字节变化影响整列。
3. 最后一轮的特殊处理
第31轮(最后一轮)省略列混淆(MixColumns)步骤,仅执行:
- 轮密钥加
- S盒替换
- 行移位
- 最终轮密钥加(与第32轮密钥异或)
4. 设计目标与安全性
- 轻量化:4位S盒和简单矩阵运算降低硬件开销。
- 抗攻击:31轮设计抵御差分密码分析和线性密码分析。
- 局限性:64位分组长度易受穷举攻击,需结合适当工作模式(如CTR或GCM)使用。
通过以上步骤,CREST在保证安全性的同时实现了高效计算,适合嵌入式场景。