CBC模式解读

2023-11-16

一 什么是CBC模式

CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起。

在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。

CBC模式加解密过程如下:

我们来比较一下ECB模式与CBC模式的区别

ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR。

二 初始化向量

当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),通常缩写为IV,一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。

三 CBC模式的特点

明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即使明文分组1和明文分组2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了。

加密过程:在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。

解密过程:假设CBC模式加密的密文分组中有一个分组损坏了。在这种情况下,只要密文分组的长度没有发生变化,则解密时最多只有2个分组受到数据损坏的影响。见下图:

假设CBC模式的密文分组中有一些比特缺失了,那么此时即便只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。见下图:

四 对CBC模式的攻击

假设主动攻击者的目的是通过修改密文来操纵解密后的明文。如果攻击者能够对初始化向量中的任意比特进行反转(将1变成0,将0变成1),则明文分组中相应的比特也会被反转。这是因为在CBC模式的解密过程中,第一个明文分组会和初始化向量进行XOR运算。见下图。

但是想对密文分组也进行同样的攻击就非常困难了。例如,如果攻击者将密文分组1中的某个比特进行反转,则明文分组2中相应比特也会被反转,然而这一比特的变化却对解密后的明文分组1中的多个比特造成了影响,也就是说,只让明文分1中所期望的特定比特发生变化是很困难的。

五 填充提示攻击

填充提示攻击是一种利用分组密码中填充部分来进行攻击的方法。在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一攻击并不仅限于CBC模式,而是适用所有需要进行分组填充的模式。

2014年对SSL3.0 造成了重大影响POODLE攻击实际上就是一种填充示攻击。

六 对初始化向量(IV)进行攻击

初始化向量(IV)必须使用不可预测的随机数。然而在SSL/TLS的TLS1.0版本协议中,IV并没有使用不可预测的随机数,而是使用上一次CBC模式加密时的最后一个分组。为了防御攻击者对此进行攻击,TLS1.1以上的版本中改为了必须显示传送IV。

七 CBC模式应用

确保互联网安全的通信协议之一SSL/TLS,就是使用CBC模式来确保通信机密性的,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CBC模式解读 的相关文章

随机推荐

  • 【数据结构】多叉树的深度优先遍历DFS和广度优先遍历BFS(含C++递归和非递归方式实现)

    文章目录 前言 1 深度优先遍历 1 2 先序遍历 1 2 1 C 递归实现 1 2 2 C 非递归实现 1 2 后序遍历 1 2 1 C 递归实现 1 2 2 C 非递归实现 2 广度优先遍历 2 1 C 递归实现 2 2 C 非递归实现
  • Ubuntu安装Eigen3

    从官网下载 http eigen tuxfamily org index php title Main Page 比如在cd git clone https gitlab com libeigen eigen git cd Eigen mk
  • 【Python】cryptography和pycryptodome库使用

    题目 1 使用cryptography模块 编写完整的AES CBC加解密函数 函数接口为 def encrypt CBC key plaintext iv def decrypt CBC key ciphertext iv 2 使用pyc
  • Java多线程程序:多线程模拟抢票

    public class BuyTicket extends Thread public static int tickets 20 Override public void run while sale synchronized publ
  • 【精华】经典的图像数据集介绍

    目录 1 经典的数据集介绍 1 1 ImageNet 1 2 PASCAL VOC 1 3 Labelme 1 4 COCO 1 5 SUN 1 6 Caltech 1 7 Corel5k 1 8 CIFAR Canada Institud
  • angular学习之路(一)开山篇

    1 ng app 定义angularJS的使用范围 2 ng init 变量 值 变量 值 初始化变量的值 有多个变量时 中间用分号隔开 3 ng model 变量 定义变量名 4 ng bind 变量 绑定变量名 获取该变量的数据 这里的
  • underlay和overlay? & 传统网络和数据中心网络 ?

    underlay和overlay 百度 Underlay 和 Overlay 是网络架构中两个常用的概念 用于描述不同层次或视角下的网络结构和通信方式 1 Underlay 底层网络 Underlay 是指基础网络层 即物理网络或基础网络架
  • B站马士兵python入门基础版详细笔记(5)

    前言 这是这篇文章是B站学习python入门基础班的视频的第五章内容 主要讲述的是循环结构 主要包括while语句和for in语句 一 range函数 这个函数生成的是一个整数序列 他的返回值是一个迭代器对象 所以直接print它是没有用
  • java gc 次数_JVM的分区+查看GC对象是否存活+3种GC算法+7种垃圾收集器+如何减少GC次数...

    一 JVM的分区 1 程序计数器 私有 程序计数器是一块较小的内存分区 你可以把它看做当前线程所执行的字节码的指示器 在虚拟机的概念模型里 字节码解释器工作时 就是通过改变计数器的值来选择下一条需要执行的字节码指令 程序技术器为线程私有 每
  • UNet3+详解

    目录 1 UNet3 解决的问题 1 UNet 2 UNet 2 UNet3 的创新点 3 UNet3 的结构体 1 编码层 2 解码层 a 跳跃连接 b 分类引导模块 CGM c 特征聚合机制 d 深监督 e 混合损失函数 4 UNet3
  • Supervisor使用备忘

    为什么要用Supervisor 从这里说起 服务器端要将程序以daemon运行 其目的是摆脱控制终端的信号影响 以免进程退出 Daemon化流程 int daemonize pid t pid fork if pid 0 exit 0 if
  • 更改Ansys Workbench的语言的方法

    如果没有学过日文 安装Ansys Workbench后出现如下界面 一定会感到很无助 如何把它改为英文界面呢 按下面步骤来 1 点击第三个菜单 2 再点击下拉菜单中的最后一个菜单 如下 3 在弹出对话框中 点击左边的第三项 图中红色矩形框框
  • 零基础学Java,最开始应该学什么?

    Java的知识面太广了 这里整理了一个思维导图 不是很全面 但足够硬核 先学最重要的 从浅到深 能够让你快速地学好Java 一 两个学习阶段 在介绍如何学好Java前 我们先把学习路线定一下 我把这个过程分成两个阶段 第一阶段 打好基础 先
  • MarkDown 高级操作

    目录 1 图片处理 2 插入音乐 3 插入视频 4 在页面内跳转 5 插入跳转链接 用新的窗口打开 6 设置不同的字体颜色 7 设置不同类型的字体 8 使用标准字体 9 添加背景色 10 多种矩阵形式输入 10 1 不带括号的 10 2 带
  • ue4中Pak文件中挂载的资源名称获取

    在pak文件中 会挂接很多资源 api也在变化 废话不多说 上代码 FPakPlatformFile GetPakPlatformFile FPakPlatformFile pakPlatformFile nullptr auto plat
  • 概念学习—机器学习

    概念学习 介绍 概念学习 假设的一般到特殊序 Find S 寻找极大特殊假设 变型空间和候选消除算法 表示 更简明的表示 关于变型空间和候选消除的说明 候选消除算法是否会收敛到正确的假设 归纳偏置 介绍 定义 概念学习是指从有关某个布尔函数
  • H.264的Slice及Slice类型

    一 基本概念 一个视频图像可编码成一个或更多个条带 每个条带包含整数个宏块 MB 即每个条带至少一个MB 最多时每个条带包含整个图像的宏块 总之 一幅图像中每个条带的宏块数不一定固定 设条带的目的是为了限制误码的扩散和传输 应使编码条带相互
  • 网络安全渗透测试之pingtunnel使用实验

    目录 一 实验环境准备 二 安装pingtunnel 一 在192 168 101 105 web服务器上安装pingtunnel 三 建立ICMP隧道 一 在web服务器上启动pingtunnel 二 在kali上设置转发 三 隧道渗透演
  • 白盒测试(程序流程图)

    白盒测试又称结构测试 透明盒测试 逻辑驱动测试或基于 代码的测试 白盒测试是一种 测试用例设计方法 盒子指的是被测试的 软件 白盒指的是盒子是可视的 你清楚盒子内部的东西以及里面是如何运作的 白盒 法全面了解程序内部逻辑结构 对所有逻辑路径
  • CBC模式解读

    一 什么是CBC模式 CBC模式的全称是Cipher Block Chaining模式 密文分组链接模式 之所以叫这个名字 是因为密文分组像链条一样相互连接在一起 在CBC模式中 首先将明文分组与前一个密文分组进行XOR运算 然后再进行加密