2、对称加密算法基础:AES算法原理

2.1 AES算法概述

AES(Advanced Encryption Standard,高级加密标准)是目前全球最广泛使用的对称加密算法,由比利时密码学家Joan Daemen和Vincent Rijmen设计,最初称为Rijndael算法。2001年,NIST(美国国家标准与技术研究院)将其正式采纳为联邦信息处理标准(FIPS 197)。

AES属于分组密码(Block Cipher),其核心特征如下:

  • 分组长度固定:128位(16字节)
  • 密钥长度可选:128位、192位、256位
  • 轮数依赖密钥长度:10轮(128位)、12轮(192位)、14轮(256位)
  • 操作单位:字节(8位)和字(32位)
对称加密核心概念:加密和解密使用相同的密钥。发送方和接收方必须在通信前通过安全渠道协商并共享密钥。AES的安全性完全依赖于密钥的保密性。

2.2 AES算法内部结构

AES的每一轮(除最后一轮外)包含四个基本操作:字节代换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)、轮密钥加(AddRoundKey)。最后一轮省略列混淆操作。

下图展示了AES-128加密的完整流程与内部轮结构:

AES-128加密流程与轮结构 AES-128 加密流程与轮结构 整体加密流程 明文(128位) 初始轮密钥加 第1~9轮(每轮4步) 字节代换(SubBytes) 行移位(ShiftRows) 列混淆(MixColumns) 轮密钥加(AddRoundKey) 第10轮(无列混淆) 字节代换 → 行移位 → 轮密钥加 密文(128位) 状态矩阵与轮函数细节 状态矩阵(4×4字节) a₀₀ a₀₁ a₀₂ a₀₃ a₁₀ a₁₁ a₁₂ a₁₃ a₂₀ a₂₁ a₂₂ a₂₃ a₃₀ a₃₁ a₃₂ a₃₃ 密钥扩展(Key Expansion) W[0] W[1] W[2] W[3] W[4] W[5] W[6] W[7] ... W[40] W[41] W[42] W[43] 轮函数四步详解 ① SubBytes: S盒非线性替换,每个字节独立替换 ② ShiftRows: 行循环左移,第0行不移,第1行移1字节 ③ MixColumns: 列混合变换,每列与固定矩阵相乘 ④ AddRoundKey: 状态矩阵与轮密钥逐字节异或

2.3 四大核心操作详解

2.3.1 字节代换(SubBytes)

字节代换是AES中唯一的非线性变换,通过一个16×16的S盒(Substitution Box)对状态矩阵中的每个字节进行独立替换。S盒具有以下设计特性:

  • 可逆性:加密S盒与解密逆S盒一一对应
  • 非线性:抵抗线性密码分析
  • 差分均匀性低:抵抗差分密码分析

S盒构造过程:先计算字节在GF(2⁸)上的乘法逆元,再应用仿射变换。

2.3.2 行移位(ShiftRows)

行移位对状态矩阵的每一行进行循环左移操作:

行号 移位量(字节) 说明
第0行 0 不移位
第1行 1 循环左移1字节
第2行 2 循环左移2字节
第3行 3 循环左移3字节

行移位的作用是扩散——将列之间的相关性打散,使每一列的数据分散到不同列中。

2.3.3 列混淆(MixColumns)

列混淆将状态矩阵的每一列视为GF(2⁸)上的一个4维向量,与一个固定的可逆矩阵相乘:

┌ s'₀c ┐   ┌ 02 03 01 01 ┐ ┌ s₀c ┐
│ s'₁c │ = │ 01 02 03 01 │ │ s₁c │
│ s'₂c │   │ 01 01 02 03 │ │ s₂c │
└ s'₃c ┘   └ 03 01 01 02 ┘ └ s₃c ┘

其中乘法在GF(2⁸)上执行,加法为异或操作。列混淆进一步增强了雪崩效应——明文或密钥的微小变化会导致密文约50%的比特位发生变化。

2.3.4 轮密钥加(AddRoundKey)

轮密钥加是最简单的操作:将状态矩阵与当前轮的轮密钥进行逐字节异或。轮密钥由主密钥通过密钥扩展算法生成。

密钥扩展要点:
  • AES-128:从16字节主密钥扩展出44个字(176字节),每轮使用4个字
  • AES-192:从24字节主密钥扩展出52个字(208字节)
  • AES-256:从32字节主密钥扩展出60个字(240字节)
  • 扩展算法包含字循环(RotWord)、S盒替换(SubWord)和轮常数异或(Rcon)

2.4 AES-128/192/256 区别

三种AES变体的核心区别在于密钥长度和轮数,直接影响安全强度和性能:

参数 AES-128 AES-192 AES-256
密钥长度 128位(16字节) 192位(24字节) 256位(32字节)
轮数 10 12 14
扩展密钥字数 44 52 60
安全强度 128位 192位 256位
性能(相对) 最快 中等 最慢(约慢20%~40%)
量子安全(Grover算法) 64位(不安全) 96位(过渡) 128位(推荐)
典型应用 IoT设备、移动端 企业级应用 政府、金融、长期机密
安全建议:对于新建系统,建议优先选择AES-256。虽然AES-128在经典计算下足够安全(暴力破解需2¹²⁸次尝试),但考虑到量子计算威胁(Grover算法可将安全强度减半),AES-256是面向未来的选择。

2.5 ECB/CBC/GCM 模式对比

AES作为分组密码,需要配合工作模式来处理超过16字节的数据。三种最常用的模式对比如下:

特性 ECB(电子密码本) CBC(密码分组链接) GCM(伽罗瓦/计数器模式)
加密方式 每个分组独立加密 前一分组密文与当前明文异或后加密 计数器递增 + 加密 + 异或明文
是否需要IV 否 是(随机IV,16字节) 是(随机Nonce,12字节推荐)
并行加密 支持 不支持 支持
并行解密 支持 支持 支持
错误传播 仅影响当前分组 影响当前及下一分组 仅影响当前分组
完整性认证 无 无 内置GMAC认证标签
密文模式 确定型(相同明文→相同密文) 概率型(相同明文→不同密文) 概率型(相同明文→不同密文)
安全性 低(不推荐用于多分组数据) 中(需正确实现) 高(AEAD认证加密)
典型场景 单分组数据、密钥加密 文件加密、传统协议 网络通信、TLS 1.3、VPN

下图展示了三种工作模式的加密流程对比:

ECB / CBC / GCM 加密模式对比 ECB 模式 P₁ P₂ P₃ E(K,·) E(K,·) E(K,·) C₁ C₂ C₃ ⚠ 相同明文 → 相同密文,无扩散 CBC 模式 IV P₁ P₂ P₃ ⊕ ⊕ ⊕ E(K,·) E(K,·) E(K,·) C₁ C₂ C₃ ✓ 相同明文 → 不同密文,错误传播