# 分组密码工作模式笔记

# 电子密码本(ECB)

最简单的加密模式即为电子密码本(Electronic codebook,ECB)模式。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。

缺点在于同样的明文块会被加密成相同的密文块;因此,它不能很好的隐藏数据模式,会暴露数据的统计特征。

ECB模式也会导致使用它的协议不能提供数据完整性保护,易受到重放攻击的影响,因为每个块是以完全相同的方式解密的。

# 密码块链接(CBC)

1976年,IBM发明了密码分组链接(CBC,Cipher-block chaining)模式。在CBC模式中,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。

CBC 是最为常用的工作模式。它的主要缺点在于加密过程是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍。

# 密文反馈(CFB)

密文反馈(CFB,Cipher feedback)模式类似于CBC,可以将块密码变为自同步的流密码;工作过程亦非常相似,CFB的解密过程几乎就是颠倒的CBC的加密过程

与CBC相似,明文的改变会影响接下来所有的密文,因此加密过程不能并行化;而同样的,与CBC类似,解密过程是可以并行化的。

CFB拥有一些CBC所不具备的特性,这些特性与OFB和CTR的流模式相似:只需要使用块密码进行加密操作,且消息无需进行填充

# 输出反馈(OFB)

输出反馈模式(Output feedback, OFB)可以将块密码变成同步的流密码。它产生密钥流的块,然后将其与明文块进行异或,得到密文。与其它流密码一样,密文中一个位的翻转会使明文中同样位置的位也产生翻转。这种特性使得许多错误校正码,例如奇偶校验位,即使在加密前计算,而在加密后进行校验也可以得出正确结果。

每个使用OFB的输出块与其前面所有的输出块相关,因此不能并行化处理。然而,由于明文和密文只在最终的异或过程中使用,因此可以事先对IV进行加密,最后并行的将明文或密文进行并行的异或处理。

可以利用输入全0的CBC模式产生OFB模式的密钥流。这种方法十分实用,因为可以利用快速的CBC硬件实现来加速OFB模式的加密过程。

# 计数器模式(CTR)

与OFB相似,CTR将块密码变为流密码。它通过递增一个加密计数器以产生连续的密钥流,其中,计数器可以是任意保证长时间不产生重复输出的函数,但使用一个普通的计数器是最简单和最常见的做法。

CTR模式的特征类似于OFB,但它允许在解密时进行随机存取。由于加密和解密过程均可以进行并行处理,CTR适合运用于多处理器的硬件上。

# 对比

以下是几种常见分组密码工作模式(ECB、CBC、CFB、OFB、CTR)在不同维度的对比表格:

维度 ECB CBC CFB OFB CTR
统计特征暴露 严重暴露(相同明文块对应相同密文块) 隐藏(通过IV和链式依赖) 隐藏(流密码特性) 隐藏(流密码特性) 隐藏(流密码特性)
是否容易篡改 容易(直接修改密文块) 中等(错误传播到后续块) 中等(部分篡改可能) 低(篡改影响有限) ✅️低(篡改影响有限)
加密性能 ✅️高(可并行) 低(串行处理) 低(串行处理) 低(串行生成密钥流) ✅️高(可并行)
解密性能 ✅️高(可并行) ✅️高(可并行解密) 低(串行处理) 低(需同步密钥流) ✅️高(可并行)
错误传播 无(仅影响单个块) 影响当前及后续块(块错误) 影响当前及后续部分数据(比特错误) 无(密钥流独立) 无(密钥流独立)
是否需要填充 否(支持比特级处理) 否(支持比特级处理) 否(支持比特级处理)
初始化向量(IV) 不需要 需要(必须唯一且不可预测) 需要(必须唯一) 需要(必须唯一) 需要(计数器需唯一)
典型应用场景 简单数据加密(如单个密钥加密) ✅️通用加密(文件、通信) 实时数据流(如音频/视频) 高延迟或易错环境(如卫星) ✅️高性能需求(如SSH、IPSec)

# 关键说明:

  1. 统计特征暴露:ECB因相同明文生成相同密文,会暴露数据模式;其他模式通过IV或流密码特性隐藏统计特征。
  2. 篡改风险:ECB和CBC对篡改敏感,而OFB/CTR因密钥流独立,篡改影响局部。
  3. 性能:CTR和ECB支持并行加密/解密,适合高性能场景;CBC/CFB/OFB因依赖前序块,性能较低。
  4. 错误传播:CBC和CFB会传播错误,而OFB/CTR错误仅影响对应位。
  5. 填充需求:ECB/CBC需填充至完整块,CFB/OFB/CTR支持比特流处理,无需填充。

可根据具体需求(如安全性、性能、容错性)选择合适模式。例如,CTR在性能和安全性间平衡较好,而CBC仍是通用场景的经典选择。

# 安全建议

避免使用 ECB 模式

总是使用随机IV(CBC模式)

对称加密推荐AES-256(CBC或CTR模式)