一、分组密码的模式
1.分组密码和流密码
密码算法可以分为分组密码和流密码两种。
分组密码是每次只能处理特定长度的一块数据的一类密码算法。流密码则是对数据流进行连续处理的一类密码算法。
2.什么是模式
由于分组密码算法只能够加密固定长度的密码分组,但是明文的长度可能会超过密码的分组长度,这时就需要对分组密码算法进行迭代,这种迭代的方法就叫做分组密码的模式。
分组密码的主要模式分为五种:ECB模式、CBC模式、CFB模式、OFB 模式和CTR模式。
3.明文分组和密文分组
明文分组是指分组密码算法中加密之前的明文。密文分组是指用分组密码算法将明文分组加密之后得到密文。
二、ECB模式
1.什么是ECB模式
在ECB模式中,明文分组经过加密之后会直接得到相应的密文分组。它是一个巨大的明文与密文的对应表,因此我们常常将ECB模式称为电子密码本模式。若最后的一个分组的内容小于分组长度的时候,我们常常需要用一些特定的技术进行填充。
2.特点
ECB模式中明文分组和密文分组存在一 一对应的关系,所以若ECB模式中存在相同的明文分组,则会得到相同的密文分组,这样就可以找到线索来破译密码,因此EBC模式存在一定风险。
3.对ECB模式的攻击
假设主动攻击者Mallory能够改变密文的分组顺序,就会使得明文的分组顺序也发生改变,那么他无需破译密码,也可以操纵明文。
三、CBC模式
1.什么是CBC模式
CBC模式是密文分组链接模式。在CBC模式中,首先将明文分组与上一个密文分组做XOR运算,然后再进行加密,如下图所示。
2.初始化向量
由于在加密第一个明文分组时,不存在“前一个密文分组”,所以我们需要用到一个长度为一个分组的比特序列来代替这里需要用到的“前一个密文分组”,这个比特序列被称为初始化向量,缩写为IV。
3.特点
明文分组在加密之前一定会与前一个密文分组做XOR运算,那么,即便明文分组1和明文分组2的值相等,密文分组1和密文分组2的值也不一定相等,这样的话CBC模式就有效避免了ECB模式的缺陷。与ECB模式不同,CBC模式无法单独对中间的明文分组进行加密,必须要完成对当前明文分组之前的密文分组进行加密,得到前一个密文分组,进行XOR运算之后,才可以进行对当前明文分组的加密。相类似地,如果在解密过程中,某一个密文分组被损坏了,解密出来的结果也只会影响到最多两个分组,而不会产生一系列的影响。但是,如果密文分组有1比特缺失了,则会导致后面的信息错位,以至于无法解密。
4.攻击
如果主动攻击者Mallory想要通过修改密文来操作解密后的明文,如果Mallory能对初始向量的任意比特进行反转的话,则会导致解密后得到的明文分组相应的比特也会被反转。
5.填充提示攻击
在分组密码中,若明文不是分组的整数倍,则需要对最后一个分组进行填充,将其凑成一个分组的长度,而填充提示攻击就是利用这部分填充内容进行攻击的方法。填充提示攻击仅限于CBC模式下。
6.对初始对称化向量进行攻击
初始化向量必须使用不可预测的随机数,可事实实施的时候常使用的是上一次CBC模式下使用的最后一个密文分组,并非真正意义上的随机。
四、CFB模式
1.什么是CFB模式
CFB模式的全称是密文反馈模式。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。CFB模式的加密过程和解密过程如下图所示。不同于ECB模式和CBC模式,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。
2.初始化向量
由于生成第一个密文分组的时候,不存在“前一个密文分组”,因此需要使用初始化向量(IV)来代替,与CBC模式相同,一般来说,我们需要在每次加密时,生成一个不同的随机比特序列用作初始化向量。
3.CFB模式与流密码
CFB模式通过将"明文分组"与“密码算法的输出”进行XOR运算来生成密文分组。在CFB模式中,密码算法的输出相当于一次性密码本的随机比特序列。在这个模式中,由密码算法所生成的比特序列称为密钥流。
4.攻击
使用重放攻击。
五、OFB模式
1.什么是OFB模式
OFB模式的全称是输出全反馈模式,其加密过程和解密过程如下图所示。
2.初始化向量
与CBC模式、CFB模式类似,OFB模式也需要生成一个不同的随机比特序列用作初始化向量。
3.CFB模式与OFB模式的对比
在CFB模式中,密码算法的输入是前一个密文分组,而在OFB模式中,密码算法的输入事实上是前一个密码算法的输出。CFB模式中,必须按照明文分组的顺序进行加密,而在OFB中,XOR运算所需要用到的密钥流可以先通过密码算法生成,与明文分组无关。
六、CTR模式
1.什么是CTR模式
CTR模式的全称是计数器模式,是一种通过逐次累加的计数器进行加密生成密钥流的流密码,其加密和解密过程如下图所示。
2.计数器生成方法
每次加密都会生成一个不同的值,用来做计数器的初始值,是CTR模式模拟生成随机数的一种方法。
3.OFB模式与CTR模式的对比
OFB模式与CTR模式都属于流密码,不同之处是,OFB模式将加密的输出反馈到输入,而CTR模式将计数器的值反馈到输入。
4.CTR模式的特点
(1)CTR结构的加密和解密结构一致,程序上更容易实现;
(2)CTR模式中,可以以任意顺序处理分组,进行加密或解密。
六 、小测验
1.比特与字节
8比特等于1字节,那么128比特等于多少字节呢?
我的答案:128÷8=16字节
2.对ECB模式的攻击
现在假设你就是主动攻击者Mallory,而且你知道某个计算机系统的口令文件是用ECB模式进行加密的,密文如下。
密文分组1= 1D C1 6A 10 8D 52 2E 04 01 D4 B5 5347 D6 EO 37(用户1的名称)
密文分组2= AA DE P1 DF 96 79 8D 22 4R 65 B8 49 9E 11 3E OD(用户1的口令)
密文分组3=8E DO E3 40 91 6C E7 75 E2 8E 83 BE 29 E8 3D 56(用户2的名称)
密文分组4 = 1E 96 43 46 CO 71 91 74 F4 97 D9 5E 1B 0268 F7(用户2的口令)
密文分组5=4A 35 8D D8 A2 CF 86 99 5B B1 A1 26 9C A7 59 06(用户3的名称)
密文分组6=65 27 28 03 55 CO BA 7A 8c CF c6 99 95 PB 125B(用户3的口令)
如果要对这个计算机系统进行攻击,应该如何改写这个加密的口令文件呢?
我的答案:将密文分组1的内容复制到密文分组2、密文分组4和密文分组6。用户的用户名应该会比密码容易获取,这样就可以只破解用户1的用户名就可以获得用户2和用户3的口令。
3.CBC模式的初始化向量
在CBC模式中,我们假设每次加密都使用同一个初始化向量,在这样的情况下,密码破译者能够从中得到怎样的线索呢?
我的回答:如果每次加密都使用同一个初始化向量的话,则可以保证一份相同的文件用同一个密钥无论经过多少次加密得到的密文都是一样的,那么这些密文破译得到的明文也是相同的。如果每次都使用不同的初始化向量的话,则即便是相同内容的文件,经过加密之后所得的密文也是不一样的。
4.仿CBC模式
听了CBC模式的讲解,Alice想出了一种和CBC模式很相似的模式,如图4-8。这种模式具有怎样的性质呢?
我的回答:这种模式不同于CBC模式,CBC模式是先进行XOR运算,也就是XOR运算在加密之前进行,而这种模式是在加密之后进行XOR运算。这种模式在结构上与CBC模式相似,缺不具备CBC模式的功能,它在功能上近似于ECB模式。
5.CFB模式的加密
看了CFB模式的示意图,Alice产生了下面的想法。
我实在是无法理解CFB模式,仔细看看“CFB模式的加密”示意图,明文分组和密文分组之间根本就没有“加密”这一步啊!明明是将明文分组加密之后才能得到密文分组的,可为什么这里偏偏就没有“加密”呢?
请你解答一下Alice 的疑问吧。
我的回答:在CFB模式中,虽然在明文分组和密文分组之间没有“加密”,但是前一个密文分组会被送回到密码算法的输入端,加密之后跟明文分组进行XOR运算,这一步骤相当于“加密”。
6.模式的基础知识
下列说法中,请在正确的旁边画○,错误的旁边画×。
(1)在ECB模式的加密中,内容相同的明文分组,一定会被转换为内容相同的密文分组。
(2)在 CBC模式的解密中,如果密文分组3损坏,则密文分组5是无法正确解密的。
(3)在 CFB模式的加密中,不可以从明文的中间开始加密。
(4)在 OFB模式的解密中,分组密码算法本身所实际执行的是加密操作。
我的回答:(1)○(2)×(3)○(4)○
(2)在CBC模式的解密中,如果密文分组3损坏,则密文分组3和4可能会受到影响,密文分组5是可以正确解密的。