分组密码的工作模式

分组密码工作模式的应用背景
多次使用相同的密钥对多个分组加密,会引发许多安全问题。为了应对不同场合,因而需要开发出不同的工作模式来增强密码算法的安全性。

1、ECB(Electronic Code Book)

特别适合数据较少的情况,对于很长的信息或者具有特定结构的信息,其大量重复的信息或固定的字符开头将给密码分析者提供大量的已知明密文对。若明文不是完整的分组,ECB需要进行填充。

工作原理:

  1. 分组: 将明文消息分成固定大小的块(例如,AES 的块大小为 128 位)。
  2. 加密: 使用相同的密钥分别加密每个明文块。
  3. 拼接: 将加密后的密文块拼接在一起,形成最终的密文。

ECB 的主要缺点:

  • 模式泄露: 由于相同的明文块会被加密成相同的密文块,ECB 容易泄露明文的数据模式。如果明文中存在重复的块,这些重复模式会在密文中清晰可见。这对于图像数据尤其明显,因为相同的颜色区域会被加密成相同的密文块,从而暴露出图像的结构。
  • 容易被攻击: 由于每个块都是独立加密的,攻击者可以操纵密文块的顺序或替换密文块,而不会被检测到。例如,攻击者可以交换密文块的顺序,从而改变解密后明文的顺序。

2、CBC (Cipher Block Chaining)

由于加密算法的每次输入和本明文组没有固定的关系,因此就算有重复的明文组,加密后也看不出来了。为了配合算法的需要,有一个初始向量(IV)。与ECB一样有填充机制以保证完整的分组。

工作原理:

  1. 初始化向量 (IV): CBC 模式需要一个初始化向量 (IV),这是一个随机的、不可预测的比特序列,与第一个明文块进行异或操作。IV 的大小与块大小相同。IV 不需要保密,但必须是唯一的,并且对于每个加密操作都应该是不同的。
  2. 分组: 将明文消息分成固定大小的块。
  3. 加密: 第一个明文块与 IV 进行异或操作,然后使用密钥进行加密。后续的每个明文块都与前一个密文块进行异或操作,然后再使用密钥进行加密。
  4. 拼接: 将加密后的密文块拼接在一起,形成最终的密文。

CBC 的优点:

  • 隐藏模式: 通过将前一个密文块与当前明文块进行异或操作,CBC 模式有效地隐藏了明文中的模式。即使明文中存在重复的块,它们在密文中也会被加密成不同的值。
  • 更安全: 比 ECB 更安全,因为它可以防止模式泄露攻击。

3、CFB (Cipher Feedback)

和OFB,CTR模式一样,均可将分组密码当做流密码(实际是将分组大小任意缩减)使用。

工作原理如下:

  1. 初始化向量 (IV): 与 CBC 模式类似,CFB 也需要一个初始化向量 (IV)。IV 的大小与块大小相同,并且必须是唯一的,但不需要保密。
  2. 加密第一个块: IV 被加密,然后与第一个明文块进行异或操作,生成第一个密文块。
  3. 反馈: 第一个密文块的 s 位最左边的比特(s 是每次加密的比特数,小于等于块大小)被移位到 IV 的最左边,并将 IV 的 s 位最右边的比特丢弃。
  4. 加密后续块: 更新后的 IV 被加密,然后与下一个明文块进行异或操作,生成下一个密文块。此过程重复进行,直到所有明文块都被加密。

在CFB模式中,将明文拆解成s位(一般是8位,即1字节)长的分组,明文一方面参与到对称加密的过程当中以增加复杂度,另一方面运用A⊕B⊕B = A
这一异或运算的特点,完全过滤掉对称加密部分进行解密。实际上,该模式解密的原理与对称加密算法完全无关,
因而其解密也就用不上对称加密算法对应的解密算法。

以MSBs(X)表示X的最左边s位,可将其加密和解密描述成以下式子

1
2
3
C1 = P1⊕MSBs[E(K,IV)](加密)

P1 = C1⊕MSBs[E(K,IV)] = P1⊕MSBs[E(K,IV)]⊕MSBs[E(K,IV)] = P1(解密)

注意:实际上,该模式牺牲了运算能力来换取流密码的形式 ,其构造与流密码的典型构造并不一致。

CFB 的一些关键特性包括:

  • 自同步: 如果密文传输过程中出现比特错误或比特丢失,解密过程会在几个块后重新同步。
  • 可用于流密码: CFB 可以以小于块大小的单位进行加密和解密,使其适用于流式数据。
  • 无需填充: 由于 CFB 是流密码模式,因此不需要填充。

4、OFB (Output Feedback)

OFB的结构与CFB很相似,它用加密函数的输出填充移位寄存器,而CFB是用密文单元来填充移位寄存器。其他的不同是,OFB模式是对整个明文和密文分组进行运算,而不是仅对s位的子集运算,因而不至于浪费运算能力。

若明文的最后一个分组长度小于分组整长,无需填充,类似CFB做移位和丢弃操作即可。

OFB也有一个初始化向量,但是其对每一次加密运算都是唯一的,原因是下图虚线中的中间值Oi只依赖于K和初始向量,若初始向量不变极易被攻击。因而需要约定或传输好这个初始化向量。

实际上 OFB只有密钥和初始化向量参与了对称加密,其加密和解密描述成以下式子

1
2
3
Ci = Pi⊕E(K,Oi)(加密)

Pi = Ci⊕E(K,Oi)(解密)

OFB的一个优点是由于明文分组不参与对称加密过程,因而密文分组上的某些错误不会影响到其他密文分组的解密。

但是其缺点也正是这一特点带来的,若攻击者改变密文的一部分可能并不会被察觉,因而其消息完整性难以验证。

OFB具有典型的流密码的结构,对称加密方法相当于是根据密钥生成流密码的方法。

5、CTR (Counter)

计数器使用与明文分组规模相同的长度,计数器首先被初始化位某一数值,然后随着消息块的增加计数器加1。加密时,计数器加密后与明文分组异或得到密文分组,没有链接。解密时必须知道初始计数器的值。

若明文的最后一个分组长度小于分组整长,无需填充,类似CFB做移位和丢弃操作即可。

1
2
3
Ci = Pi ⊕ E(K, nonce || ctr) (加密)

Pi = Ci ⊕ E(K, nonce || ctr) (解密)

CRT模式的优点:

1、硬件效率高,同三种链接模式相比,CTR能够并行加密和解密。

2、软件效率高,可以充分利用其并行特性进行并行计算

3、由于加密解密过程不依赖明文和密文,因此可以做预处理以提高效率

4、可以随机访问某一明文或者密文分组进行部分加密和解密

6、用于面向分组的存储设备的 XTS-AES模式

这是一种新的工作模式,描述了一种对基于扇区的设备上的数据进行加密的方法。

加密存储的数据(也叫静止数据)与加密传输数据的要求有些不同。

单分组的加密和解密可以描述成

可逆证明:

1
2
3
C = CC⊕T = E(K1,PP)⊕T = E(K1,P⊕T)⊕T

P = PP⊕T = D(K1,CC)⊕T = D(K1,C⊕T)⊕T = D(K1,E(K1,P⊕T))⊕T = P⊕T⊕T = P

正是由于引入了微调参数等使得不同存储位置的相同明文加密成不同密文。

最后那个不满的分组处理

若最后一个分组不足长,则要对最后两个分组使用密文窃取技术,而不是填充技术来加密和解密。

与CTR模式相同的是,XTS-AES模式适合并行执行,不同的是,XTS-AES模式包含一个时变值(参数i)以及一个计数器(参数j)。