首页/网络/协议速查/AES 与分组模式选择

AES 与分组模式选择

最广泛使用的分组密码:128/192/256 位密钥,配合 GCM/CCM(AEAD)是现代默认;CBC 属遗留,需小心 padding 攻击。

协议速查网络更新于 2026-10-13

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

模式选择与理由

模式特性建议
GCMAEAD,加密与认证一体,AES-NI 下极快默认首选
CCMAEAD,适合功耗与内存受限设备IoT 与嵌入式场景
CBC只加密不认证,必须另配 HMAC仅用于兼容旧系统
CTR流模式,无认证,nonce 复用即破坏仅作为大方案里的组件
ECB相同明文块产生相同密文,泄露结构任何场景都不应使用
GCM 的 nonce 在同一密钥下绝不能重复,重复一次就可能让认证密钥被恢复。随机生成 nonce 时要评估碰撞概率;高吞吐或长时间运行的进程更稳妥的做法是用计数器管理,并在密钥更换时重置。
「AES-256 一定比 AES-128 更安全」在工程上意义有限:两者强度都远超现实攻击能力,性能差异在没有 AES-NI 的老设备或低功耗平台上反而更明显。选择密钥长度应结合合规要求与硬件能力。

易错点

  • 用 ECB 模式加密业务数据:相同明文块产生相同密文,结构化数据会泄露模式信息
  • GCM 下重复使用 nonce,或把固定 IV 硬编码进代码,导致认证保护形同虚设
  • 把模式当成「可选参数」随手改:更换模式会让已有密文无法解密,必须同步迁移策略
  • 在没有 AES-NI 的老设备上强推 AES-256 高并发加解密,CPU 成为瓶颈却不自知,应先压测再定规格

数据来源与参考

  • NIST FIPS 197(AES)
  • NIST SP 800-38D(GCM)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌