# 分组密码工作模式笔记
# 电子密码本(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) |
# 关键说明:
- 统计特征暴露:ECB因相同明文生成相同密文,会暴露数据模式;其他模式通过IV或流密码特性隐藏统计特征。
- 篡改风险:ECB和CBC对篡改敏感,而OFB/CTR因密钥流独立,篡改影响局部。
- 性能:CTR和ECB支持并行加密/解密,适合高性能场景;CBC/CFB/OFB因依赖前序块,性能较低。
- 错误传播:CBC和CFB会传播错误,而OFB/CTR错误仅影响对应位。
- 填充需求:ECB/CBC需填充至完整块,CFB/OFB/CTR支持比特流处理,无需填充。
可根据具体需求(如安全性、性能、容错性)选择合适模式。例如,CTR在性能和安全性间平衡较好,而CBC仍是通用场景的经典选择。
# 安全建议
避免使用 ECB 模式
总是使用随机IV(CBC模式)
对称加密推荐AES-256(CBC或CTR模式)