【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析

1. 什么是分组密码的模式

  对称加密算法DES、3DES、AES等都属于分组密码,它们只能加密固定长度的明文,然而在实际生活中,人们通常需要加密的文件(数据)并不是8字节或者16字节的单个明文分组,而是需要加密一个较大的文件或者电子邮件等,对于这种需要加密任意长度的明文,就需要对分组密码进行迭代,分组密码的迭代方式就称为分组密码的“模式”。
  分组密码的模式有很多种,主要分为如下几类:

模式 备注
ECB Electronic Code Book mode(电子密码本模式)
CBC Cipher Block Chaining mode(分组密码链接模式)
CFB Cipher Feedback mode(密码反馈模式)
OFB Output Feedback mode(输出反馈模式)
CTR Counter mode(计数器模式)
XTS XEX(XOR Encrypt XOR) Tweakable Block Cipher with Ciphertext Stealing

  明文分组:是指分组加密算法中作为加密对象的明文,明文分组的长度与分组加密算法的分组长度是一致的(比如AES的分组长度为128bit,对应的明文分组长度也是128bit)。
  密文分组:是指使用分组加密算法将明文分组加密后生成的密文,密文分组的长度与分组加密算法的分组长度也是一致的。

2. ECB模式

2.1 什么是ECB模式

  ECB(电子密码本)模式是一种最直接,最简单的消息加密方式。在ECB模式中,明文加密之后将直接得到密文,同样的密文解密之后,也直接得到明文。
特别注意:明文长度必须是“分组长度”的整数倍,非整数倍的,需在加密之前将其填充为“整数倍”
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第1张图片

2.2 特点

  • 优点)加密方与解密方之间的分组同步不是必须的,即由于传输问题导致的接收方没有收到所有的加密分组时,不影响已经接收到的分组;
  • 优点)由于各分组之间没有关联,所以ECB的操作可以并行化;
  • 缺点)相同的明文分组,永远加密成相同的密文分组,导致加密过程很容易遭到攻击或破解。

3. CBC模式

3.1 什么是CBC模式

  CBC模式的全称是Cipher Block Chaining模式(分组密码l链接模式),它的工作机制主要基于两种思想:
  1)所有分组的加密都链接在一起,使得某一分组的密文不再仅依赖于该分组的明文,而是依赖于该分组之前(包含该分组)的所有明文分组;
  2)加密过程使用了初始化向量(IV)进行了随机化。
  在CBC模式中,首先将明文分组与上一个分组的密文进行“异或”运算,然后再进行加密操作。
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第2张图片

3.2 特点

  • 优点)每一次加密都需要前一个密文块参与,明文中微小的改变都会使后续所有密文改变;
  • 优点)无法从密文看出明文的规律。安全性得以提高。目前,CBC是最为常用的工作模式;
  • 优点)改变某一个密文块,只会影响当前和下一个解密出的明文,不会影响后续的解密过程。
  • 缺点)由于每次加密都需要前一个密文参与,所以无法并行加密,只能串行加密,加密速度受到限制;解密是可以并行进行的

4. CFB模式

4.1 什么是CFB模式

  CFB模式的全称是Cipher FeedBack(密文反馈模式)。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓的反馈就是返回到输入端的意思。
  与ECB、CBC模式不同的是CFB加密的并不是明文,而是加密“上一分组的密文”,加密完“上一分组密文”之后在与当前分组的明文进行“异或”得到当前分组的密文。
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第3张图片

4.2 特点

  1)CFB模式的工作模式与一次性密码本的工作模式非常类似,一次性密码本是通过将“明文”与“随机比特序列”进行XOR运算来生成密文的,而CFB模式则是通过“明文分组”与“密码算法”的输出进行XOR运算来生成“密文分组”的。在通过XOR进行加密的这一点上,两者是非常相似的。
  2)在CFB模式中,密码算法的输出相当于一次性密码本的随机比特序列,但是由于密码算法的输出是计算得到的,并不是真正的随机数,因此CFB模式并不能像一次性密码本那样具有理论上的不可破译性。
  3)CFB模式解密时,需要注意的是分组密码算法依然执行加密操作,因为秘钥流是通过加密操作得到的。
  4)CFB模式不要求待加密的明文必须是“明文分组长度”的整数倍。

5. OFB模式

5.1 什么是OFB模式

  OFB模式的全称是Output-FeedBack模式(输出反馈模式)。在OFB模式中密码算法的输出会反馈到密码算法的输入中。
  OFB模式并不是通过密码算法对明文直接进行加密的,而是将“明文分组”与“密码算法的输出”进行XOR运算产生“密文分组”的。在这一点上,OFB模式与CFB模式是非常相似的。
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第4张图片
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第5张图片

5.2 OFB与CFB模式对比

  OFB模式与CFB模式的区别仅在于密码算法的输入不一样:CFB模式中,密码算法的输入是上一个密文分组;OFB模式中,密码算法的输入是密码算法的前一个输出。
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第6张图片

6. CTR模式

6.1 什么是CTR模式

  CTR模式的全称是CounTeR模式(计数器模式)。CTR模式是一种通过逐次累加的计数器进行加密来生成密码流的流密码。
  CTR模式中,每一个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成秘钥流,最终的密文分组是通过计数器加密得到的比特序列与明文进行XOR运算得到的。
  CTR模式无IV参与运算
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第7张图片

6.2 CTR模式与OFB模式对比

  1)两者都属于流密码
  2)OFB是将输出反馈到输入,CTR则是将计数器的值作为输入
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第8张图片

6.3 特点

  1) CTR模式的加密和解密使用相同的结构;
  2)因为解密及解密用到的“计数器”是通过nonce的值及分组序号直接计算出来的,所以CTR模式中可以以任意的顺序对分组进行加密或者解密;
  3)因为加解密无先后顺序之分,所以CTR模式支持并行计算

7. XTS模式

7.1 什么是XTS模式

  XTS的全称为XEX(XOR Encrypt XOR) Tweakable Block Cipher with Ciphertext Stealing,它是一种可调整的分组加密算法。应用于AES算法。
  1)有2个KEY,其中KEY1用于加密明文,KEY2用于加密tweak值。
  2)aj表示的“有限域”算法。
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第9张图片
备注:上图引用于:https://www.zhihu.com/question/26452995,如有侵权,请联系我删除,谢谢。

7.2 特点

  1)有两个密钥,其中一个用于执行AES分组加密,另一个用于加密调整值(tweak), 这种加密调整借助有限域和异或运算,使得每次即时是相同的分组也不会得到相同的密文,确保了安全性。
  2) XTS 相比 ECB、CBC解决的两个问题是:相同的数据块得到的密文不可以相同(ECB);不同数据块可以独立加密和解密(CBC)。

8. 总结

  各种模式操作对象的对比:

模式 KEY个数 IV 加密对象 并行处理
ECB 1 明文分组 支持(加密、解密)
CBC 1 明文分组与上一个密文分组(或初始化向量IV)“异或”后的值 仅解密支持
CFB 1 密文分组(或I初始化向量IV) 仅解密支持
OFB 1 IV值,IV加密的输出作为下一个加密的输入,以此类推 不支持
CTR 1 计数器CTR值 支持(加密、解密)
XTS 2 明文及tweak值 支持(加密、解密)

  各种模式优缺点对比:
【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析_第10张图片
参考文献:《图解密码技术(第三版)》

各种算法的链接地址如下:
【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9…)

你可能感兴趣的:(密码学,安全,算法,加密解密,密码学,openssl)