【密码学】分组密码

文章目录

      • 分组密码的模式
        • 分组密码与流密码
        • 模式
        • 明文分组与密文分组
      • ECB模式
        • ECB定义
        • ECB特点
        • 对ECB模式的攻击
          • 改变分组顺序攻击
      • CBC模式
        • CBC定义
        • 初始化向量IV
        • CBC特点
        • 对CBC模式的攻击
          • 对初始向量进行反转攻击
          • 填充提示攻击
      • CFB模式
        • CFB定义
        • 对CFB模式的攻击
          • 重放攻击
      • OFB模式
        • OFB定义
        • CFB模式与OFB模式的对比
      • CTR模式
        • CTR定义
        • 计数器的生成方法
        • OFB模式与CTR模式的对比
        • CTR特点
        • 错误与机密性
      • 五种模式对比

分组密码的模式

分组密码与流密码
  • 分组密码:每次只能处理特定长度的一块数据的一类密码算法,“一块”就称为分组,一个分组的比特数就称为分组长度
  • 流密码:是对数据进行连续处理的一类密码算法
  • 分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;但流密码是对一串数据流进行连续处理,因此需要保持内部状态
模式
  • 模式:分组密码只能加密固定长度的分组,但需要加密的明文长度可能会超过分组密码的分组长度,此时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。加密过程中迭代的方法就称为分组密码的模式
  1. ECB:电子密码本模式,Electronic CodeBook mode
  2. CBC:密码分组链接模式,Cipher Block Chaining mode
  3. CFB:密文反馈模式,Cipher FeedBack mode
  4. OFB:输出反馈模式,Output FeedBack mode
  5. CTR:计数器模式,CounTeR mode
明文分组与密文分组
  • 明文分组:分组密码算法中作为加密对象的明文,明文分组的长度与分组密码算法的分组长度是相等的
  • 密文分组:使用分组密码算法将铭文分组加密之后所生成的密文

ECB模式

ECB定义
  • 将明文分组加密之后的结果将直接成为密文分组

ECB

ECB特点
  • ECB模式是所有模式中最简单的一种,ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组
  • 只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的
对ECB模式的攻击
改变分组顺序攻击
  • ECB模式中,每个明文分组都各自独立地进行加密和解密,但这其实是一个很大的弱点
  • 若存在主动攻击者M,他能够改变密文分组的顺序,当接收者对密文进行解密时,由于密文分组的顺序被改变了,因此相应的明文分组的顺序也会被改变
  • 也就是说,攻击者M不需要破译密码,也不需要知道分组密码算法,只要知道哪个分组记录了什么样的数据就可以攻击成功

CBC模式

CBC定义
  • 将明文分组与前一个密文分组进行XOR运算,然后再进行加密

CBC

  • 若将一个分组的加密过程分离出来:ECB模式只进行了加密;CBC模式则在加密之前进行了一次XOR
    ECBCBC
初始化向量IV
  • 当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来替代“前一个密文分组”,这个比特序列成为初始化向量(Initialization Vector),通常缩写为IV
  • 一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量
CBC特点
  • 明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和明文分组2的值是相等的,密文分组1和密文分组2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了
  • 在CBC模式中,无法单独对一个中间的明文进行加密
  • 假设CBC模式加密的密文分组中有一个分组损坏了(如由于硬盘故障导致密文分组的值发生改变),这种情况下,只要密文分组的长度没有发生改变,则解密时最多只会有2个分组受到数据损坏的影响

CBC损坏

  • 假设CBC模式的密文分组中有一些比特缺失了(如由于通信错误导致没有收到某些比特),那么此时即使只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样缺失比特的位置之后的密文分组全部无法解密

CBC缺失

对CBC模式的攻击
对初始向量进行反转攻击
  • 假设攻击者M能够对初始化向量中的任意比特进行反转,则解密后得到的明文分组中相应的比特也会被反转,因为在CBC模式解密过程中,第一个明文分组会和初始化向量进行XOR运算

CBC反转

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

CFB模式

CFB定义
  • 前一个密文分组会被送回到密码算法的输入端,反馈指返回输入端
  • 在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量IV来代替,一般来说,需要在每次加密时生成一个不同的随机比特序列用作初始化向量
  • CFB模式中,明文分组和密文分组之间并没有经过“加密”,明文分组和密文分组之间只有一个XOR
  • CFB模式中,密码算法的输出相当于一次性密码本中的随机比特序列,由于密码算法的输出是通过计算得到的,并不是真正的随机数,因此CFB模式不能像一次性密码本那样具备理论上不可破译的性质
  • CFB模式中由密码算法所生成的比特序列称为密钥流,在CFB模式中,密码算法相当于用来生成密钥流的伪随机数生成器,儿初始化向量就相当于伪随机数生成器的“种子”
  • 在CFB模式中,明文数据可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式

CFB
CBCCFB

对CFB模式的攻击
重放攻击
  • 假设一条信息由7个密文分组组成,主动攻击者M将该消息中的后3个密文分组保存下来,第二天通信方发送内容不同的7个密文分组(假设发送发两次使用相同的密钥),攻击者M用保存好的后3个密文分组进行替换
  • 此时接收方进行解密时,前4个分组可以解密成正确的明文分组,第5个分组会出错,第6、7分组变成呗M替换的内容,此时M没有破解密码,就成功将以前的电文混入新的电文中,而第5个分组到底是通信错误还是被攻击了,接收方是无法做出判断的

CFB攻击

OFB模式

OFB定义
  • 在OFB模式中,密码算法的输出会反馈到密码算法的输入中
  • OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,这一点OFB与CFB很相似
  • OFB模式中也需要使用初始化向量IV,一般来说,需要在每次加密时生成一个不同的随机比特序列用作初始化向量

OFB

CFB模式与OFB模式的对比
  • 仅仅在于密码算法的输入
  • CFB模式中,密码算法的输入是前一个密文分组,也就是将密文分组反馈到密码算法中;OFB模式中,密码算法的输入则是密码算法的前一个输出,也就是将输出反馈给密码算法
  • 由于CFB模式中是对密文分组进行反馈的,因此必须从第一个明文分组开始按顺序进行加密,无法跳过明文1而先对明文2进行加密;相对地,在OFB模式中,XOR所需要的比特序列(密钥流)可以实现通过密码算法生成,和明文分组无关,只要提前准备好所需的密钥流,则在实际从明文生成密文的过程中,就完全不需要动用密码算法了,只要将明文与密钥流进行XOR即可

CFBOFB

CTR模式

CTR定义
  • 是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码
  • 每个分组对应一个逐次累加的计数器,并通过计数器进行加密来生成密钥流,最终密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR得到的

CTR

计数器的生成方法
  • 每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值
  • 当分组长度为16字节时,前8个字节为nonce,这个值在每次加密时必须都是不同的,后8个字节为分组序号,这个部分会逐次累加
  • 由于计数器的值每次都是不同的,因此每个分组中将计数器进行加密所得到的密钥流也是不同的,这种方法就是用分组密码来模拟生成随机的比特序列
OFB模式与CTR模式的对比
  • OFB模式是将加密的输出反馈到输入;CTR模式则是将计数器的值用作输入

OFBCTR

CTR特点
  • CTR模式的加密和解密使用了完全相同的结构,因此在程序实现上比较容易
  • CTR模式可以以任意顺序对分组进行加密和解密
  • 能够以任意顺序处理分组,能够实现并行计算
错误与机密性
  • 假设CTR模式的密文分组中有一个比特被反转了,则解密后明文分组中仅有与之对应的比特会被反转,这一错误不会放大
  • CTR模式中,主动攻击者M可以通过反转密文分组中的某些比特,引起解密后明文中的相应比特也发生反转

五种模式对比

模式名称优点缺点
ECBElectronic CodeBook mode简单快速;
支持并行计算;
明文中重复排列会反映在密文中;
通过删除、替换密文分组可以对明文进行操作;
对包含某些比特错误的密文进行解密时,对应的分组会出错;
不能抵御重放攻击;
CBCCipher Block Chaining mode明文中的重复排列不会反映在密文中;
解密支持并行计算;
能够解密任意密文分组;
对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;
加密不支持并行计算;
CFBCipher FeedBack mode不需要填充padding;
解密支持并行计算;
能够解密任意密文分组;
加密不支持并行计算;
对包含某些错误比特的密文进行解密时,第一个分组的相应比特以及后一个分组的全部比特会出错;
不能抵御重放攻击;
OFBOutput FeedBack mode不需要填充padding;
可事先进行加密解密的准备;
加密解密使用相同结构;
对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错;
不支持并行计算;
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转;
CTRCounTeR mode不需要填充padding;
可事先进行加密解密的准备;
加密解密使用相同结构;
对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错;
支持并行计算
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LocalAI】(13):LocalAI最新版本支持Stable diffusion 3,20亿参数图像更加细腻了,可以继续研究下

最新版本v2.17.1 https://github.com/mudler/LocalAI/releases Stable diffusion 3 You can use Stable diffusion 3 by installing the model in the gallery (stable-diffusion-3-medium) or by placing this YAML file in the model folder: Stable Diffusion 3 Medium 正…

PriorityQueue详解(含动画演示)

目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的?☆利用数组存储完全二叉树的好处? 4、PriorityQueu…

React AntDesign Layout组件布局刷新页面错乱闪动

大家最近在使用React AntDesign Layout组件布局后刷新页面时,页面布局错乱闪动 经过组件属性的研究才发现,设置 hasSider 为 true 就能解决上面的问题,耽搁了半天的时间,接着踩坑接着加油!!! …

pytorch实现的面部表情识别

一、绪论 1.1 研究背景 面部表情识别 (Facial Expression Recognition ) 在日常工作和生活中,人们情感的表达方式主要有:语言、声音、肢体行为(如手势)、以及面部表情等。在这些行为方式中,面部表情所携带的表达人类…

SQL找出所有员工当前薪水salary情况

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一个薪水表…

Debian Linux安装minikubekubectl

minikube&kubectl minkube用于在本地开发环境中快速搭建一个单节点的Kubernetes集群,还有k3s,k3d,kind都是轻量级的k8skubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具 这里使用Debian Linux演示,其他系统安装见官网,首先…

使用SpringCache实现Redis缓存

目录 一 什么是Spring Cache 二 Spring Cache 各注解作用 ①EnableCaching ②Cacheable ③CachePut ④CacheEvict 三实现步骤 ①导入spring cache依赖和Redis依赖 ②配置Redis连接信息 ③在启动类上加上开启spring cache的注解 ④ 在对应的方法上加上需要的注解 一 什么…

green bamboo snake

green bamboo snake 【竹叶青蛇】 为什么写这个呢,因为回县城听说邻居有人被蛇咬伤,虽然不足以危及生命,严重的送去市里了。 1)这种经常都是一动不动,会躲在草地、菜地的菜叶里面、果树上、有时候会到民房大厅休息&a…

Qt——系统

目录 概述 事件 鼠标事件 进入、离开事件 按下事件 释放事件 双击事件 移动事件 滚轮事件 按键事件 单个按键 组合按键 定时器 QTimerEvent QTimer 窗口事件 文件 输入输出设备 文件读写类 文件和目录信息类 多线程 常用API 线程安全 互斥锁 条件变量…

光纤传感器十大品牌

十大光纤传感器品牌-光纤光栅传感器厂家哪家好-Maigoo品牌榜

【chatgpt】train_split_test的random_state

在使用train_test_split函数划分数据集时,random_state参数用于控制随机数生成器的种子,以确保划分结果的可重复性。这样,无论你运行多少次代码,只要使用相同的random_state值,得到的训练集和测试集划分就会是一样的。…

导入别人的net文件报红问题sdk

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了

使用Flink CDC实时监控MySQL数据库变更

在现代数据架构中,实时数据处理变得越来越重要。Flink CDC(Change Data Capture)是一种强大的工具,可以帮助我们实时捕获数据库的变更,并进行处理。本文将介绍如何使用Flink CDC从MySQL数据库中读取变更数据&#xff0…

端到端自动驾驶的基础概念

欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.端到端自动驾驶的定义 1.1特斯拉FSD 1.2端到端架构演进 1.3大模型 1.4世界模型 1.5纯视觉传感器 2.落地的挑战 1.端到端自动驾驶的定…

MySQL----利用Mycat配置读写分离

首先确保主从复制是正常的,具体步骤在MySQL----配置主从复制。MySQL----配置主从复制 环境 master(CtenOS7):192.168.200.131 ----ifconfig查看->ens33->inetslave(win10):192.168.207.52 ----ipconfig查看->无线局域网适配器 WLA…

whiteboard - 笔记

1 drawio draw.io GitHub - jgraph/drawio: draw.io is a JavaScript, client-side editor for general diagramming. 2 demo 可以将XML数据保存到服务器上的data目录。需要在服务器端创建一个接收和处理POST请求的脚本,该脚本将接收到的SVG数据保存到指定的文件中。下面是…

libssh-cve_2018_10933-vulfocus

1.原理 ibssh是一个用于访问SSH服务的C语言开发包,它能够执行远程命令、文件传输,同时为远程的程序提供安全的传输通道。server-side state machine是其中的一个服务器端状态机。 在libssh的服务器端状态机中发现了一个逻辑漏洞。攻击者可以MSG_USERA…

基于CDMA的多用户水下无线光通信(3)——解相关多用户检测

继续上一篇博文,本文将介绍基于解相关的多用户检测算法。解相关检测器的优点是因不需要估计各个用户的接收信号幅值而具有抗远近效应的能力。常规的解相关检测器有运算量大和实时性差的缺点,本文针对异步CDMA的MAI主要来自干扰用户的相邻三个比特周期的特…

【c2】编译预处理,gdb,makefile,文件,多线程,动静态库

文章目录 1.编译预处理:C源程序 - 编译预处理【#开头指令和特殊符号进行处理,删除程序中注释和多余空白行】- 编译2.gdb调试:多进/线程中无法用3.makefile文件:make是一个解释makefile中指令的命令工具4.文件:fprint/f…

Git分支的状态存储——stash命令的详细用法

文章目录 6.6 Git的分支状态存储6.6.1 git stash命令6.6.2 Git存储的基本使用6.6.3 Git存储的其他用法6.6.4 Git存储与暂存区6.6.5 Git存储的原理 6.6 Git的分支状态存储 有时,当我们在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态&am…