AES 密钥长度怎么选
AES 支持 128、192、256 位三种密钥长度,对应 10、12、14 轮迭代与 11、13、15 组轮密钥。AES-128 与 AES-256 是实际主流:前者在 TLS 与常规数据加密中普遍使用,后者用于要求更高强度或长期保护的场景;AES-192 使用较少,多出现在兼容个别标准时。安全性差异远小于实现与密钥管理的差异。
基本信息
| 可选长度 | 128 / 192 / 256 位 |
|---|---|
| 轮数 | 10 / 12 / 14 轮,随密钥长度增加 |
| 轮密钥 | 密钥扩展产生 11 / 13 / 15 组 |
| 安全强度 | 分别约等于 128 / 192 / 256 位经典安全强度 |
| 硬件加速 | AES-NI 与 ARM 密码扩展支持全部三种长度 |
| 选型建议 | 服务器侧有加速时 128 与 256 差距很小,按合规要求选择 |
典型使用场景
- TLS 套件:TLS 1.3 提供 AES-128-GCM 与 AES-256-GCM 两个套件
- 磁盘加密:LUKS 与 BitLocker 常提供 AES-256-XTS 选项
- 文件与备份加密:归档工具普遍支持 128 与 256 两种选择
- 合规场景:等保与行业规范有时明确要求 256 位强度
- 性能敏感场景:高并发服务端在实测后可能选择 128 位以节省 CPU
生成与对比
生成与对比
# 对比两种密钥长度的吞吐(有 AES-NI 时差距通常很小)
openssl speed -elapsed -evp aes-128-cbc
openssl speed -elapsed -evp aes-256-cbc
# 用同一份明文分别加密,比较密文长度(长度相同,差别只在密钥)
openssl enc -aes-128-cbc -pbkdf2 -salt -in plain.txt -out a128.enc
openssl enc -aes-256-cbc -pbkdf2 -salt -in plain.txt -out a256.enc
ls -l a128.enc a256.enc三种长度对照
| 长度 | 轮数 | 轮密钥组数 | 常见用途 |
|---|---|---|---|
| AES-128 | 10 轮 | 11 组 | TLS 会话、常规数据加密 |
| AES-192 | 12 轮 | 13 组 | 较少使用,兼容个别标准要求 |
| AES-256 | 14 轮 | 15 组 | 长期数据保护、全盘加密、合规要求 |
有 AES-NI 指令集的 CPU 上,128 位与 256 位的性能差距通常很小;在无硬件加速的老设备或纯软件实现上差距会放大。是否值得上 256 位,取决于合规要求与实测吞吐,而不是「越长越好」的直觉。
换密钥长度不等于提升存量数据的安全等级:已有密文仍由原密钥长度保护,需要解密后用新长度重新加密并设计迁移窗口。只改加密命令对新数据生效,对历史数据无效。