3. 对称加密算法AES:结构、密钥扩展与模式对比

AES(Advanced Encryption Standard)是当今最广泛使用的对称分组密码算法,由美国国家标准与技术研究院(NIST)于2001年正式发布。AES固定分组长度为128比特,支持128/192/256比特三种密钥长度,对应轮数分别为10/12/14轮。本章深入剖析AES的四个核心操作层、密钥扩展算法以及三种主流工作模式(ECB/CBC/CTR)的工程特性。

3.1 AES算法结构总览

AES以字节为基本处理单元,将128比特明文组织成4×4的字节矩阵(State)。每一轮迭代依次执行:字节代换(SubBytes)、行移位(ShiftRows)strong>、列混合(MixColumns)、轮密钥加(AddRoundKey)。最后一轮省略列混合操作。

关键参数速查:
  • 分组大小:128 bits(16字节)
  • 密钥长度:128 / 192 / 256 bits
  • 轮数:10 / 12 / 14
  • 状态矩阵:4行 × 4列(每字节8 bits)
AES一轮加密结构(最后一轮无MixColumns) 明文 State (16字节) AddRoundKey (初始) SubBytes (S盒) ShiftRows MixColumns 最后一轮跳过 AddRoundKey (本轮)

3.2 四个核心操作详解

3.2.1 字节代换(SubBytes)

对状态矩阵中每个字节独立进行非线性替换。使用一个固定的16×16 S盒(基于GF(2⁸)上的乘法逆元和仿射变换构造)。S盒具有高非线性度,能有效抵抗差分和线性密码分析。

工程提示:实际实现中通常预计算S盒查找表(256字节),避免运行时计算乘法逆元。解密时使用逆S盒(InvSBox)。

3.2.2 行移位(ShiftRows)

对状态矩阵的每一行进行循环左移:第0行不移,第1行移1字节,第2行移2字节,第3行移3字节。该操作实现字节在列之间的扩散。

行号移位量(加密)移位量(解密)
000
113
222
331

3.2.3 列混合(MixColumns)

将状态矩阵的每一列视为GF(2⁸)上的4项多项式,与固定多项式 c(x) = 0x03·x³ + 0x01·x² + 0x01·x + 0x02 相乘后模 x⁴ + 1。该操作实现列内字节的混合扩散,是AES达到完全雪崩效应的关键。

3.2.4 轮密钥加(AddRoundKey)

将状态矩阵与轮密钥矩阵进行逐字节异或(XOR)。轮密钥由密钥扩展算法从主密钥派生。

3.3 密钥扩展(Key Expansion)

密钥扩展算法从初始密钥生成所有轮次所需的轮密钥。对于AES-128,需要生成10个轮密钥(每个16字节),加上初始密钥共176字节。扩展过程基于字(4字节)操作,核心步骤包括:

  1. RotWord: 将4字节字循环左移1字节。
  2. SubWord: 对字中每个字节应用S盒替换。
  3. Rcon: 与轮常数(Rcon[i] = [2^(i-1), 0, 0, 0])异或。
# AES-128 密钥扩展伪代码(Python风格)
def key_expansion(key):
    # key: 16字节初始密钥
    w = [0] * 44  # 44个字(4字节/字)
    for i in range(4):
        w[i] = key[4*i:4*i+4]
    for i in range(4, 44):
        temp = w[i-1]
        if i % 4 == 0:
            temp = sub_word(rot_word(temp)) ^ rcon[i//4]
        w[i] = w[i-4] ^ temp
    return w  # 每4个字构成一个轮密钥

3.4 ECB / CBC / CTR 模式对比

AES作为分组密码,直接加密固定长度分组。实际应用中需要工作模式来处理任意长度消息。三种最常用模式的对比如下:

特性ECB(电子密码本)CBC(密码分组链接)CTR(计数器)
加密方式每个分组独立加密前一分组密文与当前明文异或后加密计数器值加密后与明文异或
是否需要IV否是(随机IV,16字节)是(Nonce + 计数器,16字节)
并行加密支持不支持支持
并行解密支持支持支持
错误传播仅影响当前分组影响当前及下一分组仅影响当前分组
密文模式确定型(相同明文→相同密文)概率型(IV随机化)概率型(Nonce随机化)
典型应用❌ 不推荐(不安全)文件加密、TLS 1.2磁盘加密、TLS 1.3、VPN
安全警告:ECB模式不应在任何新系统中使用。相同明文分组产生相同密文,导致模式泄露(如“企鹅图”攻击)。CBC和CTR是安全替代方案,其中CTR模式因支持并行和流式处理而更受现代协议青睐。
ECB / CBC / CTR 模式对比 ECB 明文1 明文2 明文3 密文1 密文2 密文3 CBC IV 明文1 明文2 密文1 密文2 CTR Nonce||Cnt Nonce||Cnt+1 密钥流1 密钥流2

3.5 模式选择建议

工程选型指南:
  • 通用数据加密:优先选择 AES-256-CTR,配合随机Nonce(96 bits)和计数器(32 bits),支持并行和随机访问。
  • 文件/磁盘加密:推荐 AES-XTS(基于CTR的变体,专为存储设计)或 AES-CBC + HMAC认证。
  • 网络协议(TLS 1.3):使用 AES-128-GCM 或 AES-256-GCM(CTR模式 + GMAC认证,提供加密+完整性)。
  • 遗留系统兼容:若必须使用CBC,务必使用随机IV并附加HMAC或CMAC认证,防止填充预言攻击。

AES的数学结构保证了高安全强度,但工作模式的选择直接影响安全性、性能和可认证性。现代密码工程中,认证加密(AEAD)如GCM、CCM已成为事实标准,将加密与完整性保护合二为一。