每次只能处理特定长度的一块数据的一类密码算法。这里的一块称为分组,一个分组的比特数就称为分组长度。例:DES和三重DES的分组长度就是64比特,这些密码算法每次只能加密64比特的明文。AES的分组长度一般为128比特、192比特和256比特。
是对数据流进行连续处理的一类密码算法。流密码一般以1比特、8比特或32比特等为单位进行加密或解密。
分组密码处理完一个分组就结束,因此不需要通过内部状态来记录加密的进度;相对的,流密码是对一串数据流进行连续处理,因此需要保持内部状态。
在第三章介绍的算法中,只有一次性密码本属于流密码,其他的都是分组密码。
对分组密码算法进行迭代的方式称为分组密码的模式
Q:为什么要进行迭代,不能使用多个分组进行加密吗?
将明文分为多个分组进行加密的方法叫做ECB模式。事实上,这种模式有很大的弊端,稍后讲解。
明文分组:分组密码算法中作为加密对象的明文明文分组的长度与分组密码算法的分组长度是相等的。
密文分组:使用分组密码算法将明文分组加密之后所生成的密文。
主动攻击者可以主动介入发送者和接受者之间的通信过程,进行阻碍通信或者是篡改密文等活动。,这样的攻击者一般称为Mallory.
EBC是将明文分组直接加密的方式。在ECB模式中,明文分组加密后的结果就是密文分组。
由上图,可以将ECB理解为“明文分组——密文分组”的对应表,因此ECB模式也称为电子密码本模式。当最后一个明文分组的内容小于分组长度是,需要用一些特定的数据进行填充。
EBC模式是所有模式中最简单的一种,EBC模式中,明文分组和密文分组一一对应,如果有部分密文重复多次出现,就可以知道明文中存在的重复组合,并以此为线索来破译密码,因此ECB模式是存在一定风险的。
EBC模式中,明文分组可以进行独立的加密和解密,这是一个很大的弱点。在这种情况下,
如果存在主动攻击者Mallory,只要知道每个分组记录了什么数据就可以进行篡改,如:改变分组顺序、删除分组、替换、复制等。也就是说,攻击者无需破译密码就能操纵明文。
Mallory对密文的篡改,可以通过消息认证码检测出来。不过,如果使用除EBC之外的其他模式,那么上述攻击从一开始就是不可能实现的。
将一个明文分组和前一个密文分组XOR运算后进行加密
第一个明文分组前没有密文分组,因此需要一个比特序列代替密文分组,这个比特序列称为初始化向量,通常缩写为IV。一般来说,每次加密前都会产生一个随机的比特系列作为初始化向量。
Q1:如果每次的初始化向量相同,破译线索?
1.解决EBC模式的缺陷。因为后一个明文分组要对前一个密文分组进行XOR,所以即使明文分组1与明文分组2相同,密文分组1、2的值也不同。
2.无法单独对中间的一个明文分组进行加密。
3.假设有一个密文分组损坏(由于硬盘故障导致密文分组的值发生变化),若密文分组的长度没有变化,最多只有两个分组的数据被破坏(图4-5);若密文分组的长度发生变化,确实比特的分组之后的密文无法解密(XOR的特点)(图4-6)---------?
Q:第二个分组比特缺失,密文3、4为什么不能解密?
假设Mallory通过修改密文来操纵解密后的明文,有两种方式:
1.对初始化向量中的任意比特进行反转,那么,明文分组中相应的比特也会被反转。
2.对密文分组进行攻击,但是这比较困难,而且难以控制特定的比特,相比于第一种方法,会引起明文分组1和密文分组2的比特变化。
可以通过消息认证码,判断数据有没有被篡改。
确保互联网安全的通信协议之一IPsec,就是使用CBC模式来确保通信机密性的,如使用CBC模式sanchongDES的3DES-CBC以及CBC模式AES的AES的AES-CBC等。
此外,CBC模式还被用于一种叫做Kerberos version 5的认证系统中。
CFB模式全称是Cipher FeedBack(密文反馈模式)。在CFB模式中,前一个密文分组会被送到密码算法的输入端。与CBC模式相比,明文分组和密文分组之间只有一个XOR运算。
密码算法的输入是前一个密文分组,也就是说,将密文分组反馈到密码算法中,所以有“密文反馈模式”
CFB模式与一次性密码本相似。
CFB模式中由密码算法生成的比特序列称为密钥流。密码算法就相当于生成密钥流的为随机数生成器,而初始化向量就相当于伪随机数生成器的种子。在CFB模式中,明文数据可以被逐比特加密,所以我们可以将CFB模式看做是一种使用分组密码来实现流密码的方式。
对CFB可以实施重放攻击
全称是Output-Feedback模式)(输出反馈模式)。在OFB模式中,密码算法的输入是密码算法的前一个输出,密码算法的输出会反馈到密码算法的输入中。
两者的区别仅限于密码算法的输入。
CFB模式是对密文分组进行反馈的,因此必须从第一个密文分按顺序进行加密。
OFB模式中参与XOR运算的密钥流可以直接通过密码算法计算,与明文分组和密文分组均无关,所以可以直接通过密码算法计算密钥流,然后进行XOR运算,因此可以不按照顺序加密。和AES等密码算法相比,XOR运算的速度相当快,所以只要得到密钥流,就可以快速加密。换个角度来看,生成密钥流的操作可以喝XOR运算同时进行。
全称是CounTeR(计数器模式)。CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。
CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的。
每次加密时都会生成一个不同的值(nouce)来作为计数器的初始值。当分组长度为128比特(16字节)时,计数器的初始值可能是向下面这种形式:
其中前8个字节为nouce,这个值在每次使用时(指发1个消息,每个消息有几个明文分组,在同一个消息的不同明文分组加密时,nouce是相同的)必须是不同的;后8个字节为分组序号,这个部分会逐次累加。在加密过程中,计数器的值会发生如此变化:
按照上述生成方法,可以保证计数器的值每次都不同。因此,每个分组中奖计数器进项加密所得到密钥流也是不同的。也就是说,这种方法就是用分组密码来模拟生成随机的比特序列。
1.两者都属于流密码
2.OFB模式将加密的输出反馈到输入,而CTR模式是将计数器的值用作输入。
1.CTR模式加密和解密的结构一样,程序上容易实现
2.可以以任意顺序对分组进行加密和解密,在加密和解密是需要用到的计数器可以通过nouce和分组序号直接计算出来。OFB模式并不具备这一点-----?
3.可以并行实现。在支持并行计算的系统中,CTR模式的速度是非常快的。
1.攻击:反转密文分组中一个比特,明文分组对应的比特也会被反转。
2.在OFB模式中,如果对密钥流的一个分组进行加密后其结果碰巧和加密前相同,那么这一分组之后的密钥流就会变成同一只的不断反复。在CTR模式中就不存在这一问题。
Q:一个分组进行加密后其结果碰巧和加密前相同,什么时候有这种情况?
注:明天解决遗留下来的3个问题