CREST分组密码算法的轮函数设计
字数 1637 2025-12-03 23:59:05

CREST分组密码算法的轮函数设计

CREST是一种轻量级分组密码算法,适用于资源受限环境(如物联网设备)。其分组长度为64位,密钥长度为80位,采用SPN(Substitution-Permutation Network)结构,共31轮。下面详细讲解其轮函数的设计与执行步骤。


1. 轮函数整体结构

每轮轮函数包含以下4个步骤:

  1. 轮密钥加(AddRoundKey):将64位状态与轮密钥异或。
  2. S盒替换(SubBytes):通过4×4的S盒对状态进行非线性变换。
  3. 行移位(ShiftRows):对状态矩阵的行进行循环移位。
  4. 列混淆(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表示多项式x3表示多项式x+1
  • 作用:通过线性变换增强扩散性,确保单字节变化影响整列。

3. 最后一轮的特殊处理

第31轮(最后一轮)省略列混淆(MixColumns)步骤,仅执行:

  1. 轮密钥加
  2. S盒替换
  3. 行移位
  4. 最终轮密钥加(与第32轮密钥异或)

4. 设计目标与安全性

  • 轻量化:4位S盒和简单矩阵运算降低硬件开销。
  • 抗攻击:31轮设计抵御差分密码分析和线性密码分析。
  • 局限性:64位分组长度易受穷举攻击,需结合适当工作模式(如CTR或GCM)使用。

通过以上步骤,CREST在保证安全性的同时实现了高效计算,适合嵌入式场景。

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在保证安全性的同时实现了高效计算,适合嵌入式场景。