AES(高级加密标准)是全球使用最广泛的对称加密算法。无论是加密数据库、保护文件,还是保障网络传输安全,AES 几乎无处不在。本文介绍 AES 的工作原理及正确使用方法。
什么是 AES?
AES 由 NIST 于 2001 年选定,用于替代老化的 DES 算法。它是一种分组密码——使用密钥对固定大小的数据块(128 位 / 16 字节)进行加密。
基本参数:
- 分组大小:128 位(固定)
- 密钥长度:128、192 或 256 位
- 结构:置换-排列网络(SPN)
- 轮数:10 轮(AES-128)、12 轮(AES-192)、14 轮(AES-256)
AES 密钥长度对比
| 密钥长度 | 安全级别 | 适用场景 |
|---|---|---|
| AES-128 | ~128 位安全 | 通用场景,速度快 |
| AES-192 | ~192 位安全 | 较高安全需求 |
| AES-256 | ~256 位安全 | 政府、长期保密数据 |
AES-128 对所有已知攻击都是安全的。对于需要保密数十年的数据,推荐使用 AES-256。
AES 工作原理(简化版)
AES 通过多个轮次处理数据,每轮包含四个操作:
1. 字节替换(SubBytes)
每个字节通过固定查找表(S-Box)替换,提供混淆性——使密钥与密文之间的关系变得复杂。
2. 行移位(ShiftRows)
4×4 状态矩阵的各行循环移位,提供扩散性——将每个字节的影响扩散开来。
3. 列混淆(MixColumns)
每列在 GF(2⁸) 中与固定多项式相乘,进一步扩散数据。
4. 轮密钥加(AddRoundKey)
当前轮密钥(由主密钥派生)与状态进行 XOR 运算。这是密钥真正参与运算的步骤。
工作模式
AES 每次加密一个 16 字节的分组。对于更长的数据,需要选择工作模式:
ECB(电子密码本)—— 大多数场景应避免使用
- 每个分组独立加密
- 相同明文分组总产生相同密文分组
- 问题:数据中的规律在密文中可见(著名的"ECB 企鹅"问题)
- 仅适用于:单分组加密、密钥封装
CBC(密码分组链接)—— 最常见的传统模式
- 每个分组加密前先与前一个密文分组 XOR
- 需要初始化向量(IV)
- IV 必须随机且每次加密唯一
- 适用于:文件加密、数据库字段加密
CTR(计数器模式)—— 流密码模式
- 加密计数器值后与明文 XOR
- 将 AES 转化为流密码
- 可并行化,无需填充
- 适用于:高性能加密、流数据
GCM(Galois/计数器模式)—— 新系统推荐
- CTR 模式 + 认证标签
- 同时提供机密性和完整性
- 自动检测篡改
- 适用于:TLS、API 加密、所有现代系统
填充
由于 AES 处理 16 字节分组,非 16 字节倍数的数据需要填充。
PKCS#7 填充(最常见):
- 添加 N 个值为 N 的字节以达到分组边界
- 示例:13 字节数据 → 添加 3 个
0x03字节
数据: 48 65 6C 6C 6F(5 字节)
填充后: 48 65 6C 6C 6F 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B(16 字节)
GCM 模式不需要填充(流密码模式)。
IV / Nonce 最佳实践
初始化向量(IV)或 Nonce 对安全性至关重要:
- 绝不重用同一密钥的 IV
- CBC 模式:使用随机 16 字节 IV,与密文一起存储
- GCM 模式:使用随机 12 字节 Nonce,与密文一起存储
- CTR 模式:使用唯一的计数器/Nonce 组合
重用 IV 会彻底破坏加密安全性。
常见错误
| 错误 | 后果 | 修复方案 |
|---|---|---|
| 使用 ECB 模式 | 数据规律可见 | 使用 CBC 或 GCM |
| 重用 IV/Nonce | 安全性被破坏 | 每次加密生成新的随机 IV |
| 硬编码密钥 | 密钥泄露 | 使用密钥管理系统 |
| 无认证 | 篡改无法检测 | 使用 GCM 或添加 HMAC |
| 弱密钥派生 | 暴力破解风险 | 基于密码的密钥使用 PBKDF2/bcrypt |
AES 在支付系统中的应用
在支付行业,AES 用于:
- PIN 块加密(AES Format 4,ISO 9564)—— 参见 PIN 块指南
- DUKPT AES——每笔交易的密钥派生 —— 参见 DUKPT 指南
- TR-31 密钥块(Version D 使用 AES-256)—— 参见 TR-31 指南
- MAC 计算(AES-CMAC)
在线工具
使用我们的 AES 加密工具:
- 使用 AES-128/192/256 加密和解密数据
- 测试所有模式:ECB、CBC、CFB、OFB、CTR
- 可视化 IV 和填充行为
- 以十六进制或 Base64 格式导出结果
所有处理均在浏览器中完成——您的密钥和数据不会离开您的设备。