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模式解读相关推荐

  1. 银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例

    文章目录 1.软加解密示例 2.知识点 ①ANSI X9.8 格式标准 ②主密钥,工作密钥加解密 基本概念: 加密种类: 3.密码键盘操作 4.工具 1.软加解密示例 ---------------- ...

  2. Python:AES+Base64的加密与解密(ECB模式)

    本篇记录使用 AES(ECB模式)+Base64 如何进行加密与解密 函数名称 函数使用注意事项 pkcs7padding() 该方法主要用于对需要加密的明文处理 因为明文 text 也必须为16字节 ...

  3. Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)

    问题场景: 业务需要对接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式, go的DES的默认隐藏了ECB模式, 因为go认为ECB不安全, 所以不建议使用,就隐藏了, 然而 ...

  4. 对称加密算法之分组加密的六种工作模式(ECB、CBC、PCBC、CFB、OFB、CTR)

    加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption).对称加密又分为分组加密和序列密码. (1)分组加密,也叫块加 ...

  5. 密码学 实现 DES 的工作模式 电码本模式ECB 密码分组链接模式CBC java 实现

    实现 DES 的工作模式 一. 实验目的 掌握 DES 算法的工作原理: 熟悉分组加密算法的工作模式. 二. 实验原理 DES 的基本原理 ppop 其入口参数有三个:key.data.mode. K ...

  6. iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现

    前言 最近和服务器同学对接口进行数据加解密时用到了AES加密.原本以为AES就一种加密形式,对接过程中才学习到AES不同模式.不同填充方式下,结果都不相同.因此去学习了一下AES加密的基本概念.实现原 ...

  7. python 3des加密_DES/3DES之ECB模式和CBC模式加解密 及 Python 实现

    概念说明 DES:Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法. 3DES:Triple DES,是三重数据加密算法(TDEA,Triple Data ...

  8. 分组加密五大常见模式(ECB、CBC、CFB、OFB、CTR)

    一.ECB ECB模式全称是Electronic CodeBook模式,在ECB模式中,将明文分组加密之后的结果将直接成为密文分组. ECB模式全称是Electronic CodeBook模式,在EC ...

  9. C++或C 实现AES ECB模式加密解密,支持官方验证

    本文主要介绍 AES 算法的加解密方法.本文使用的语言为 C++,调用的 AES 库为:cryptopp. 1 概述 AES 加密算法的介绍如下(摘自 WikiPedia): 高级加密标准(英语:Ad ...

  10. golang实现AES ECB模式的加密和解密

    最近有一个需求需要在golang中实现AES ECB模式的加密和解密,  看了一下官方文档和相关资料发现golang 官方包并没有完善的实现,于是自己尝试写了一个,本文中的AES算法是基于ECB模式, ...

最新文章

  1. 另外一些MySQL优化措施
  2. ITK:将内核应用于图像中的每个像素
  3. OpenCV向JNI层的参数转换
  4. mybatis中LIKE模糊查询的几种写法以及注意点
  5. mysql 根据当前时间戳_mysql timestamp类型 根据当前时间戳更新
  6. 关于苹果, 有多少事可以重提
  7. edgesForExtendedLayout ios7新特性
  8. 根据元素相对位置来控制滚动条
  9. 从网上搜集的几种数据分页的总结
  10. 通过ffmpeg将FLV文件转换为MP4
  11. 2021 年前端宝典【超三百篇】
  12. SDL Trados外部审阅无法正常导入并显示修订的问题
  13. ADI公司与B-Secur携手开发面向汽车工业的生物特征识别技术
  14. 抖音小店还能做吗?如何解决拍单问题?
  15. linux ctrl r 搜索,linux下用ctrl+r快速搜索history命令
  16. 最新小储云商城V1.782免授权源码
  17. Facebook对决谷歌:未来互联网王者之争
  18. 阿里百秀项目第二弹:准备工作
  19. 软件工程:“银弹”论
  20. 取词翻译软件哪个好?分享三款实用的取词翻译软件

热门文章

  1. MyBatis源码阅读(五) ---Mapper接口的获取过程
  2. Zookeeper Java客户端搭建
  3. Redis分布式锁之:RedLock
  4. Spring缓存切面源码解析
  5. 《R数据可视化手册》——3.8 绘制百分比堆积条形图
  6. Linux 内核与模块调试
  7. ubuntu下Qt cannot find -lGL错误的解决方法
  8. C#串口操作实际应用开发详解
  9. CMake使用总结,不断更新
  10. [2018.10.23 T1] 战争