分组密码的模式——ECB、CBC、CFB、OFB、CTR

分组密码的模式

  • 分组密码和流密码
  • ECB模式
  • CBC模式
  • CFB模式
  • OFB模式
  • CTR模式
  • 分组密码模式比较表

分组密码和流密码

分组密码是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组。一个分组的比特数就称为分组长度
流密码是对数据流进行连续处理的一类密码算法。流密码一般以1比特、8比特或32比特等为单位进行加密和解密。
分组密码算法只能加密固定长度的分组,但需要加密的明文长度可能会超过分组密码的分组长度,这就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。迭代的方法就被称为分组密码的模式
分组密码的模式主要有以下5种。

  • ECB模式:Electronic CodeBook mode(电子密码本模式)
  • CBC模式:Cipher Block Chaining mode(密码分组链接模式)
  • CFB模式:Cipher FeedBack mode(密文反馈模式)
  • OFB模式:Output FeedBack mode(输出反馈模式)
  • CTR模式:CounTeR mode(计数器模式)

明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组是指使用分组密码算法将明文分组加密之后所生成的密文。

ECB模式

在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。

ECB模式的加密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第1张图片

ECB模式的解密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第2张图片

ECB模式中,明文分组和密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终将被转换为相同的密文分组。
安全性低,易攻击。

CBC模式

CBC模式的密文分组像链条一样相互连接在一起。

在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。

CBC模式的加密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第3张图片

CBC模式的解密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第4张图片
初始化向量
当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量,通常缩写为IV。一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。

  • 假设CBC模式加密的密文分组中有一个分组损坏了,例如由于硬盘故障导致密文分组的值发生了改变等,这种情况下,只要密文分组的长度没有发生变化,则解密时最多只会有2个分组收到数据损坏的影响。

  • 假设CBC模式加密的密文分组中有一些比特缺失了,例如由于通信错误导致没有收到某些比特等,那么此时即使缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。

填充提示攻击是一种利用分组密码中的填充部分来进行攻击的方法。在分组密码中,当明文长度不为分组长度的整倍数时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充的数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的消息。这一攻击模式并不仅限于CBC模式,而是适用于所有需要进行分组填充的模式。

确保互联网安全的通信协议之一SSL/TLS,就是使用CBC模式来确保通信的机密性,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。

CFB模式

在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。

CFB模式的加密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第5张图片

CFB模式的解密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第6张图片
在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,但在CFB模式中,明文分组并没有通过密码算法来直接进行加密。在CFB模式中,明文分组和密文分组之间只有一个XOR。

在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量IV)来代替,与CBC模式相同。

OFB模式

在OFB模式中,密码算法的输出会反馈到密码算法的输入中。
OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,这点与CFB模式相似。

OFB模式的加密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第7张图片

OFB模式的解密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第8张图片
OFB模式和CFB模式的区别仅仅在于密码算法的输入。
CFB模式中,密码算法的输入是前一个密文分组,也就是将密文分组反馈到密码算法中,因此被称为“密文反馈模式”;
OFB模式中,密码算法的输入是密码算法的前一个输出,也就是将输出反馈给密码算法,因此被称为“输出反馈模式”。

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第9张图片

CTR模式

CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。最终的密文分组是通过将计数器加密的到的比特序列,与明文分组进行XOR而得到的。

CTR模式的加密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第10张图片

CTR模式的解密

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第11张图片
计数器的生成方法,前8个字节为nonce,这个值在每次加密时必须时不同的。后8个字节为分组序号,这个部分逐次累加。

分组密码的模式——ECB、CBC、CFB、OFB、CTR_第12张图片
OFB模式与CTR模式的对比

  • 两者都是流密码。
  • OFB模式是将加密的输出反馈到输入,CTR模式是将计数器的值用作输入。
    分组密码的模式——ECB、CBC、CFB、OFB、CTR_第13张图片
    CTR模式的特点:
    CTR模式的加密华为解密使用了完全相同的结构;可以以任意顺序对分组进行加密和解密;可以实现并行计算;在支持并行计算的系统中,CTR模式速度非常快。

分组密码模式比较表

模式 名称 优点 缺点 备注
ECB模式 Electronic CodeBook mode(电子密码本模式) 简单、快速、支持并行运算(加密、解密) 明文中的重复排列会反映在密文中;通过删除、替换密文分组可以对明文进行操作;对包含某些比特错误的密文进行解密时,对应的分组会出错;不能低于重放攻击。 不应使用
CBC模式 Cipher Block Chaining mode(密码分组链接模式) 明文的重复排列不会反映在密文中;支持并行计算(仅解密);能够解密任何密文分组 对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;加密不支持并行计算 CRYPTREC推荐;《实用密码学》推荐
CFB模式 Cipher FeedBack mode(密文反馈模式) 不需要填充(padding);支持并行计算(仅解密);能够解密任意密文分组 加密不支持并行计算;对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;不能低于重放攻击 CRYPTREC推荐
OFB模式 Output FeedBack mode(输出反馈模式) 不需要填充(padding);可实现进行加密、解密的准备;解密解密使用相同结构;对包含某些错误比特密文解密时,只有明文中相应的比特会出错 不支持并行计算;主动攻击者反转密文分组中的某些比特时,明文分组中相应的比特也会被反转 CRYPTREC推荐
CTR模式 CounTeR mode(计数器模式) 不需要填充(padding);可实现进行加密、解密的准备;解密解密使用相同结构;对包含某些错误比特密文解密时,只有明文中相应的比特会出错;支持并行计算(加密、解密) 主动攻击者反转密文分组中的某些比特时,明文分组中相应的比特也会被反转 CRYPTREC推荐;《实用密码学》推荐

你可能感兴趣的:(密码学,密码学)