4. 分组密码工作模式:ECB、CBC、CFB、OFB、CTR
分组密码(Block Cipher)每次只能加密固定长度的数据块(如 AES-128 的 16 字节)。为了加密任意长度的明文,并引入安全属性(如语义安全),需要定义分组密码的工作模式(Mode of Operation)。本章详细解析五种经典模式:ECB、CBC、CFB、OFB、CTR,并对比其优缺点与适用场景。
核心概念:工作模式决定了如何重复使用分组密码的加密/解密函数,以及如何处理数据块之间的关联性。选择错误的模式可能导致严重的安全漏洞。
4.1 ECB 模式(电子密码本模式)
原理:将明文分成独立的数据块,每块使用相同的密钥独立加密。相同的明文块产生相同的密文块。
优缺点与适用场景
| 维度 | 说明 |
|---|---|
| 优点 | 实现简单,支持并行加密/解密;错误不传播(一个密文块损坏只影响对应明文块)。 |
| 缺点 | 不安全:相同明文块产生相同密文块,泄露数据模式;易受重放攻击和块重排攻击。 |
| 适用场景 | 仅用于加密随机数据(如密钥本身);不推荐用于加密结构化数据、图像、协议消息。 |
安全警告:ECB 模式在现代密码学中已被视为不安全。切勿在需要保密性的实际系统中使用 ECB 模式加密多块数据。
4.2 CBC 模式(密码分组链接模式)
原理:每个明文块先与前一个密文块进行 XOR 运算,然后再加密。第一个块使用随机初始向量(IV)。解密时,先解密再与前一个密文块 XOR。
优缺点与适用场景
| 维度 | 说明 |
|---|---|
| 优点 | 安全性高,相同明文块产生不同密文块(因 IV 和链接);广泛用于 TLS 1.2 及之前版本。 |
| 缺点 | 加密不能并行(依赖前一个密文块);解密可并行;错误传播:一个密文块损坏影响当前块和下一块。 |
| 适用场景 | 文件加密、数据库加密、TLS 记录协议(历史版本);需要高安全性的通用场景。 |
实践提示:IV 必须为随机且不可预测(通常使用安全随机数生成器)。IV 不需要保密,但绝不能重复使用同一 IV。
4.3 CFB 模式(密码反馈模式)
原理:将分组密码转换为自同步的流密码。加密时,前一个密文块被加密后与当前明文块 XOR 产生当前密文块。解密时,前一个密文块被加密后与当前密文块 XOR 恢复明文。
优缺点与适用场景
| 维度 | 说明 |
|---|---|
| 优点 | 不需要填充(适合流式数据);解密可并行;错误传播有限(仅影响后续若干块)。 |
| 缺点 | 加密不能并行;对密文损坏敏感(损坏位影响后续块直到移位寄存器清空)。 |
| 适用场景 | 流式加密(如实时语音/视频)、需要自同步的场景(丢失部分密文后能恢复同步)。 |
4.4 OFB 模式(输出反馈模式)
原理:将分组密码转换为同步流密码。通过反复加密 IV 生成密钥流(keystream),然后将密钥流与明文 XOR 产生密文。解密时使用相同的密钥流与密文 XOR。
优缺点与适用场景
| 维度 | 说明 |
|---|---|
| 优点 | 密钥流可预计算(加密/解密前生成);错误不传播(密文损坏只影响对应位);无填充需求。 |
| 缺点 | 不能并行(密钥流生成是串行的);若 IV 重复,密钥流相同,导致安全性完全丧失。 |
| 适用场景 | 噪声信道(错误不传播特性);需要预计算密钥流的场景;卫星通信。 |
安全警告:OFB 模式对 IV 重用极其敏感。一旦 IV 重复,攻击者可通过 XOR 两个密文直接恢复明文差异。
4.5 CTR 模式(计数器模式)
原理:将分组密码转换为同步流密码。使用递增的计数器值(counter)作为输入,加密后与明文 XOR 产生密文。计数器通常由 nonce(随机数)和计数器部分组成。
优缺点与适用场景
| 维度 | 说明 |
|---|---|
| 优点 | 加密/解密均可完全并行;支持随机访问(可独立解密任意块);无填充需求;实现简单。 |
| 缺点 | 需要安全的 nonce/计数器管理;计数器重复会导致密钥流重用,彻底破坏安全性。 |
| 适用场景 | 高性能加密(如磁盘加密、网络加密);TLS 1.3 默认使用 CTR 模式的变体(AES-GCM);需要随机访问的数据库加密。 |
现代推荐:CTR 模式是构建认证加密模式(如 GCM、CCM)的基础。在需要高吞吐量和并行性的场景中,CTR 模式是首选。
4.6 五种模式综合对比
| 模式 | 类型 | 并行加密 | 并行解密 | 错误传播 | 填充需求 | 安全性 |
|---|---|---|---|---|---|---|
| ECB | 分组 | 是 | 是 | 无 | 是 | 低(不安全) |
| CBC | 分组 | 否 | 是 | 2 块 | 是 | 高 |
| CFB | 流 | 否 | 是 | 有限 | 否 | 高 |
| OFB | 流 | 否 | 否 | 无 | 否 | 高(IV 敏感) |
| CTR | 流 | 是 | 是 | 无 | 否 | 高(nonce 敏感) |
4.7 模式选择决策流程
- 是否需要并行加密? → 是:选择 CTR 或 ECB(但 ECB 不安全,故推荐 CTR);否:继续。
- 是否需要随机访问(解密任意块)? → 是:选择 CTR;否:继续。
- 是否需要自同步(容忍密文丢失)? → 是:选择 CFB;否:继续。
- 是否需要错误不传播? → 是:选择 OFB 或 CTR;否:选择 CBC。
- 是否需要认证加密(保密性+完整性)? → 是:使用 GCM(基于 CTR)或 CCM(基于 CBC-MAC + CTR)。
最佳实践:在现代密码学应用中,推荐优先使用 CTR 模式(配合认证标签,如 GCM)或 CBC 模式(配合 HMAC 进行认证)。ECB 模式应被彻底弃用。OFB 和 CFB 模式仅在特定流式场景中使用。