文章目录
- 分组密码的模式
- 分组密码与流密码
- 模式
- 明文分组与密文分组
- ECB模式
- ECB定义
- ECB特点
- 对ECB模式的攻击
- 改变分组顺序攻击
- CBC模式
- CBC定义
- 初始化向量IV
- CBC特点
- 对CBC模式的攻击
- 对初始向量进行反转攻击
- 填充提示攻击
- CFB模式
- CFB定义
- 对CFB模式的攻击
- 重放攻击
- OFB模式
- OFB定义
- CFB模式与OFB模式的对比
- CTR模式
- CTR定义
- 计数器的生成方法
- OFB模式与CTR模式的对比
- CTR特点
- 错误与机密性
- 五种模式对比
分组密码的模式
分组密码与流密码
- 分组密码:每次只能处理特定长度的一块数据的一类密码算法,“一块”就称为分组,一个分组的比特数就称为分组长度
- 流密码:是对数据进行连续处理的一类密码算法
- 分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;但流密码是对一串数据流进行连续处理,因此需要保持内部状态
模式
- 模式:分组密码只能加密固定长度的分组,但需要加密的明文长度可能会超过分组密码的分组长度,此时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。加密过程中迭代的方法就称为分组密码的模式
- ECB:电子密码本模式,Electronic CodeBook mode
- CBC:密码分组链接模式,Cipher Block Chaining mode
- CFB:密文反馈模式,Cipher FeedBack mode
- OFB:输出反馈模式,Output FeedBack mode
- CTR:计数器模式,CounTeR mode
明文分组与密文分组
- 明文分组:分组密码算法中作为加密对象的明文,明文分组的长度与分组密码算法的分组长度是相等的
- 密文分组:使用分组密码算法将铭文分组加密之后所生成的密文
ECB模式
ECB定义
- 将明文分组加密之后的结果将直接成为密文分组
ECB特点
- ECB模式是所有模式中最简单的一种,ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组
- 只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的
对ECB模式的攻击
改变分组顺序攻击
- ECB模式中,每个明文分组都各自独立地进行加密和解密,但这其实是一个很大的弱点
- 若存在主动攻击者M,他能够改变密文分组的顺序,当接收者对密文进行解密时,由于密文分组的顺序被改变了,因此相应的明文分组的顺序也会被改变
- 也就是说,攻击者M不需要破译密码,也不需要知道分组密码算法,只要知道哪个分组记录了什么样的数据就可以攻击成功
CBC模式
CBC定义
- 将明文分组与前一个密文分组进行XOR运算,然后再进行加密
- 若将一个分组的加密过程分离出来:ECB模式只进行了加密;CBC模式则在加密之前进行了一次XOR
初始化向量IV
- 当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来替代“前一个密文分组”,这个比特序列成为初始化向量(Initialization Vector),通常缩写为IV
- 一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量
CBC特点
- 明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和明文分组2的值是相等的,密文分组1和密文分组2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了
- 在CBC模式中,无法单独对一个中间的明文进行加密
- 假设CBC模式加密的密文分组中有一个分组损坏了(如由于硬盘故障导致密文分组的值发生改变),这种情况下,只要密文分组的长度没有发生改变,则解密时最多只会有2个分组受到数据损坏的影响
- 假设CBC模式的密文分组中有一些比特缺失了(如由于通信错误导致没有收到某些比特),那么此时即使只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样缺失比特的位置之后的密文分组全部无法解密
对CBC模式的攻击
对初始向量进行反转攻击
- 假设攻击者M能够对初始化向量中的任意比特进行反转,则解密后得到的明文分组中相应的比特也会被反转,因为在CBC模式解密过程中,第一个明文分组会和初始化向量进行XOR运算
填充提示攻击
- 填充提示攻击是一种利用分组密码中的填充部分来进行攻击的方法
- 在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度
- 在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充的数据进行少许改变,由于接收者在无法正确解密时会返回一个错误信息,攻击者通过这一错误信息就可以获得一部分与明文相关的信息
- 这一攻击方式并不仅限于CBC模式,而是适用于所有需要进行分组填充的模式
- 要防御这种攻击,需要对密文进行认证,确保这段密文的确是由合法的发送者在知道明文内容的前提下生成的
CFB模式
CFB定义
- 前一个密文分组会被送回到密码算法的输入端,反馈指返回输入端
- 在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量IV来代替,一般来说,需要在每次加密时生成一个不同的随机比特序列用作初始化向量
- CFB模式中,明文分组和密文分组之间并没有经过“加密”,明文分组和密文分组之间只有一个XOR
- CFB模式中,密码算法的输出相当于一次性密码本中的随机比特序列,由于密码算法的输出是通过计算得到的,并不是真正的随机数,因此CFB模式不能像一次性密码本那样具备理论上不可破译的性质
- CFB模式中由密码算法所生成的比特序列称为密钥流,在CFB模式中,密码算法相当于用来生成密钥流的伪随机数生成器,儿初始化向量就相当于伪随机数生成器的“种子”
- 在CFB模式中,明文数据可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式
对CFB模式的攻击
重放攻击
- 假设一条信息由7个密文分组组成,主动攻击者M将该消息中的后3个密文分组保存下来,第二天通信方发送内容不同的7个密文分组(假设发送发两次使用相同的密钥),攻击者M用保存好的后3个密文分组进行替换
- 此时接收方进行解密时,前4个分组可以解密成正确的明文分组,第5个分组会出错,第6、7分组变成呗M替换的内容,此时M没有破解密码,就成功将以前的电文混入新的电文中,而第5个分组到底是通信错误还是被攻击了,接收方是无法做出判断的
OFB模式
OFB定义
- 在OFB模式中,密码算法的输出会反馈到密码算法的输入中
- OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,这一点OFB与CFB很相似
- OFB模式中也需要使用初始化向量IV,一般来说,需要在每次加密时生成一个不同的随机比特序列用作初始化向量
CFB模式与OFB模式的对比
- 仅仅在于密码算法的输入
- CFB模式中,密码算法的输入是前一个密文分组,也就是将密文分组反馈到密码算法中;OFB模式中,密码算法的输入则是密码算法的前一个输出,也就是将输出反馈给密码算法
- 由于CFB模式中是对密文分组进行反馈的,因此必须从第一个明文分组开始按顺序进行加密,无法跳过明文1而先对明文2进行加密;相对地,在OFB模式中,XOR所需要的比特序列(密钥流)可以实现通过密码算法生成,和明文分组无关,只要提前准备好所需的密钥流,则在实际从明文生成密文的过程中,就完全不需要动用密码算法了,只要将明文与密钥流进行XOR即可
CTR模式
CTR定义
- 是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码
- 每个分组对应一个逐次累加的计数器,并通过计数器进行加密来生成密钥流,最终密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR得到的
计数器的生成方法
- 每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值
- 当分组长度为16字节时,前8个字节为nonce,这个值在每次加密时必须都是不同的,后8个字节为分组序号,这个部分会逐次累加
- 由于计数器的值每次都是不同的,因此每个分组中将计数器进行加密所得到的密钥流也是不同的,这种方法就是用分组密码来模拟生成随机的比特序列
OFB模式与CTR模式的对比
- OFB模式是将加密的输出反馈到输入;CTR模式则是将计数器的值用作输入
CTR特点
- CTR模式的加密和解密使用了完全相同的结构,因此在程序实现上比较容易
- CTR模式可以以任意顺序对分组进行加密和解密
- 能够以任意顺序处理分组,能够实现并行计算
错误与机密性
- 假设CTR模式的密文分组中有一个比特被反转了,则解密后明文分组中仅有与之对应的比特会被反转,这一错误不会放大
- CTR模式中,主动攻击者M可以通过反转密文分组中的某些比特,引起解密后明文中的相应比特也发生反转
五种模式对比
模式 | 名称 | 优点 | 缺点 |
---|---|---|---|
ECB | Electronic CodeBook mode | 简单快速; 支持并行计算; | 明文中重复排列会反映在密文中; 通过删除、替换密文分组可以对明文进行操作; 对包含某些比特错误的密文进行解密时,对应的分组会出错; 不能抵御重放攻击; |
CBC | Cipher Block Chaining mode | 明文中的重复排列不会反映在密文中; 解密支持并行计算; 能够解密任意密文分组; | 对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错; 加密不支持并行计算; |
CFB | Cipher FeedBack mode | 不需要填充padding; 解密支持并行计算; 能够解密任意密文分组; | 加密不支持并行计算; 对包含某些错误比特的密文进行解密时,第一个分组的相应比特以及后一个分组的全部比特会出错; 不能抵御重放攻击; |
OFB | Output FeedBack mode | 不需要填充padding; 可事先进行加密解密的准备; 加密解密使用相同结构; 对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错; | 不支持并行计算; 主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转; |
CTR | CounTeR mode | 不需要填充padding; 可事先进行加密解密的准备; 加密解密使用相同结构; 对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错; 支持并行计算 | 主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转; |