分组密码工作模式的应用背景:多次使用相同的密钥对多个分组加密,会引发许多安全问题。为了应对不同场合,因而需要开发出不同的工作模式来增强密码算法的安全性。
1、ECB(Electronic Code Book)
特别适合数据较少的情况,对于很长的信息或者具有特定结构的信息,其大量重复的信息或固定的字符开头将给密码分析者提供大量的已知明密文对。若明文不是完整的分组,ECB需要进行填充。
2、CBC(Cipher Block Chaining)
由于加密算法的每次输入和本明文组没有固定的关系,因此就算有重复的明文组,加密后也看不出来了。为了配合算法的需要,有一个初始向量(IV)。与ECB一样有填充机制以保证完整的分组。
3、CFB(Cipher Feedback)
和OFB,CTR模式一样,均可将分组密码当做流密码(实际是将分组大小任意缩减)使用。
在CFB模式中,将明文拆解成s位(一般是8位,即1字节)长的分组,明文一方面参与到对称加密的过程当中以增加复杂度,另一方面运用A⊕B⊕B = A 这一异或运算的特点,完全过滤掉对称加密部分进行解密。实际上,该模式解密的原理与对称加密算法完全无关,因而其解密也就用不上对称加密算法对应的解密算法。
以MSBs(X)表示X的最左边s位,可将其加密和解密描述成以下式子
C1 = P1⊕MSBs[E(K,IV)]
P1 = C1⊕MSBs[E(K,IV)] = P1⊕MSBs[E(K,IV)]⊕MSBs[E(K,IV)] = P1
实际上,该模式牺牲了运算能力来换取流密码的形式,其构造与流密码的典型构造并不一致。
4、OFB(Output Feedback)
OFB的结构与CFB很相似,它用加密函数的输出填充移位寄存器,而CFB是用密文单元来填充移位寄存器。其他的不同是,OFB模式是对整个明文和密文分组进行运算,而不是仅对s位的子集运算,因而不至于浪费运算能力。
若明文的最后一个分组长度小于分组整长,无需填充,类似CFB做移位和丢弃操作即可。
OFB也有一个初始化向量,但是其对每一次加密运算都是唯一的,原因是下图虚线中的中间值Oi只依赖于K和初始向量,若初始向量不变极易被攻击。因而需要约定或传输好这个初始化向量。
实际上OFB只有密钥和初始化向量参与了对称加密,其加密和解密描述成以下式子
Ci = Pi⊕E(K,Oi)
Pi = Ci⊕E(K,Oi)
OFB的一个优点是由于明文分组不参与对称加密过程,因而密文分组上的某些错误不会影响到其他密文分组的解密。
但是其缺点也正是这一特点带来的,若攻击者改变密文的一部分可能并不会被察觉,因而其消息完整性难以验证。
OFB具有典型的流密码的结构,对称加密方法相当于是根据密钥生成流密码的方法。
4、CTR(Counter)
计数器使用与明文分组规模相同的长度,计数器首先被初始化位某一数值,然后随着消息块的增加计数器加1。加密时,计数器加密后与明文分组异或得到密文分组,没有链接。解密时必须知道初始计数器的值。
若明文的最后一个分组长度小于分组整长,无需填充,类似CFB做移位和丢弃操作即可。
CRT模式的优点:
1、硬件效率高,同三种链接模式相比,CTR能够并行加密和解密。
2、软件效率高,可以充分利用其并行特性进行并行计算
3、由于加密解密过程不依赖明文和密文,因此可以做预处理以提高效率
4、可以随机访问某一明文或者密文分组进行部分加密和解密
6、用于面向分组的存储设备的XTS-AES模式
这是一种新的工作模式,描述了一种对基于扇区的设备上的数据进行加密的方法。
加密存储的数据(也叫静止数据)与加密传输数据的要求有些不同。
单分组的加密和解密可以描述成
可逆证明:
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)。