模式(Mode)——分组迭代方式
分组密码(Block Cipher)只能加密固定长度的明文,而要对任意长度的明文进行操作则需要对各组进行迭代。分组密码的迭代方法则称为分组密码的“模式”。
ECB(Electronic CodeBook Mode,电子密码本模式)
“明文” --加密–> “密文”
在ECB中,明文直接加密为密文。当最后一个分组内容小于分组长度时,需要进行填充(padding)。
特点:相同的明文会被转换为相同的密文(攻击点)。
CBC(Cipher Block Chaining Mode,密码分组链接模式)
“前一密文分组” XOR “明文” --加密–> “密文”
在CBC中,首先明文一个分组与一个密文分组进行XOR运算,然后在进行加密。
特点:
- 弥补了ECB的缺陷,同一明文由于前一密文不同而不同。(因为先与前一密文异或)
- 无法单独加密一个分组。(因为需要前一个密文分组)
- 解密时一个分组损坏(但分组长度不变),最多只影响2个分组。(如密文2坏,则明文2、3也坏)
- 解密时若一个分组中比特缺失(即,长度改变),则随后所有分组数据改变,导致随后所有分组无法正确解密
CFB(Cipher FeedBack Mode,密文反馈模式)
(加密前一密文分组)“密钥流” XOR “明文” --> “密文”
在CFB中,前一个密文分组反馈到加密算法的输入端,然后再与明文分组进行XOR。
与一次性密码本类似(“明文” XOR “随机比特序列”),因为“密码算法的输出”非真正随机,所以无法做到不可破译。
在该模式下,明文数据可被逐比特加密,所以CFB可被看作是一种使用分组密码来实现流密码的方式。
OFB(Output FeedBack Mode,输出反馈模式)
密码算法的输出反馈到密码算法的输入中。
“明文分组” XOR “密码算法的输出” --> “密文分组”
CFB与OFB区别
CTR(CounTeR Mode, 计数器模式)
“计数器密钥流” XOR “明文分组” --> 密文分组
在CTR模式中,每个分组对应一个逐次累加的计数器,对计数器加密生成密钥流。
特点:
- CTR模式中可以以任意顺序对分组进行加密和解密,因为“计数器”的值可以由nonce(计数器=nonce+序号)和分组序号直接计算出来。(OFB不具备该性质)
- 可实现并行计算。
- 某一分组发送错误,只影响对应分组,不会放大。
- OFB中加密后的密钥流可能与加密前相同,导致随后都相同,而CTR不存在该问题。(因为每个分组计数值不一样)