参考推荐:
https://blog.csdn.net/zha_zha_yu/article/details/109167346?
分组密码工作模式
分组密码工作模式
分组密码算法的工作方式有五种:电子密码本(ECB, Electronic codebook)方式、密码分组链接(CBC, Cipher block chaining)方式、密文反馈(CFB, Cipher-feedback)方式、输出反馈(OFB, output-feedback)方式、计数器模式(CTR,Counter)。
ECB模式
电码本模式(Electronic Code book)
ECB模式是最简单的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算,但是这种方法一旦有一个块被破解,使用相同的方法可以解密所有的明文数据,安全性比较差。适用于数据较少的情形,加密前需要把明文数据填充到块大小的整倍数。
使用ECB模式加密时,相同的明文分组会被转化为相同的密文分组,可以认为有一个非常大的电码本,对任意一个可能的明文分组,电码本中都有一项对应于它的密文,这也是该模式的名称由来。
ECB模式特点
优点:简单、容易实现、可并行计算、错误不传播、不需要初始化向量
缺点:容易暴漏明文数据模式(比如图像加密轮廓仍在),难以抵抗统计分析攻击、主动攻击(错误不传播)、数据长度是密码分组长度的整数倍,数据长度是密码分组长度的整数倍->最后一个明文分组需要填充(DES\3DES填充满8字节,AES填充满16字节)
用途:需要并行加密的应用,适用于数据较少的情形->单个数据的安全传输(一个DES或AES密钥),蓝色脉冲”在线电子游戏使用的Blowfish密码;
加解密错误传播有界
对ECB模式的攻击
假如存在主动攻击者M,他可以改变密文分组的顺序,当接收者对密文进行解密时,由于密文分组的顺序改变了,对应的明文顺序就会改变,此时,M无需破译就可以操纵明文。
例如,某银行的转账请求数据由以下三个分组组成:
1)分组1==付款人的银行账号 ---A账号
2)分组2==收款人的银行账号 ---B账号
3)分组3==转账金额 ---一亿元
实际请求为:从A账号向B账号转账一亿元;
明文分组:明文分组1-明文分组2-明文分组3;
使用ECB模式加密;
密文分组:密文分组1-密文分组2-密文分组3;
攻击者M将密文分组1和密文分组2的内容对调;
密文分组:密文分组2-密文分组1-密文分组3
银行对上述信息解密;
明文分组:明文分组2-明文分组1-明文分组3
Amazing!!!攻击者未破译密文,但同样可以操纵明文!!!
CBC模式
密码分组链接模式 (Cipher Block Chaining)
CBC模式中每一个分组要先和前一个分组加密后的数据进行XOR异或操作,然后再进行加密。这样每个密文块依赖该块之前的所有明文块,为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量IV进行异或操作。CBC模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理,并且与ECB一样消息块必须填充到块大小的整倍数。
初始化向量IV:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为分组长度的比特序列来代替“前一个密文分组”,这个比特序列即初始化向量IV(Initialization vector)。一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
CBC模式特点
优点:密文没有规律,经常使用的加密方式,不容易主动攻击(错误传播)、适合长报文
缺点:无法并行处理、错误传播、最后一个明文分组需要填充(DES\3DES填充满8字节,AES填充满16字节)、需要一个初始化向量(数据长度和明文长度相等)
用途:长报文传输,SSL、IPSec标准
明密文链接模式
特点:加解密错误传播无界;
密文链接模式
特点:加密错误传播无界,解密错误传播有界;
对CBC模式的攻击
1、密文比特缺失;
2、主动攻击者M:能够对初始化向量中的任意比特进行反转(0-1转换),则解密后的明文分组中相对应的比特也会被反转。
CFB模式
密码反馈模式 (Cipher Feedback)
CFB模式和CBC模式比较相似,前一个分组的密文加密后和当前分组的明文XOR异或操作生成当前分组的密文。CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。加解密使用的初始向量必须相同。
CFB模式原理
CFB模式特点
优点:密文没有规律,不容易主动攻击(错误传播),分组转变为流模式,可加密小于分组数据,不需要数据填充
缺点:无法并行、错误传播,需要一个初始向量
用途:数据完整性认证方面的应用
加解密错误传播无界
对CFB模式的攻击
对CFB可以实施重放攻击:
- 主动攻击者M截获A发送给B的信息,此信息由4个密文分组组成,M将后3个密文分组保存下来;
- A再次向B发送信息,M截获后,将后3个分组替换;
- B解密信息,4个分组只有第一个解密成正确的明文分组,第二个会出错,第三个和第四个变成了M替换的内容;
M未破解密码,就成功的将以前的电文混入到新电文中。第二个分组的出错到底是通信错误呢,还是被人攻击造成?B无法判断。
OFB模式
输出反馈模式 (Output Feedback)
OFB模式将分组密码转换为同步流密码,也就是说可以根据明文长度先独立生成相应长度的流密码。通过流程图可以看出,OFB和CFB非常相似,CFB是前一个分组的密文加密后XOR当前分组明文,OFB是前一个分组与前一个明文块异或之前的流密码XOR当前分组明文。由于异或操作的对称性,OFB模式的解密和加密完全一样的流程。
OFB模式原理
OFB模式特点
优点:分组转为流模式、可加密小于分组数据,不需要数据填充、加解密错误传播有界、抗消息流篡改攻击的能力不如CFB
缺点:主动攻击(错误不传播)、对插入攻击很敏感,并且对同步的要求比较高、需要一个初始向量,IV必须是一个时变值(每次加密运算唯一)
用途:通信信道质量不高时使用,比如卫星通信;适用于加密冗余度较大的数据,如语音和图像。
加解密错误传播有界
CTR模式
计数器模式 (Counter)
CTR模式与OFB模式一样,计数器模式将分组密码转换为流密码。它通过加密“计数器”的连续值来产生下一个密钥流块。计数器模式不常见,在CTR模式中,有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。在计算器不能维持很长的情况下,密钥只能使用一次。
CTR模式特点
优点:加解密速度快、效率高、安全可靠,可并行加密、一次一密、错误不传播、不需要初始化向量、不需要填充、适应任意长度的数据、简单、不用实现解密算法
缺点:主动攻击(错误不传播)、不适用于数据完整性认证
用途:面向数据流的通用传输、用于高速需求、适合随机存取数据的加解密
补:
1、初始化向量(IV)
初始化向量(IV,Initialization Vector)是许多工作模式中用于随机化加密的一块数据,因此可以由相同的明文,相同的密钥产生不同的密文,而无需重新产生密钥,避免了通常相当复杂的这一过程。
初始化向量与密钥相比有不同的安全性需求,因此IV通常无须保密,然而在大多数情况中,不应当在使用同一密钥的情况下两次使用同一个IV。对于CBC和CFB,重用IV会导致泄露平文首个块的某些信息,亦包括两个不同消息中相同的前缀。对于OFB和CTR而言,重用IV会导致完全失去安全性。另外,在CBC模式中,IV在加密时必须是无法预测的;特别的,在许多实现中使用的产生IV的方法,例如SSL2.0使用的,即采用上一个消息的最后一块密文作为下一个消息的IV,是不安全的。
2、填充 (密码学)
块密码只能对确定长度的数据块进行处理,而消息的长度通常是可变的。因此部分模式(即ECB和CBC)需要最后一块在加密前进行填充。有数种填充方法,其中最简单的一种是在平文的最后填充空字符以使其长度为块长度的整数倍,但必须保证可以恢复平文的原始长度;例如,若平文是C语言风格的字符串,则只有串尾会有空字符。稍微复杂一点的方法则是原始的DES使用的方法,即在数据后添加一个1位,再添加足够的0位直到满足块长度的要求;若消息长度刚好符合块长度,则添加一个填充块。最复杂的则是针对CBC的方法,例如密文窃取,残块终结等,不会产生额外的密文,但会增加一些复杂度。布鲁斯·施奈尔和尼尔斯·弗格森提出了两种简单的可能性:添加一个值为128的字节(十六进制的80),再以0字节填满最后一个块;或向最后一个块填充n个值均为n的字节。
CFB,OFB和CTR模式不需要对长度不为密码块大小整数倍的消息进行特别的处理。因为这些模式是通过对块密码的输出与平文进行异或工作的。最后一个平文块(可能是不完整的)与密钥流块的前几个字节异或后,产生了与该平文块大小相同的密文块。流密码的这个特性使得它们可以应用在需要密文和平文数据长度严格相等的场合,也可以应用在以流形式传输数据而不便于进行填充的场合。
注:
如有错误、侵权,请联系笔者更改删除!!!