加解密模式之CBC模式和ECB模式解读
1. CBC模式
CBC模式的全称:Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样互相连接在一起。
在CBC模式中,首先将明文分组和一个密文分组进行异或(XOR)运算,然后再进行加密。在这种方法中,每个密文块都依赖与它前边的所有明文块。
CBC模式的加解密过程如下:
优点:同样的原文生成的密文不一样。
缺点:串行处理数据,使得加密速度很慢。
2. ECB模式
ECB模式的全称:Electronic codebook, 即电子密码本。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。
ECB模式的加密过程如下:
优点:ECB模块可以并行处理数据
缺点:同样原文生成同样的密文,并不能很好地保护数据。
同时加密,如果原文一样,加密出来的密文也是一样的,因为它们的加密密钥key都是一样的。
比较一下ECB模式与CBC模式的区别:
ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR。
3. 初始化向量IV
当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),通常缩写为IV。
一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
4. CBC模式的特点
明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即使明文分组1和明文分组2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了。
加密过程:在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。
解密过程:假设CBC模式加密的密文分组中有一个分组损坏了。在这种情况下,只要密文分组的长度没有发生变化,则解密时最多只有2个分组受到数据损坏的影响。见下图:
假设CBC模式的密文分组中有一些比特缺失了,那么此时即便只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。见下图:
5. 对CBC模式的攻击
假设主动攻击者的目的是通过修改密文来操纵解密后的明文。如果攻击者能够对初始化向量中的任意比特进行反转(将1变成0,将0变成1),则明文分组中相应的比特也会被反转。这是因为在CBC模式的解密过程中,第一个明文分组会和初始化向量进行XOR运算。见下图。
但是想对密文分组也进行同样的攻击就非常困难了。
例如,如果攻击者将密文分组1中的某个比特进行反转,则明文分组2中相应比特也会被反转,然而这一比特的变化却对解密后的明文分组1中的多个比特造成了影响,也就是说,只让明文分1中所期望的特定比特发生变化是很困难的。
6. 填充提示攻击
填充提示攻击是一种利用分组密码中填充部分来进行攻击的方法。
在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。
在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一攻击并不仅限于CBC模式,而是适用所有需要进行分组填充的模式。
2014年对SSL3.0 造成了重大影响POODLE攻击实际上就是一种填充示攻击。
7. 对初始化向量(IV)进行攻击
初始化向量(IV)必须使用不可预测的随机数。然而在SSL/TLS的TLS1.0版本协议中,IV并没有使用不可预测的随机数,而是使用上一次CBC模式加密时的最后一个分组。为了防御攻击者对此进行攻击,TLS1.1以上的版本中改为了必须显示传送IV。
8. CBC模式应用
确保互联网安全的通信协议之一SSL/TLS,就是使用CBC模式来确保通信机密性的,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。
————————————————
版权声明:本文为CSDN博主「洒家肉山大魔王」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27706119/article/details/119985480
相关文章
- 深入浅出Seata的AT模式
- Android中MVP模式与MVC模式比較(含演示样例)
- LeetCode高频题:Android系统中WakeLock防止手机进入睡眠模式,统计出每个应用对WakeLock的不同贡献值
- Docker Swarm 维护模式
- 《游戏编程模式》一第7章 状态模式
- 正则表达式三种模式:贪婪模式、懒惰模式、独占模式
- Java单例模式和volatile关键字
- 【深度】分级诊疗模式下 中国医疗信息化产业的发展现状解读
- php设计模式-策略模式
- 【设计模式】C#设计模式:单例模式
- Java 23种设计模式详尽分析与实例解析之二--结构型模式
- 访问者模式(Visitor)
- 末端配送新模式,未来无人配送车能否取代骑手?
- 工厂方法模式
- 【设计模式】策略模式
- WCF系列教程之WCF消息交换模式之单项模式
- 让vim的在输入模式下现实光标不同
- 轻量级模式(Flyweight Pattern)