Block cipher mode

分组密码与流密码

密码算法可以分为分组密码和流密码两种

  1. 分组密码(block cipher)是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组(block)。一个分组的比特数就称为分组长度(block lenght)。
  2. 流密码(stream cipher)是对数据流进行连续处理的一类密码算法。流密码中一般以1比特、8比特、或32比特等为单位进行加密和解密。

分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;相对地,流密码是对一串数据进行连续处理,因此需要保持内部状态。

模式

分组密码算法只能加密固定长度的分组,但是我们需要加密的明文长度可能会超过分组密码的分组长度,这时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就称为分组密码的模式(mode)。

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

ECB模式

在ECB模式中,将明文分组加密之后的结果直接成为密文分组。当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充(padding)。 ECB模式

1. ECB模式的特点

ECB模式是所有模式中最简单的一种。ECB的明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都会将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在风险的。

2. 对ECB模式的攻击

假如存在主动攻击者Mallory,它能够改变密文分组的顺序。当接收者对密文进行解密时,由于密文分组的顺序被改变了,因此相应的明文分组的顺序也会改变。也就是说,攻击者Mallory无需破译密码就能够操纵明文

CBC模式

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

初始化向量:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量,通常缩写为IV。

1. CBC模式的特点

  • 明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和2的值是相等的,密文分组1和2的值也不一定是相等的。这样ECB模式的缺陷在CBC模式中就不存在了。
  • 在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。
  • 在解密过程中,假设CBC模式加密的密文分组中有一个分组损坏。在这种情况下只要密文分组的长度没有发生变化,则解密时最多只会有2个分组受到数据损坏的影响。
  • 如果密文分组中有一些比特缺失了,即便只缺失了1比特,那么缺失比特的位置之后的密文分组也就全部无法解密了。

2. 对CBC模式的攻击

假设主动攻击者Mallory的目的是通过修改密文来操纵解密后的明文。如果Mallory能够对初始化向量中任意比特进行反转,则解密后得到的明文分组中相应的比特也会被反转。

3. CBC的应用实例

确保互联网安全的通信协议之一IPsec,就是使用CBC模式来确保通信机密性的。此外,CBC模式还被用于叫作Kerberos version 5的认证系统中。

CFB模式

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

1. CFB模式与流密码

CFB模式中由密码算法所生成的比特序列称为密钥流(key stream)。在CFB模式中,密码算法就相当于用来生成密钥流的伪随机数生成器,而初始化向量就相当于伪随机数生成器的“种子”。它的明文数据可以被逐比特加密,因此可以将CFB模式看做是一种使用分组密码来实现流密码的方式。

2. 对CFB模式的攻击

对CFB模式可以实施重放攻击(replay attack): 对CFB进行重放攻击

OFB模式

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

OFB模式中密码算法的输出是密码算法的前一个输出,也就是将输出反馈给密码算法。

CTR模式

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

CTR模式

1. 计数器的生成方法

2. CTR模式的特点

  • CTR模式的加密和解密使用了完全相同的结构,因此在程序实现上比较容易。这一特点和同为流密码的OFB模式是一样的。
  • CTR模式中可以以任意顺序对分组进行加密和解密,因此在加密和解密时需要用到的“计数器”的值可以由nonce和分组序号直接计算出来。能够以任意顺序处理分组,就以为着能够实现并行计算。在支持并行计算的系统中,CTR模式的速度是非常快的。

3. 错误与机密性

  • 假设CTR模式的密文分组中有一个比特被反转了,则解密后明文分组中仅有与之对应的比特会被反转,这一错误不会放大,这一弱点和OFB模式是相同的。
  • 在OFB模式中,如果对密钥流的一个分组进行加密后其结果碰巧和加密前是相同的,那么这一分组之后的密钥流就会变成同一值的不断反复。在CTR模式中就不存在这一问题。

分组密码模式比较

分组密码模式比较1分组密码模式比较1