ARIA 分组密码算法的加解密流程详解
字数 3481 2025-12-18 12:47:32

ARIA 分组密码算法的加解密流程详解

我将为您详细讲解 ARIA 算法完整的加解密流程。ARIA 是一种由韩国学者设计的 128 比特分组密码算法,支持 128、192 和 256 比特三种密钥长度。其整体结构为 SPN(代换-置换网络),加解密流程高度对称但略有不同,这使其设计精巧高效。

一、 算法总体框架与核心概念

  1. 基本参数

    • 分组长度:固定为 128 比特。
    • 密钥长度:128 比特(对应 12 轮)、192 比特(对应 14 轮)、256 比特(对应 16 轮)。轮数记为 nr
    • 数据表示:128 比特的明文、中间状态、密文都表示为 4x4 的字节矩阵(16 字节),类似于 AES。
  2. 核心操作:ARIA 的轮函数(Round Function)由三种基本变换组成:

    • Substitution Layer (S-layer):使用两个不同的 8x8 S盒(S1 和 S2)及其逆 S盒(S1⁻¹ 和 S2⁻¹)对状态矩阵的每个字节进行非线性替换。
    • Diffusion Layer (D-layer):一个精心设计的线性变换,作用于整个 128 比特状态,提供扩散性。这是加解密流程不同的关键点
    • Round Key Addition (A-layer):将 128 比特的轮密钥与状态进行简单的比特异或(XOR)。

二、 加密过程详解(循序渐进)

加密过程是 奇数轮偶数轮 交替进行的 nr 轮迭代,前后各有一个白化密钥加操作。

步骤 0:初始准备
明文 P (128 bit) 被加载到状态矩阵 State 中。首先生成所有的轮密钥 RK[0], RK[1], ..., RK[nr](通过密钥扩展算法,此处假定已生成)。

步骤 1:初始密钥加(Whitening)
State = State XOR RK[0]
这是第一轮白化操作,增加攻击难度。

步骤 2:主轮循环(对于轮数 r = 1 到 nr-1)
主循环执行 nr-1 轮。每轮包含三个子步骤,但奇数轮和偶数轮的 S 盒使用顺序相反。

  • 奇数轮(r=1,3,5,...)

    1. S-layer (Substitution):对 State 的 16 个字节应用 S 盒。
      • 规则:使用两个不同的 S 盒 S1 和 S2。具体地,对状态矩阵的行 i(从0开始),如果 i mod 4 的值为 0 或 1,则对该行的 4 个字节使用 S1;如果值为 2 或 3,则使用 S2。
      • 作用:引入非线性,混淆数据。
    2. D-layer (Diffusion):对整个 State 应用线性扩散变换 DL
      • 定义DL 是一个 128x128 的二进制矩阵乘法(在 GF(2) 上)。它将一个 128 比特的向量(状态的列优先表示)映射到另一个 128 比特向量。
      • 设计DL 矩阵是 Maximum Distance Separable (MDS) 矩阵,具有良好的分支数,确保单个输入字节的改变在经过 DL 后能影响到多个输出字节。
      • 作用:提供雪崩效应和扩散性。
    3. A-layer (AddRoundKey)State = State XOR RK[r]
  • 偶数轮(r=2,4,6,...)

    1. S-layer (Substitution):与奇数轮相反。行 i mod 4 值为 0 或 1 时,使用 S2;值为 2 或 3 时,使用 S1。
    2. D-layer (Diffusion)与加密奇数轮完全相同,应用同一个 DL 变换。
    3. A-layer (AddRoundKey)State = State XOR RK[r]

步骤 3:末轮处理(第 nr 轮)
最后一轮(第 nr 轮)比较特殊,它只包含 S-layer 和 A-layer,省略了 D-layer

  • 根据 nr 的奇偶性决定 S 盒的使用规则(奇同奇数轮,偶同偶数轮)。
  • 执行:State = S-layer(State),然后 State = State XOR RK[nr]

步骤 4:输出
此时 State 即为最终的密文 C

加密流程小结(公式化)
C = (XOR_RK[nr]) ∘ S_nr ∘ (XOR_RK[nr-1] ∘ DL ∘ S_{nr-1}) ∘ ... ∘ (XOR_RK[1] ∘ DL ∘ S_1) ∘ (XOR_RK[0]) (P)
其中 S_r 表示第 r 轮的 S 盒层(奇偶规则不同),DL 为扩散层,XOR_RK[r] 为与轮密钥 RK[r] 异或。

三、 解密过程详解(与加密的对称性)

ARIA 的解密流程与加密流程高度相似,核心思想是按逆序使用轮密钥,并将每轮的变换替换为其逆变换

关键点

  1. 逆变换

    • S-layer 的逆:使用 S 盒的逆 S盒。即,在解密时,如果加密轮使用了 S1,则对应的解密轮就使用 S1⁻¹;如果加密使用了 S2,则解密使用 S2⁻¹。奇偶轮的规则与加密时保持一致。
    • D-layer 的逆:扩散层 DL 是线性变换,其逆变换存在,记为 DL⁻¹这是加解密流程中 D-layer 唯一不同的地方。解密时使用 DL⁻¹ 而不是 DL
    • A-layer 的逆:异或操作的逆就是它自身(再次异或相同的密钥)。
  2. 步骤顺序与密钥顺序

    • 解密从“末轮”开始,向“首轮”进行。
    • 轮密钥的使用顺序与加密相反。

解密步骤分解

步骤 0:准备
密文 C 加载到 State。轮密钥 RK[0]...RK[nr] 已准备。

步骤 1:初始密钥加(解密对应加密的末轮)
State = State XOR RK[nr]。 // 对应加密末轮的 XOR_RK[nr]

步骤 2:末轮 S 盒逆变换(解密对应加密的末轮 S-layer)
根据 nr 的奇偶性,应用对应的逆 S 盒层 Inv_S_nr(规则同加密末轮,但用 S⁻¹)。

步骤 3:主轮循环(对于轮数 r = nr-1 降到 1)
这是解密的核心循环,执行 nr-1 轮。每轮包含:

  1. A-layer (AddRoundKey)State = State XOR RK[r]。 // 使用当前轮次 r 的密钥
  2. D-layer (Diffusion):应用逆扩散变换 DL⁻¹。 // 与加密唯一不同的核心操作
  3. S-layer (Substitution):应用逆 S 盒层 Inv_S_r。S盒使用的奇偶规则与加密第 r 轮时完全相同(但用的是逆S盒)。

步骤 4:最终密钥加(解密对应加密的初始白化)
State = State XOR RK[0]

步骤 5:输出
此时 State 即为恢复的明文 P

解密流程小结(公式化)
P = (XOR_RK[0]) ∘ (Inv_S_1 ∘ DL⁻¹ ∘ XOR_RK[1]) ∘ ... ∘ (Inv_S_{nr-1} ∘ DL⁻¹ ∘ XOR_RK[nr-1]) ∘ (Inv_S_nr ∘ XOR_RK[nr]) (C)

四、 加解密对称性验证(为什么这样设计是正确的?)

我们可以直观理解其正确性。观察一对加密轮(第 r 轮,假设不是首末轮)及其对应的解密操作。加密轮为:S ∘ DL ∘ XOR_RK[r]

为了解密,我们需要构造其逆:(XOR_RK[r] ∘ DL ∘ S)^(-1)
根据运算性质:
(S ∘ DL ∘ XOR_RK[r])^(-1) = (XOR_RK[r])^(-1) ∘ (DL)^(-1) ∘ (S)^(-1) = XOR_RK[r] ∘ DL⁻¹ ∘ Inv_S

这正是解密流程中每一轮(从后往前)所做的:Inv_S 然后 DL⁻¹ 然后 XOR_RK[r]。注意顺序是反的,因为解密是从最后一轮开始反向执行。首轮和末轮由于缺少 DLDL⁻¹,处理方式也严格对应。

这种设计使得 ARIA 的加解密结构非常规整,硬件实现时可以复用大部分电路(只需要同时提供 S 盒、逆 S 盒以及 DLDL⁻¹ 的电路),在资源受限和高速实现中都有优势。

ARIA 分组密码算法的加解密流程详解 我将为您详细讲解 ARIA 算法完整的加解密流程。ARIA 是一种由韩国学者设计的 128 比特分组密码算法,支持 128、192 和 256 比特三种密钥长度。其整体结构为 SPN(代换-置换网络),加解密流程高度对称但略有不同,这使其设计精巧高效。 一、 算法总体框架与核心概念 基本参数 : 分组长度 :固定为 128 比特。 密钥长度 :128 比特(对应 12 轮)、192 比特(对应 14 轮)、256 比特(对应 16 轮)。轮数记为 nr 。 数据表示 :128 比特的明文、中间状态、密文都表示为 4x4 的字节矩阵(16 字节),类似于 AES。 核心操作 :ARIA 的轮函数( Round Function )由三种基本变换组成: Substitution Layer (S-layer) :使用两个不同的 8x8 S盒(S1 和 S2)及其逆 S盒(S1⁻¹ 和 S2⁻¹)对状态矩阵的每个字节进行非线性替换。 Diffusion Layer (D-layer) :一个精心设计的线性变换,作用于整个 128 比特状态,提供扩散性。 这是加解密流程不同的关键点 。 Round Key Addition (A-layer) :将 128 比特的轮密钥与状态进行简单的比特异或(XOR)。 二、 加密过程详解(循序渐进) 加密过程是 奇数轮 和 偶数轮 交替进行的 nr 轮迭代,前后各有一个白化密钥加操作。 步骤 0:初始准备 明文 P (128 bit) 被加载到状态矩阵 State 中。首先生成所有的轮密钥 RK[0], RK[1], ..., RK[nr] (通过密钥扩展算法,此处假定已生成)。 步骤 1:初始密钥加(Whitening) State = State XOR RK[0] 。 这是第一轮白化操作,增加攻击难度。 步骤 2:主轮循环(对于轮数 r = 1 到 nr-1) 主循环执行 nr-1 轮。每轮包含三个子步骤,但奇数轮和偶数轮的 S 盒使用顺序相反。 奇数轮(r=1,3,5,...) : S-layer (Substitution) :对 State 的 16 个字节应用 S 盒。 规则 :使用两个不同的 S 盒 S1 和 S2。具体地,对状态矩阵的行 i (从0开始),如果 i mod 4 的值为 0 或 1,则对该行的 4 个字节使用 S1;如果值为 2 或 3,则使用 S2。 作用 :引入非线性,混淆数据。 D-layer (Diffusion) :对整个 State 应用线性扩散变换 DL 。 定义 : DL 是一个 128x128 的二进制矩阵乘法(在 GF(2) 上)。它将一个 128 比特的向量(状态的列优先表示)映射到另一个 128 比特向量。 设计 : DL 矩阵是 Maximum Distance Separable (MDS) 矩阵,具有良好的分支数,确保单个输入字节的改变在经过 DL 后能影响到多个输出字节。 作用 :提供雪崩效应和扩散性。 A-layer (AddRoundKey) : State = State XOR RK[r] 。 偶数轮(r=2,4,6,...) : S-layer (Substitution) :与奇数轮相反。行 i mod 4 值为 0 或 1 时,使用 S2;值为 2 或 3 时,使用 S1。 D-layer (Diffusion) : 与加密奇数轮完全相同 ,应用同一个 DL 变换。 A-layer (AddRoundKey) : State = State XOR RK[r] 。 步骤 3:末轮处理(第 nr 轮) 最后一轮(第 nr 轮)比较特殊,它 只包含 S-layer 和 A-layer,省略了 D-layer 。 根据 nr 的奇偶性决定 S 盒的使用规则(奇同奇数轮,偶同偶数轮)。 执行: State = S-layer(State) ,然后 State = State XOR RK[nr] 。 步骤 4:输出 此时 State 即为最终的密文 C 。 加密流程小结(公式化) : C = (XOR_RK[nr]) ∘ S_nr ∘ (XOR_RK[nr-1] ∘ DL ∘ S_{nr-1}) ∘ ... ∘ (XOR_RK[1] ∘ DL ∘ S_1) ∘ (XOR_RK[0]) (P) 其中 S_r 表示第 r 轮的 S 盒层(奇偶规则不同), DL 为扩散层, XOR_RK[r] 为与轮密钥 RK[ r ] 异或。 三、 解密过程详解(与加密的对称性) ARIA 的解密流程与加密流程高度相似,核心思想是 按逆序使用轮密钥,并将每轮的变换替换为其逆变换 。 关键点 : 逆变换 : S-layer 的逆 :使用 S 盒的逆 S盒。即,在解密时,如果加密轮使用了 S1,则对应的解密轮就使用 S1⁻¹;如果加密使用了 S2,则解密使用 S2⁻¹。奇偶轮的规则与加密时保持一致。 D-layer 的逆 :扩散层 DL 是线性变换,其逆变换存在,记为 DL⁻¹ 。 这是加解密流程中 D-layer 唯一不同的地方 。解密时使用 DL⁻¹ 而不是 DL 。 A-layer 的逆 :异或操作的逆就是它自身(再次异或相同的密钥)。 步骤顺序与密钥顺序 : 解密从“末轮”开始,向“首轮”进行。 轮密钥的使用顺序与加密相反。 解密步骤分解 : 步骤 0:准备 密文 C 加载到 State 。轮密钥 RK[0]...RK[nr] 已准备。 步骤 1:初始密钥加(解密对应加密的末轮) State = State XOR RK[nr] 。 // 对应加密末轮的 XOR_RK[nr] 步骤 2:末轮 S 盒逆变换(解密对应加密的末轮 S-layer) 根据 nr 的奇偶性,应用对应的逆 S 盒层 Inv_S_nr (规则同加密末轮,但用 S⁻¹)。 步骤 3:主轮循环(对于轮数 r = nr-1 降到 1) 这是解密的核心循环,执行 nr-1 轮。每轮包含: A-layer (AddRoundKey) : State = State XOR RK[r] 。 // 使用当前轮次 r 的密钥 D-layer (Diffusion) :应用 逆扩散变换 DL⁻¹ 。 // 与加密唯一不同的核心操作 S-layer (Substitution) :应用逆 S 盒层 Inv_S_r 。S盒使用的奇偶规则与加密第 r 轮时完全相同(但用的是逆S盒)。 步骤 4:最终密钥加(解密对应加密的初始白化) State = State XOR RK[0] 。 步骤 5:输出 此时 State 即为恢复的明文 P 。 解密流程小结(公式化) : P = (XOR_RK[0]) ∘ (Inv_S_1 ∘ DL⁻¹ ∘ XOR_RK[1]) ∘ ... ∘ (Inv_S_{nr-1} ∘ DL⁻¹ ∘ XOR_RK[nr-1]) ∘ (Inv_S_nr ∘ XOR_RK[nr]) (C) 四、 加解密对称性验证(为什么这样设计是正确的?) 我们可以直观理解其正确性。观察一对加密轮(第 r 轮,假设不是首末轮)及其对应的解密操作。加密轮为: S ∘ DL ∘ XOR_RK[r] 。 为了解密,我们需要构造其逆: (XOR_RK[r] ∘ DL ∘ S)^(-1) 。 根据运算性质: (S ∘ DL ∘ XOR_RK[r])^(-1) = (XOR_RK[r])^(-1) ∘ (DL)^(-1) ∘ (S)^(-1) = XOR_RK[r] ∘ DL⁻¹ ∘ Inv_S 。 这正是解密流程中每一轮(从后往前)所做的: Inv_S 然后 DL⁻¹ 然后 XOR_RK[r] 。注意顺序是反的,因为解密是从最后一轮开始反向执行。首轮和末轮由于缺少 DL 或 DL⁻¹ ,处理方式也严格对应。 这种设计使得 ARIA 的加解密结构非常规整,硬件实现时可以复用大部分电路(只需要同时提供 S 盒、逆 S 盒以及 DL 和 DL⁻¹ 的电路),在资源受限和高速实现中都有优势。