AES 是什么
AES 是目前使用最广泛的分组密码,支持 128 位、192 位与 256 位密钥,每次处理 128 位一块数据。它本身只解决「怎么把一块数据搅乱」,实际使用必须配合分组模式:GCM/CCM 属于 AEAD,加密与完整性校验一步完成,是现在的默认选择;CBC 属于遗留方案,需要额外做 MAC,否则会遭遇填充攻击。
基本信息
| 分组长度 | 128 位(固定) |
|---|---|
| 密钥长度 | 128 / 192 / 256 位 |
| 现代模式 | GCM、CCM(AEAD,加密同时认证) |
| 遗留模式 | CBC(需另配 HMAC)、CTR(无认证) |
| 硬件加速 | x86 的 AES-NI 指令集,性能提升明显 |
| 规范 | FIPS 197(AES)、NIST SP 800-38D(GCM) |
典型使用场景
- TLS 记录层数据加密:绝大多数 HTTPS 流量由 AES-GCM 保护
- 磁盘与文件加密:LUKS、BitLocker 的数据通道
- 数据库字段级加密:敏感字段落地前在本应用内加密
- VPN 载荷加密:部分 IPsec 实现默认使用 AES-GCM 组合
- 嵌入式与低功耗设备:AES-CCM 在无线协议中较常见
查看性能与硬件支持
查看性能与硬件支持
# 本机 AES-GCM 加解密性能
openssl speed -evp aes-128-gcm
openssl speed -evp aes-256-gcm
# 列出可用的 AES-GCM 套件
openssl ciphers -v 'ECDHE+AESGCM' | head
# 确认 CPU 是否具备硬件加速指令
grep -m1 -o -E 'aes|avx2' /proc/cpuinfo
# 查看系统是否默认启用 aesni 模块
lsmod | grep -i aes模式选择与理由
| 模式 | 特性 | 建议 |
|---|---|---|
| GCM | AEAD,加密与认证一体,AES-NI 下极快 | 默认首选 |
| CCM | AEAD,适合功耗与内存受限设备 | IoT 与嵌入式场景 |
| CBC | 只加密不认证,必须另配 HMAC | 仅用于兼容旧系统 |
| CTR | 流模式,无认证,nonce 复用即破坏 | 仅作为大方案里的组件 |
| ECB | 相同明文块产生相同密文,泄露结构 | 任何场景都不应使用 |
GCM 的 nonce 在同一密钥下绝不能重复,重复一次就可能让认证密钥被恢复。随机生成 nonce 时要评估碰撞概率;高吞吐或长时间运行的进程更稳妥的做法是用计数器管理,并在密钥更换时重置。
「AES-256 一定比 AES-128 更安全」在工程上意义有限:两者强度都远超现实攻击能力,性能差异在没有 AES-NI 的老设备或低功耗平台上反而更明显。选择密钥长度应结合合规要求与硬件能力。