分组密码操作模式

发布于 2021-08-05  76 次阅读





分组密码操作模式

在前两篇中,我们介绍了DES、3DES、AES是如何加密数据分组的。而实际中,人们通常需要加密的不只是8字节或16字节的单个明文分组,而是加密比如一封电子邮件或一个计算机文件。使用分组密码加密长明文的方式有很多种,这里我们介绍几种主流的操作模式

  1. 电子密码本模式(electronic code book mode, ECB)
  2. 密码分组连接模式(cipher block chaining mode, CBC)
  3. 密码反馈模式(cipher feedback mode, CFB)
  4. 输出反馈模式(output feedback mode, OFB)
  5. 计数器模式(Counter mode, CTR)

ECB模式

使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此ECB模式也称为电子密码本模式。

当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。

EBC模式很容易受到代换攻击,因为一旦知道了某个明文分组和密文分组的映射关系,就很容易能操纵密文分组序列。下面我们举个例子

  • 针对电子银行转账的代换攻击:

    假设某个银行的转账请求数据由以下三个分组构成

    • 分组1=付款人的银行账号
    • 分组2=收款人的银行账号
    • 分组3=转账金额。

    若这两个银行之间的加密密钥不会频繁变更,那么攻击者Oscar可以在窃取自己的转账数据后,修改别的转账记录,把其他记录中的分组2替换成自己的分组2。

这就是ECB的弱点,攻击者可以在不破译密文的情况下操作密文。

CBC模式

这种模式在之前的Crypto CTF中提到过了,这里就不多赘述。

可以注意到的是,CBC和EBC两种模式,只是提供了信息的加密,但是并不能保护消息的完整性。

OFB模式

OFB模式的思路非常简单,首先使用分组密码加密IV,得到密钥输出后,和一个明文分组异或,再把密钥输出继续加密,继续异或。

解密过程同样执行原来的加密操作,输出和密文分组异或即可。

OFB模式的一个优点就是,分组密码的计算和明文无关。

CFB模式

CFB模式和CBC模式有一些类似,但是在CFB模式中,明文分组并没有通过密码算法直接进行加密。在CFB中,明文分组和密文分组中,只有一个异或操作。

CTR模式

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

在128位的AES中,选择的IV要小于分组长度(比如96位),剩下的32位由计数器使用,并且计数器的CTR值初始化位0。加密过程中的每个分组,IV不变而计数器递增。计数器CTR可以是常用的整数计数器,也可以是稍微复杂的函数,比如最大长度的LFSR。

CRT模式的优点在于,可以让两个或者更多分组密码引擎同时并行工作,这种并行化的加密模式,在高速率传输中非常合适。

双重加密和中间相遇攻击

假设有一个密钥长度为K位的分组密码。在双重加密中,首先使用密钥加密密文x,染红将得到的结果使用第二个密钥进行加密。

最简单的蛮力攻击就是搜索这两个密钥所有可能的组合,即有效的密钥长度为2k,一次穷尽密钥搜索需要次加密。然而使用中间相遇攻击会使密钥空间大大减小。中间相遇攻击是一种分治法攻击,Oscar分别蛮力攻击两次加密,总复杂度是​​。

中间相遇攻击分为两个阶段。

  1. 表计算:给定一个明文x,将明文和所有可能的密钥K1加密,根据加密值进行排序,存放在一个表中。
  2. 密钥匹配:用所有可能的密钥K2对已知的密文C解密,每解密一次,就将结果和表中数值比对,如果相等,就将测试密钥K1、K2与一个新的明文密文对进行验证,若验证成功,就认定这两个密钥对是正确的密钥。

也就是说,中间相遇攻击使用两组已知明密文对就可以得出正确的密钥。