导图社区 分组密码的工作模式
分组密码的工作模式思维导图,包括电码本模式(ECB)、密文分组链接模式(CBC)、密文反馈模式(CFB)、输出反馈模式(OFB)、计数器模式(CTR)等内容。
编辑于2021-11-09 00:22:24分组密码的工作模式
一、电码本模式(ECB)
1、概述:电码本模式(Electronic Code Book,ECB)就是使用相同的密钥对明文组进行加密 ,一次只加密一组明文。解密时也使用相同的密钥对密文组进行解密,一次解密一组密文。
2、明文分组:假设明文分组长度为b,则可以将明文分为b位一组的明文组,必要时,可对最后一个明文组进行填充。
3、加解密过程:如果每个明文分组被记为 ,密文分组被记为 ,则加解密过程如下图所示:
在这种工作模式下,一个明文组只能固定地被加密成一个对应的密文组,一个密文组也只能固定地被解密成对应的密文组。他们彼此是一一对应的。设想我们有一个厚厚的密码本,每次加密时,我们只需要从密码本中查出明文所对应的密文就可以。这也是电码本模式名称的由来。 ECB加解密方式可以表示为:
4、ECB的特征:对于短消息,ECB模式是比较适用的。但对于长消息,ECB模式就不太安全了。这是因为长消息中会经常对相同的明文分组进行加密,得出相同的密文,这回导致频率特征暴露,造成安全隐患。
二、密文分组链接模式(CBC)
1、加解密方式:密文分组链接模式(Cipher Block Chaining,CBC)中,加密算法的输入是明文分组和前一个密文分组的异或,同样均使用相同的密钥进行加密。其中第一个明文加密时,需先与初始向量 [公式] 异或,再进入加密算法进行加密。如下图所示:
就像前面说的那样,图中第一个明文分组 [公式] 先与初始向量 [公式] 异或,然后被加密为密文 [公式] 。接下来 [公式] 与下一个明文分组异或,得到的结果被加密为 [公式] ,以此类推。所有的加密和解密都使用同一个密钥 [公式] 。 解密时,先对密文分组进行解密,然后再与上一个密文分组进行异或,即可得到明文分组结果。同样,第一个密文分组 [公式] 在解密后,需与初始向量 [公式] 异或,才能得到明文 [公式] 。 加解密方式如下图所示(左为加密,右为解密):
2、CBC的特征:与ECB类似,如果对明文分组后,最后一组不够分组位,可以对最后一组进行填充。其中第一个分组使用的初始向量 [公式] 是随机生成的一个值,每次通信中 [公式] 的值都不同。由于每次 [公式] 的值都不同,因此相同的明文,使用相同的密钥进行加密,其加密的结果不同。在每次发送消息时,发送方应该把 [公式] 的值也秘密发送给接收方。即对于m个明文分组,CBC将输出m+1个密文分组( [公式] 也被算作密文分组的一部分)。如果 [公式] 被公开,则攻击者可能会篡改 [公式] ,导致第一块密文解密失败。CBC模式存在错误传播的可能,如果前一块密文接收失败,那么会影响下一块密文的解密,但是并不会影响下下块密文的解密,最多只能影响一块,即CBC模式具有自同步功能。CBC的密文块需要按顺序逐一解密,ECB模式可以同时解密。
三、密文反馈模式(CFB)
1、概述:与ECB、CBC不同,在CFB(Cipher Feedback,CFB)模式下,明文本身并没有进入加密算法中进行加密,而是与加密函数的输出进行了异或,得到了密文。CFB以及后面要讲的OFB、CTR模式都具有这样的特征,这是流密码的典型特征。此外,CFB不需要将明文分组填充到分组长度的整数倍,可以实时操作。另外,CFB以及OFB、CTR模式下的加解密中,都只使用了加密算法,而没有用到解密算法。这是由于明文并没有实际进入到加密算法中,只是与加密算法的输出进行了异或。
2、分组长度: 补充: 加密算法的分组长度、明文的分组长度区分: 加密算法的分组长度:是指输入加密算法内容的分组长度。这里的加密算法是指常用的分组加密算法,如DES、AES等。由于这些算法的输入必须符合一定的分组长度,因此加密算法输入的分组长度通常是受到算法限制的。 明文的分组长度:是指明文自己的分组长度。在前面的ECB、CBC模式下,明文需要被输入到加密算法中,因此这时的明文分组长度=加密算法的分组长度。但是在CFB以及后边要讲的OFB、CTR中,明文并没有被输入加密算法中。在这种情况下,明文的分组长度可以不与加密算法的分组长度一致,甚至可以是任意的。 CFB模式下,加密算法的分组长度(假设为b位)不会影响明文的分组长度(假设为s位)。如果加密算法为DES,则b=64;如果加密算法为AES,则b=128。这些都只影响加密算法的输入位数。明文的分组长度s一般是任意的,如果s=1,则一位一位地加密;如果s=8,就一个字节一个字节地加密。比较常用的是s=8。因此,CFB模式下,不需要对明文的最后一个分组进行填充,最后剩下几位就按几位加密即可。
3、加解密方式: 补充: 分组密码的加解密算法、分组密码工作模式的加解密区分: 分组密码的加解密算法:一般指常见的分组密码算法,如DES、AES等。其中每个算法都包括加密和解密两个过程。它们被运用到了各种不同的工作模式中。在本文中,他们的加密和解密不一定要对明文和密文进行操作,可能只是对某个输入进行了运算。 而分组密码工作模式的加解密过程,是指对明文、密文的加密和解密。 在分组密码工作模式的加密过程或者解密过程中,可能用到分组密码的加密算法或者解密算法,也可能只用到了加密算法(比如CFB、OFB、CTR)。这两者是没有必然关系的。
如图所示,加密算法的输入是一个b位移位寄存器的值,输出也是一个b位的值。在输出的b位值中,选择左边的高s位与s位的明文进行异或,得到s位的密文。以此同时,下一组的移位寄存器向左移动s位。然后将刚才得到的s位的密文填充到下一组移位寄存器的低s位。 在这个过程中,加密算法输出的低b-s位被丢弃。所有的加密算法均使用相同的密钥进行加密。 另外,由于第一个明文分组的加密算法没有前一组密文的填充,因此需要一个b位的初始向量( [公式] )作为第一组加密算法的输入。 补充: 密钥和密钥流: 在本文中,密钥是指加密算法E(K,P)的一个输入K。在图中可以看出,所有分组的密钥都是相同的。 由于CFB和接下来的OFB、CTR非常类似于流密码,而且其加密算法的输出也就是在发挥一种类似于流密码密钥的作用(与明密文异或),所以我们把加密算法的一系列输出称为密钥流。 这里的称谓可能不太规范,但是为了方便表达意思,所以就勉强这样说了。采用别的称谓也可以,能够自圆其说就行。 CFB的加密和解密均只用到了加密算法,这是因为,CFB只是利用加密算法产生了密钥流,与明文进行异或。明文根本没有进入到加密算法中。因此,在解密时,也只需要再次使用加密算法,再次生成密钥流,与密文异或,从而得到明文。这个过程不需要用到解密算法。 CFB模式的加解密可以表示为:
4、CFB的特点: 密文块需要按顺序逐块加密。 密钥、明文相同时,IV不同,则加密结果不同。 存在错误传播的可能性:前部分密文出错,会影响后边的解密。这是因为一块密文在进入下一分组的移位寄存器后,会在接下来的几个分组中一直除以移位寄存器中。 有自同步功能:在若干分组加密后,前边错误加密的密文会移出移位寄存器,停止对后面分组的加密造成影响。
四、输出反馈模式(OFB)
1、概述:与CFB类似,输出反馈模式(Output Feedback,OFB)也是一种类似于流密码的工作模式。在这种模式中,明文分组同样没有进入到加密算法中,加密算法只是用来计算密钥流的。 在CFB中,是将密文反馈到下一分组加密算法输入的移位寄存器中;而在OFB中,是直接将加密算法的输出反馈到下一分组加密算法的输入中。
2、明文分组:在OFB中,明文分组一般要与加密算法的输入分组一致。但是,如果明文的最后一组不够加密算法的输入分组长度,也无需填充。(处理方法见下文)
假设加密算法的分组长度为b位。从图中可以看出,加密算法的b位输入来自于上一个分组加密算法的b位输出。同样,如果是第一个分组,就需要一个初始向量时变值来充当加密算法的输入。 在经过加密算法后,得到b位输出结果。这个结果再与b位的明文分组进行异或,即得到密文分组。 另外,所有加密算法的密钥都是相同的。加密算法仅仅用来产生密钥流,而没有对明文进行加密。真正的加密过程是明文分组与密钥流的异或。 在加密时,如果最后一组明文分组的位数(假设为s位)不够b位(s<b),那也无需填充。只需要将加密算法输出密钥流的低b-s位舍去,保留s位,再与s位明文分组进行异或,得到s位密文分组。 解密过程与加密过程类似,只是改用密钥流与密文组异或,得到明文组。 与CFB相同,解密过程也只用到了加密算法,并没有用到解密算法。 OFB的加解密过程可以表示为:
4、OFB模式的特点:OFB的初始向量是一个时变值,即每次加密时,初始向量必须有变化。初始向量是不能公布的,否则攻击者可以篡改初始向量,使得所有的密文解密失败。 在OFB中,所有的明密文分组可以同时加解密,不需要按分组顺序进行加解密。在图7-7中,虚线方框括起来的是专门计算密钥流的部分。在对明文进行加密之前,所有分组的密钥流可以提前进行计算。 在密钥完全相同的情况下,由于初始向量的不同,相同的明文,加密结果也不相同。 一组明密文的错误不会影响下一分组明密文的加解密。这是因为,传递到下一分组的知识加密算法的输出,而不是明密文。 OFB容易受到对消息的篡改攻击。比如,对密文进行一定的取反,则明文的相应位也会取反。这使得纠错码不能检测到明密文被篡改。
五、计数器模式(CTR)
1、概述:计数器模式(counter,CTR)也是一种类似于流密码的模式。加密算法只是用来产生密钥流与明文分组异或。
2、分组长度:CTR的分组长度一般也要与加密算法的输入分组一致。但是,如果明文的最后一组不够加密算法的输入分组长度,也无需填充。(处理方法见下文)
3、加解密方式:
假设加密算法的分组长度为b位。在图中,加密算法的输入是一个b位计数器的值,在密钥的作用下,产生了一系列b位的密钥流。然后密钥流与b位的明文分组进行异或,得到b位的密文分组。 在这个加密过程中,每个计数器的值都不能相同。为了便于处理,首先为第一个计数器设一个初始值,然后在接下来的每一个分组中,计数器逐个加一。 如果最后一个明文分组的位数(s位)不够加密算法的分组长度(b位),即s<b,那么处理方法与OFB相同:在最后一组中,舍弃加密算法输出的右b-s位,将左边剩下的s位与明文分组进行异或,得到最后的s位密文分组。 CTR的解密方式与加密方式类似,原因与OFB相同。 其加解密方式可以表示为:
4、CTR模式的特点: 第一个计数器的值需要保密,否则会被攻击者篡改,使得加解密的所有过程失败。 与OFB相同,CTR中,所有的明密文分组可以同时加解密,不需要按分组顺序进行加解密。图7-9中,方框内的部分可以进行预处理,在加解密之前就先计算出密钥流。 前面分组中的错误不会影响到后面明密文的加解密。这是因为前面的明密文没有反馈到后面的分组中。