本章学习的内容
需要加密任意长度的明文,则需要对分组密码进行迭代,迭代的方法称为分组密码的模式
- ECB
- CBC
- CFB
- OFB
- CTR
分组密码的模式
分组密码与流密码
分组密码是每次只能处理一定长度的一块数据的特定密码算法,一块就是分组,一个分组的比特数就是分组长度
流密码是对数据流进行连续处理的一类密码算法,流密码一般以1比特、8比特或者32比特为单位进行加密和解密。
什么是模式
- ECB模式:Electronic CodeBook mode(电子密码本模式)
- CBC模式:Cipher Block Chaining mode(密码分组链接模式)
- CFB模式:Cipher FeedBack mode(密文反馈模式)
- OFB模式:Output FeedBack mode(输出反馈模式)
- CTR模式:CounTeR mode(计数器模式)
明文分组与密文分组
明文分组是加密对象的明文,明文长度和密码算法的长度是相同的
密文分组是算法将明文分组加密之后产生的密文
主动攻击者Mallory
ECB模式
ECB模式就是简单的将明文反复的用同一个秘钥进行加密的模式
当最后一个明文小于分组长度时需要用特性的数据进行填充(padding)。
ECB的特点
明文与密文一一对应。观察密文就可以明文中存在的组合,并且以此为线索来破译密码。
ECB模式的攻击
攻击者可以无需破译密码就操纵明文
因为他只需要修改密文的顺序,就可以影响到明文的顺序。
CBC模式
CBC模式中首先将明文分组的前一个密文分组进行XOR运算,然后进行加密。
与ECB模式比较我们可以发现,我们多了一步将上一次的密文加密XOR作为下一次的秘钥的步骤。
初始化向量
当加密第一个分组的时候由于不存在前一个密文分组,所以需要实现准备一个长度为一个分组的比特序列代替前一个密文分组,这个比特序列被撑称为初始化向量。
CBC模式的特点
我们无法对一个中间的明文分组进行加密,如果需要生成密文3,至少需要凑齐明文分组1、2、3才行。
解密的时候如果发现有一个分组损坏了,只要长度没有变化,解密时最多只有两个分组收到数据损坏的影响。
但是如果发现CBC模式中的密文分组中有一些比特缺失了,那么即使缺失了一比特,也会导致密文分组的长度发生变化,此后的分组将全部无法解密。
对CBC模式的攻击
通过翻转比特(0变1,1变0)明文分组中的对应比特也会翻转。
所以攻击者可以对初始化向量进行攻击。不过只让明文分组1中攻击者期望的特定比特发生变化还是比较困难的。
第八章中会介绍消息认证码,以保证数据没有被篡改。
填充提示攻击
利用密码的填充部分来攻击的方法。反复发送一段密文,每次发送都对填充的数据进行少许改变,服务器无法解密的时候会返回一个错误信息,攻击者可以通过这个了解部分明文相关的信息。
对初始化向量进行攻击
初始化向量必须使用不可预测的随机数。
CFB模式
CFB模式为密文反馈模式,前一个密文分组会送到密码算法的输入端。
明文和密文没有使用加密,而是使用XOR。
初始化向量
和CBC相同
CFB模式与流密码
实际其结构与一次性密码本很相似,但是由于不是真正的随机数,所以理论上还是可以破译的。
CFB模式中密码算法生成的比特邪猎称为秘钥流。
CFB明文数据可以被逐比特加密,所以我们可以将CFB模式看做是一种使用分组密码来实现的流密码。
CFB模式的解密
CFB模式的攻击
对CFB模式可以实施重放攻击
在解密时4个分组中第三个和第四个被攻击者替换,那么第二个分组是出错了还是因为被人攻击造成,接受者无法判断。只能通过消息认证码等方式进行解决。
OFB模式
什么是OFB模式
OFB不是通过密码算法对明文直接加密,而是通过将明文分组和密码算法的输出进行XOR来产生密文分组的。
初始化向量
CFB模式与OFB模式比较
OFB模式中,XOR所需要的比特序列可以实现通过密码算法生成,与明文分组无关,只要提前准备好所需的秘钥流,则从明文生成密文的过程中就完全不需要密码算法,直接XOR就行了。
CTR模式
CTR模式的全称是CounTeR(计数器模式)CTR模式是一种将累次累加的计数器进行加密来生成秘钥流的流密码。
计数器的生成方法
OFB与CTR模式对比
OFB将加密的输出反馈,而CTR则是计数器的值用作输入
CTR模式的特点
能够以任意顺序处理分组,意味着可以进行并行计算,支持并行计算的系统中,CTR的速度是非常快的。
错误与机密性
CTR模式中主动攻击者可以通过翻转密文分组中的某些比特引起解密后明文中的对应比特发生翻转,这一弱点和OFB是相同的。
CTR有一个比OFB更好的点是,在OFB中如果存在输入与输出相同的情况,之后的秘钥流会变成完全相同的值,而CTR不存在这种问题。