CBC模式和ECB模式解读
1. CBC模式
CBC模式的全称:Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样互相连接在一起。
在CBC模式中,首先将明文分组和一个密文分组进行XOR运算,然后再进行加密。
CBC模式的加解密过程如下:
比较一下ECB模式与CBC模式的区别:
ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR。
2. 初始化向量
当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),通常缩写为IV。
一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
3. CBC模式的特点
明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即使明文分组1和明文分组2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了。
加密过程:在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。
解密过程:假设CBC模式加密的密文分组中有一个分组损坏了。在这种情况下,只要密文分组的长度没有发生变化,则解密时最多只有2个分组受到数据损坏的影响。见下图:
假设CBC模式的密文分组中有一些比特缺失了,那么此时即便只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。见下图:
4. 对CBC模式的攻击
假设主动攻击者的目的是通过修改密文来操纵解密后的明文。如果攻击者能够对初始化向量中的任意比特进行反转(将1变成0,将0变成1),则明文分组中相应的比特也会被反转。这是因为在CBC模式的解密过程中,第一个明文分组会和初始化向量进行XOR运算。见下图。
但是想对密文分组也进行同样的攻击就非常困难了。
例如,如果攻击者将密文分组1中的某个比特进行反转,则明文分组2中相应比特也会被反转,然而这一比特的变化却对解密后的明文分组1中的多个比特造成了影响,也就是说,只让明文分1中所期望的特定比特发生变化是很困难的。
5. 填充提示攻击
填充提示攻击是一种利用分组密码中填充部分来进行攻击的方法。
在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。
在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一攻击并不仅限于CBC模式,而是适用所有需要进行分组填充的模式。
2014年对SSL3.0 造成了重大影响POODLE攻击实际上就是一种填充示攻击。
6. 对初始化向量(IV)进行攻击
初始化向量(IV)必须使用不可预测的随机数。然而在SSL/TLS的TLS1.0版本协议中,IV并没有使用不可预测的随机数,而是使用上一次CBC模式加密时的最后一个分组。为了防御攻击者对此进行攻击,TLS1.1以上的版本中改为了必须显示传送IV。
7. CBC模式应用
确保互联网安全的通信协议之一SSL/TLS,就是使用CBC模式来确保通信机密性的,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。
CBC模式和ECB模式解读相关推荐
- 银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例
文章目录 1.软加解密示例 2.知识点 ①ANSI X9.8 格式标准 ②主密钥,工作密钥加解密 基本概念: 加密种类: 3.密码键盘操作 4.工具 1.软加解密示例 ---------------- ...
- Python:AES+Base64的加密与解密(ECB模式)
本篇记录使用 AES(ECB模式)+Base64 如何进行加密与解密 函数名称 函数使用注意事项 pkcs7padding() 该方法主要用于对需要加密的明文处理 因为明文 text 也必须为16字节 ...
- Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)
问题场景: 业务需要对接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式, go的DES的默认隐藏了ECB模式, 因为go认为ECB不安全, 所以不建议使用,就隐藏了, 然而 ...
- 对称加密算法之分组加密的六种工作模式(ECB、CBC、PCBC、CFB、OFB、CTR)
加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption).对称加密又分为分组加密和序列密码. (1)分组加密,也叫块加 ...
- 密码学 实现 DES 的工作模式 电码本模式ECB 密码分组链接模式CBC java 实现
实现 DES 的工作模式 一. 实验目的 掌握 DES 算法的工作原理: 熟悉分组加密算法的工作模式. 二. 实验原理 DES 的基本原理 ppop 其入口参数有三个:key.data.mode. K ...
- iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现
前言 最近和服务器同学对接口进行数据加解密时用到了AES加密.原本以为AES就一种加密形式,对接过程中才学习到AES不同模式.不同填充方式下,结果都不相同.因此去学习了一下AES加密的基本概念.实现原 ...
- python 3des加密_DES/3DES之ECB模式和CBC模式加解密 及 Python 实现
概念说明 DES:Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法. 3DES:Triple DES,是三重数据加密算法(TDEA,Triple Data ...
- 分组加密五大常见模式(ECB、CBC、CFB、OFB、CTR)
一.ECB ECB模式全称是Electronic CodeBook模式,在ECB模式中,将明文分组加密之后的结果将直接成为密文分组. ECB模式全称是Electronic CodeBook模式,在EC ...
- C++或C 实现AES ECB模式加密解密,支持官方验证
本文主要介绍 AES 算法的加解密方法.本文使用的语言为 C++,调用的 AES 库为:cryptopp. 1 概述 AES 加密算法的介绍如下(摘自 WikiPedia): 高级加密标准(英语:Ad ...
- golang实现AES ECB模式的加密和解密
最近有一个需求需要在golang中实现AES ECB模式的加密和解密, 看了一下官方文档和相关资料发现golang 官方包并没有完善的实现,于是自己尝试写了一个,本文中的AES算法是基于ECB模式, ...
最新文章
- 另外一些MySQL优化措施
- ITK:将内核应用于图像中的每个像素
- OpenCV向JNI层的参数转换
- mybatis中LIKE模糊查询的几种写法以及注意点
- mysql 根据当前时间戳_mysql timestamp类型 根据当前时间戳更新
- 关于苹果, 有多少事可以重提
- edgesForExtendedLayout ios7新特性
- 根据元素相对位置来控制滚动条
- 从网上搜集的几种数据分页的总结
- 通过ffmpeg将FLV文件转换为MP4
- 2021 年前端宝典【超三百篇】
- SDL Trados外部审阅无法正常导入并显示修订的问题
- ADI公司与B-Secur携手开发面向汽车工业的生物特征识别技术
- 抖音小店还能做吗?如何解决拍单问题?
- linux ctrl r 搜索,linux下用ctrl+r快速搜索history命令
- 最新小储云商城V1.782免授权源码
- Facebook对决谷歌:未来互联网王者之争
- 阿里百秀项目第二弹:准备工作
- 软件工程:“银弹”论
- 取词翻译软件哪个好?分享三款实用的取词翻译软件