一、引言
上一篇文章讨论了 DES 算法,现在我们有了“给定 64-bit 的明文、64-bit 的密钥,输出 64-bit 的密文”的加密手段。这离实际应用还有一点点距离,因为要传递的信息当然不止 64 位。
要用 DES 加密一条信息,一般先把信息填充到 64 的倍数,于是就可以分成许多组,每组 8 个字节。利用密钥对每一组进行加密,最终的结果拼接起来,这就是 ECB(Electronic Code Book,电子密码本) 模式。
然而,简单的拼接会暴露一些统计信息,不够安全,还有其他的一些工作模式,能够对每块加密的结果进行再一次混淆。
二、块加密的工作模式
1. ECB(电子密码本)
ECB 是最朴素的工作模式。把明文每 8 位一组进行加密,得到的密文直接拼接。
ECB 模式是最简单的模式。由于每个块都是独立加密的,所以它对并行加密解密很友好。此外,传输过程中出现的偶然错误,不会扩大到影响整个数据。但正因为每个块都独立加密,重复的块会被加密成重复的明文。这会导致泄漏明文的一些统计信息。
2. CBC(密码块链接)
CBC(Cipher-block chaining,密码块链接)模式需要一个初始向量 IV。
加密过程中,先把 IV 与第一块明文混合,再交由 DES 加密;对于下一块,其 IV 采用这一块的加密结果。
CBC 由于每一个块在加密的时候,都需要把明文与上一个块的加密结果进行异或,故加密是串行的。不过解密可以并行,因为解密时已知每一个密文块,直接拿来异或即可。
显然,由于明文每次加密开始的时候,都得异或上前一块的密文,故对任何明文的改动,都将会影响到此后的所有块。CBC 克服了 ECB “相同明文块变成相同密文块” 的缺点。
3. CFB(密文反馈)
CFB(Cipher feedback,密文反馈)是一种接近于 流密码 的工作模式。它不用 DES 加密明文,而是把 DES 作为伪随机数生成器,把 IV 作为种子。这样就可以从 IV 和指定的 key 生成字节流,然后把明文与这个字节流异或。
CFB 模式中,每次加密明文的一个字节。故 CFB 模式不需要添加Padding。工作流程如下:
加密过程中,维护了一个寄存器 reg ,长度为 64-bit,初始值为 IV。每次对明文的一个字节进行加密时,把这个 reg 交给 DES 加密,生成一个 64-bit 的结果 K;然后把 K 的高 8-bit 与明文的这一个字节异或,得到了一个字节的密文。接下来,把这个 8-bit 密文补充到移位寄存器 reg 的最右边,抛弃 reg 此前的高 8 位。
随着加密的进行, reg 不断地变化,每次都往右边加 8 位(也就是上一轮得到的密文)、抛弃掉最左边的 8 位。
CFB 模式的加密(左)和解密(右):
而解密过程也很简单:既然 CFB 模式是流密码,那么解密的时候,只要得到与加密过程一样的密钥流,拿去与密文异或就能得到明文了。文章来源:https://www.toymoban.com/news/detail-569418.html
总结
我们讨论了 ECB, CBC, CFB 三种工作模式,其中:文章来源地址https://www.toymoban.com/news/detail-569418.html
- ECB 模式是不安全的模式。
- 对明文进行改动,CBC、CFB 模式都会使得后序所有块错误。
- CBC 模式,如果密文传输过程中有错误,则后面所有密文都出错。
- CFB 模式,如果密文传输过程中出错,只会影响到之后几个块(因为移位寄存器的存在,在 8 个块之后这个错误就会离开 reg ,此后的数据都会正常)。
- ECB、CBC 模式需要填充。填充常用 PKCS#5 规则。CFB 模式是类似于流密码的逐字节加密,无需填充。
参考链接
- 块加密的工作模式
到了这里,关于【密码学】块加密(分组加密)的工作模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!