Advanced Encryption Standard(AES)
AES 是固定 128-bit block size、支持 128/192/256-bit key 的现代对称分组密码;AES 本体只提供可逆 block transform,真正消息保护还需要安全的 mode/AEAD、nonce 与 key-management。
[!info] related notes
Advanced Encryption Standard(AES)
一句话定义
AES 是现代主流 symmetric block cipher。
三个标准实例:
- AES-128
- AES-192
- AES-256
三者的 block size 都是 128 bit;后缀表示 key length,而不是 block size。
AES 本体做什么
AES 接收:
- 一个 128-bit plaintext block;
- 一个 128/192/256-bit key;
产生一个 128-bit ciphertext block。
解密执行逆变换。
因此:
AES 本身只定义 block transformation,不直接定义“怎样安全加密任意长度文件/消息”。
Rijndael 与 AES
AES 来自 Rijndael family,但标准只选定了固定 128-bit block size 的三个 key-size 版本。
所以不要把所有 Rijndael 参数组合都称为 AES。
Round Structure
AES 不是 Feistel network。
它采用 substitution-permutation network 风格的 round structure,核心包括:
- SubBytes;
- ShiftRows;
- MixColumns;
- AddRoundKey。
Key size 不同,round 数也不同:
- AES-128:10 rounds;
- AES-192:12 rounds;
- AES-256:14 rounds。
理解这些结构有助于学习算法,但工程中不应自行实现 production AES。
AES 不等于安全消息加密
如果只说:
“我们用了 AES,所以安全”
信息是不完整的。
还必须知道:
- mode;
- nonce / IV;
- authentication;
- key origin;
- key rotation;
- serialization;
- replay policy。
例如:
- AES-ECB 泄露重复 block pattern;
- AES-CBC 只提供 confidentiality,仍需独立 authentication;
- AES-GCM 提供 AEAD,但 nonce reuse 会严重破坏安全性。
AES-GCM
现代应用常见:
AES
- GCM mode
→ authenticated encryption
即同时保护:
- confidentiality;
- ciphertext integrity/authenticity;
并可认证不加密的 AAD。
完整模型见 AEAD。
Key Size
AES-128、192、256 都是标准化算法。
不能用:
AES-256 的数字更大,所以所有场景都必然“更好”
作为统一选型结论。
实际还需要考虑:
- security policy;
- performance;
- hardware acceleration;
- protocol requirement;
- key-management quality。
Hardware Acceleration
现代 CPU 常提供 AES acceleration,例如 AES-NI 或平台等价能力。
因此 AES 在很多服务端/桌面/移动环境都具有很高吞吐。
但具体性能仍取决于:
- mode;
- library;
- CPU;
- message size;
- parallelization。
Key Management 比算法名字更重要
安全系统还需要处理:
- key generation;
- secure storage;
- KMS/HSM;
- rotation;
- access control;
- destruction;
- key version。
一个硬编码在源码里的 AES-256 key,并不会因为 key length 是 256 bit 就变安全。
不要自己实现 AES
Production 应使用成熟 cryptographic library / platform API。
原因包括:
- side-channel;
- constant-time;
- padding/mode;
- nonce management;
- hardware backend;
- implementation validation。
当前标准状态
NIST FIPS 197 在 2023 年进行了编辑性更新,没有改变 AES 算法本身。
AES-128、AES-192、AES-256 仍是标准中的三个 AES 实例。
学习检查
- AES-128 的 128 表示 key size 还是 block size?
- AES-256 的 block size 是多少?
- 为什么 AES 本体不能直接回答“任意长度消息如何安全加密”?
- AES-CBC 与 AES-GCM 的安全目标有什么差异?
- 为什么 nonce/IV 管理属于 AES 系统安全的一部分?
- 为什么 AES-256 key 写死在源码里仍然是严重设计问题?
- production 为什么不应该手写 AES 实现?