模式差异决定适用场景
同一个分组算法换一种工作模式,属性差别很大:是否需要 IV 或 nonce、能否并行、是否自带认证,这些差异直接决定适用场景与风险边界。选型时先问两个问题:需不需要认证(防篡改),以及数据形态是流式、随机访问还是固定块设备。回答完这两个问题,可选范围通常就只剩一两个了。
基本信息
| ECB | 无 IV、无认证、加密可并行,不推荐用于新系统 |
|---|---|
| CBC | 随机 IV、无认证、解密可并行,需配合 HMAC |
| CTR | 唯一计数器、无认证、可并行且支持随机访问 |
| GCM | 96 位唯一 nonce、自带认证、可并行 |
| CCM | 7-13 字节 nonce、自带认证,无线与物联网场景 |
| XTS | 以扇区号作 tweak、不提供认证,用于块设备 |
常见模式对比
| 模式 | IV / nonce | 自带认证 | 并行能力 | 典型用途 |
|---|---|---|---|---|
| ECB | 无 | 无 | 加密可并行 | 不推荐用于新系统 |
| CBC | 随机 IV | 无 | 解密可并行 | 遗留协议,需配合 HMAC |
| CTR | 唯一计数器 | 无 | 可并行、随机访问 | 存储与协议数据面 |
| GCM | 96 位唯一 | 有 | 可并行 | TLS、IPsec、存储 |
| CCM | 7-13 字节 | 有 | 认证可流水 | 无线、物联网 |
| XTS | 扇区号 tweak | 无 | 扇区级并行 | 全盘与块设备加密 |
典型使用场景
- 网络协议数据面:优先 GCM 或 ChaCha20-Poly1305
- 全盘加密:选择 XTS 并接受其不提供完整性保护的取舍
- 受限设备:选用 CCM 或 ChaCha20-Poly1305
- 遗留系统维护:CBC 必须额外配 HMAC,不能只加密
- 存储加密:CTR 支持随机访问,但完整性要自行校验
选型速记
选型速记
要认证 + 通用 → GCM / ChaCha20-Poly1305 / SM4-GCM
磁盘块设备 → XTS
受限设备 → CCM 或 ChaCha20-Poly1305
仅流式且能接受手工 MAC → CTR(必须配合 HMAC 与唯一计数器)任何「无认证」模式用于网络数据都必须额外校验完整性,否则机密性可能被篡改攻击瓦解。
唯一性是调用方的责任:GCM 的 nonce 与 CTR 的计数器都要由实现保证不重复,库不会替你检查,重复使用会直接造成密钥流复用。
换模式等于换安全假设:从 CBC 切到 CTR 时若沿用可预测 IV 的旧习惯,会立刻产生漏洞,迁移前要重新审视随机源与计数逻辑。