对称密钥算法的数据加密模式
对称密钥算法的数据加密方式分为两类:分组加密和序列加密。
分组加密模式又称为块加密,是将要处理的数据分成固定的长度,然后在这固定长度的数据上使用密码算法进行计算。
序列加密模式又称为流加密方式,是对要处理的数据按位(或字节)逐个进行加密处理。
加密模式的选择需要考虑安全性、容错性、效率和实时性。
一、分组加密模式
常用的分组密码模式有四种,分别是:电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)。
电子密码本模式(ECB)
加密方式
将加密的数据分为若干组,每组的大小跟加密密钥的长度相同,然后每组都用相同的密钥进行加密。
图中P0、P1是明文分组,C0、C1是相应的密文分组。
特点
- 每次加密的数据长度相同。
- 各个分组相互独立,可以并行加密和解密。
- 相同的明文使用相同的密钥总是产生相同的密文。
- 一个位的错误只对所在的明文块产生影响,但是增加或删除一个位会导致其后整个密文序列没有版本正确解密,这称为同步错误。
缺点
容易受到分组替换攻击。
加密分组链接模式(CBC)
加密方式
加密分组链接模式首先也是将明文分成固定长度的分组,然后将前面一个加密分组输出的密文与下一个要加密的明文分组进行异或操作计算,将计算结果再用密钥进行加密得到密文。第一明文分组加密的时候,因位前面没有加密的密文,所以需要一个初始向量(IV)。
图中P0、P1是明文分组,C0、C1是相应的密文分组,IV是初始向量。
使用数学公式可以表示为:
特点
- 每次加密的数据长度固定。
- 当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文。
- 链接操作是得密文分组要依赖当前和以前处理过的明文分组,密文分组顺序不能进行重新排列,也不能进行并行操作。
- 可以使用不同的初始化向量来避免相同的明文产生相同的密文,能一定程度上抵抗字典攻击等密文分析。
- 一位发生错误后,会对当前及后一个分组的明文产生错误错误扩散,但是错误分组的第二个分组之后的分组不会受到这个错误的影响,这称为加密分组链接模式的自恢复功能。增加或删除一个位会导致其后整个密文序列没有办法正确解密。
- 不能实时解密,必须等到8个字节都接收到之后才能开始解密,否则得不到正确的结果。
缺点
CBC虽然对抵抗分组重复攻击和分组替换攻击有效,但是很容易受到干扰性攻击,利用CBC和ECB同样不能恢复同步错误,攻击者可以再密文后附加一些信息,造成安全问题。
错误扩散。
必须等整个分组的数据接收完之后才能进行解密,不能实时解密,不适合再网络应用中使用。
加密反馈模式(CFB)
加密方式
加密反馈模式通过引入移位寄存器来克服加密分组链接模式不能实时解密的困难。下图展示了带64位移位寄存器的加密反馈模式的加密和解密流程图。图中C2、C3及P10等都是一个字节(8位)的数据,所以能够实现字符的实时加密和解密,不用再等8个字节都接收到之后再进行解密。图中在进行第10个字节数据的加密和解密过程,在该过程中&#