4. 分组密码工作模式:ECB、CBC、CFB、OFB、CTR

分组密码(Block Cipher)每次只能加密固定长度的数据块(如 AES-128 的 16 字节)。为了加密任意长度的明文,并引入安全属性(如语义安全),需要定义分组密码的工作模式(Mode of Operation)。本章详细解析五种经典模式:ECB、CBC、CFB、OFB、CTR,并对比其优缺点与适用场景。

核心概念:工作模式决定了如何重复使用分组密码的加密/解密函数,以及如何处理数据块之间的关联性。选择错误的模式可能导致严重的安全漏洞。

4.1 ECB 模式(电子密码本模式)

原理:将明文分成独立的数据块,每块使用相同的密钥独立加密。相同的明文块产生相同的密文块。

ECB 模式加密流程 明文块 1 明文块 2 明文块 3 明文块 4 填充块 E(K, P1) E(K, P2) E(K, P3) E(K, P4) E(K, Pad) 密文块 1 密文块 2 密文块 3 密文块 4 密文块 5 注意:相同的明文块(如重复的图案)会产生相同的密文块,泄露数据模式。

优缺点与适用场景

维度说明
优点实现简单,支持并行加密/解密;错误不传播(一个密文块损坏只影响对应明文块)。
缺点不安全:相同明文块产生相同密文块,泄露数据模式;易受重放攻击和块重排攻击。
适用场景仅用于加密随机数据(如密钥本身);不推荐用于加密结构化数据、图像、协议消息。
安全警告:ECB 模式在现代密码学中已被视为不安全。切勿在需要保密性的实际系统中使用 ECB 模式加密多块数据。

4.2 CBC 模式(密码分组链接模式)

原理:每个明文块先与前一个密文块进行 XOR 运算,然后再加密。第一个块使用随机初始向量(IV)。解密时,先解密再与前一个密文块 XOR。

CBC 模式加密流程 IV(随机) 明文块 1 明文块 2 明文块 3 XOR XOR XOR E(K, ...) E(K, ...) E(K, ...) 密文块 1 密文块 2 密文块 3

优缺点与适用场景

维度说明
优点安全性高,相同明文块产生不同密文块(因 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(随机数)和计数器部分组成。

CTR 模式加密流程(并行化) CTR = 1 CTR = 2 CTR = 3 CTR = 4 E(K, CTR1) E(K, CTR2) E(K, CTR3) E(K, CTR4) XOR XOR XOR XOR 密文块 1 密文块 2 密文块 3 密文块 4 所有加密操作可并行执行,性能极高。

优缺点与适用场景

维度说明
优点加密/解密均可完全并行;支持随机访问(可独立解密任意块);无填充需求;实现简单。
缺点需要安全的 nonce/计数器管理;计数器重复会导致密钥流重用,彻底破坏安全性。
适用场景高性能加密(如磁盘加密、网络加密);TLS 1.3 默认使用 CTR 模式的变体(AES-GCM);需要随机访问的数据库加密。
现代推荐:CTR 模式是构建认证加密模式(如 GCM、CCM)的基础。在需要高吞吐量和并行性的场景中,CTR 模式是首选。

4.6 五种模式综合对比

模式类型并行加密并行解密错误传播填充需求安全性
ECB分组是是无是低(不安全)
CBC分组否是2 块是高
CFB流否是有限否高
OFB流否否无否高(IV 敏感)
CTR流是是无否高(nonce 敏感)

4.7 模式选择决策流程

  1. 是否需要并行加密? → 是:选择 CTR 或 ECB(但 ECB 不安全,故推荐 CTR);否:继续。
  2. 是否需要随机访问(解密任意块)? → 是:选择 CTR;否:继续。
  3. 是否需要自同步(容忍密文丢失)? → 是:选择 CFB;否:继续。
  4. 是否需要错误不传播? → 是:选择 OFB 或 CTR;否:选择 CBC。
  5. 是否需要认证加密(保密性+完整性)? → 是:使用 GCM(基于 CTR)或 CCM(基于 CBC-MAC + CTR)。
最佳实践:在现代密码学应用中,推荐优先使用 CTR 模式(配合认证标签,如 GCM)或 CBC 模式(配合 HMAC 进行认证)。ECB 模式应被彻底弃用。OFB 和 CFB 模式仅在特定流式场景中使用。