密码学学习记录(三)

news/2025/9/21 10:58:20/文章来源:https://www.cnblogs.com/seikei/p/19103287

密码学学习记录(三)

《图解密码技术》[1]学习记录

密码算法可以分为分组密码(block cipher)和流密码

分组密码只能加密固定长度的明文,因为不知道明文的长度,所以一般需要对分组密码进行迭代,而迭代的方法就被称为分组密码的模式(mode),每一段固定长度称为分组(block),一个分组的比特数称为分组长度(block length),例如DES和三重DES的分组长度为64比特。

流密码则可以对数据流连续处理,一般以1比特、8比特或32比特为单位进行加密或解密

分组密码

分组密码的主要模式有:

  • ECB 模式:Electronic CodeBook mode(电子密码本模式 )
  • CBC 模式:Cipher Block Chainingmode(密码分组链接模式)
  • CFB 模式:Cipher FeedBack mode(密文反馈模式 )
  • OFB 模式:Output FeedBack mode(输出反馈模式)
  • CTR 模式:CounTeR mode(计数器模式)

在所有的分组密码工作模式中,ECB(电子密码本)模式是最直观的一种:当明文较长时,将其划分为多个等长的块,再对每个块分别进行加密。然而,ECB也是最不安全的一种模式,很容易导致一系列安全漏洞,因此在实践中应尽量避免使用。

ECB模式

明文和密文是一一对应的关系,因此很容易就能看出规律,将密文中的重复组合作为线索,就有可能破译出密码,因此ECB模式存在一定风险。

flowchart LR A[明文分组] --> B((加密)) --> C[密文分组]

对ECB模式的攻击

因为ECB模式是对明文分组后加密,而分组长度是固定的,因此攻击者甚至都不需要解密就可以改变解密后的明文,也就是调换分组顺序(或者删除和复制密文分组)就可以实现攻击。

CBC模式

加密方式

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

graph LR subgraph test[CBC模式] A[明文分组] --> B{XOR运算} B --> C((加密)) C --> D[密文分组] E[前一个密文分组] --> B end

由于第一个明文分组前面不存在密文分组,因此需要提供一个分组长度的比特序列来代替“前一个密文分组”,

称为初始化向量(initialization vector, IV), 一般来说,每次加密使用的初始化向量都是随机的。

因为CBC模式每个分组的加密都要依赖前一个密文分组,所以中间如果存在密文分组比特缺失,会导致密文分组长度发生变化,进而导致后面分组出现变化以至于无法解密。

对CBC模式的攻击

攻击者可以对初始化向量进行比特反转,也就是比特反转攻击,导致对应明文分组解密后的相应的比特也反转。

应用实例

通信协议之一IPsec,使用的CBC模式来确保通信机密性。

CFB模式

将前一个密文分组加密后再和明文分组进行XOR运算得到密文

flowchart TDsubgraph test[CFB模式]A[前一个密文分组] --> B((加密))C[明文分组] --> D{XOR}B --> DD --> E[密文分组]end

同理,和CBC模式一样,CFB模式也需要IV,也就是初始化向量

“前一个密文分组”使用密码算法进行加密后得到的比特序列称为 密钥流(key stream) 。

明文分组可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式。

对CFB模式的攻击

可以使用 重放攻击(reply attack)

截获第一次的密文分组,当发送者再次发送消息的时候将密文分组替换成第一次的密文分组,接收到信息的人不知道是传输错误还是被修改,此时要做出正确判断需要用到消息认证码,

OFB模式

输出反馈模式,将初始化向量经过加密后与明文分组进行XOR运算得到密文分组

flowchart TBIV[初始化向量] --> ENC0[加密]ENC0 --> ENC1[加密]ENC1 --> ENC2[加密]ENC2 --> ENC3[加密]ENC0 --> XOR0[XOR]ENC1 --> XOR1[XOR]ENC2 --> XOR2[XOR]ENC3 --> XOR3[XOR]subgraph Plaintext[明文]P1[明文分组1]P2[明文分组2]P3[明文分组3]P4[明文分组4]endP1 --> XOR0P2 --> XOR1P3 --> XOR2P4 --> XOR3subgraph Ciphertext[密文]C1[密文分组1]C2[密文分组2]C3[密文分组3]C4[密文分组4]endXOR0 --> C1XOR1 --> C2XOR2 --> C3XOR3 --> C4

OFB和CFB的算法很相似,只是和明文分组进行XOR运算的输入不同

CTR模式

CTR模式是一种通过将逐次累加的计数器加密来生成密钥流的流密码

flowchart TBsubgraph CTR_process[CTR模式]CTR0[计数器 CTR] --> ENC0[加密]CTR1[计数器 CTR+1] --> ENC1[加密]CTR2[计数器 CTR+2] --> ENC2[加密]CTR3[计数器 CTR+3] --> ENC3[加密]ENC0 --> XOR0[XOR]ENC1 --> XOR1[XOR]ENC2 --> XOR2[XOR]ENC3 --> XOR3[XOR]P1[明文分组1] --> XOR0P2[明文分组2] --> XOR1P3[明文分组3] --> XOR2P4[明文分组4] --> XOR3XOR0 --> C1[密文分组1]XOR1 --> C2[密文分组2]XOR2 --> C3[密文分组3]XOR3 --> C4[密文分组4]end

计数器的生成方法

每次加密都会生成不同的值(nonce),当分组长度为16字节时(128比特),计数器一般是下面这种形式。

flowchart LRsubgraph CTR[计数器结构]NONCE[66 1F 98 CD 37 A3 8B 4B<br/>nonce]COUNTER[00 00 00 00 00 00 00 01<br/>分组序号]endNONCE --- COUNTER

前8个字节为nonce,每次加密都不同,后八个字节为分组序号,会逐次累加。

分组密码模式比较表

模式 名称 优点 缺点 备注
ECB模式 Electronic CodeBook电子密码本模式 ·简单
·快速
·支持并行计算(加密、解密)
·明文中的重复排列会反映在密文中
·通过删除、替换密文分组可以对明文进行操作
·对包含某些比特错误的密文进行解密时,对应
的分组会出错
·不能抵御重放攻击
不应使用
CBC模式 Cipher Block Chaining
密文分组链接模式
·明文的重复排列不会反映在密文中
·支持并行计算(仅解密)
·能够解密任意密文分组
·对包含某些错误比特的密文进行解密时,第一
个分组的全部比特以及后一个分组的相应比特会出错
·加密不支持并行计算
推荐使用
CFB模式 Cipher-FeedBack
密文反馈模式
·不需要填充(padding)
·支持并行计算(仅解密)
·能够解密任意密文分组
·加密不支持并行计算
·对包含某些错误比特的密文进行解密时,第一个
分组的全部比特以及后一个分组的相应比特会出错
·不能抵御重放攻击
现在已不使用
推荐用CTR模式代替
OFB模式 Output- FeedBack
输出反馈模式
·不需要填充( padding )
·可事先进行加密、解密的准备
·加密、解密使用相同结构
·对包含某些错误比特的密文
进行解密时,只有明文中相
对应的比特会出错
·不支持并行计算
·主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转
推荐用CTR模式代替
CTR模式 CountTeR
计数器模式
·不需要填充( padding )
·可事先进行加密、解密的准备
·加密、解密使用相同结构
·对包含某些错误比特的密文
进行解密时,只有明文中相
对应的比特会出错
·支持并行计算(加密、解密)
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转 推荐使用

参考文献


  1. 结城浩. 图解密码技术[M]. 周自恒,译. 第2版. 北京:人民邮电出版社, 2014. ↩︎

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

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

相关文章

详解scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别

scheduleAtFixedRate:是以period为间隔来执行任务的,如果任务执行时间小于period,则上次任务执行完成后会间隔period后再去执行下一次任务;但如果任务执行时间大于period,则上次任务执行完毕后会不间隔的立即开始…

模拟输入的过程

模拟输入的过程一、ADC 是什么? ADC 的全称是 Analog-to-Digital Converter,中文叫模数转换器。 它的作用就像一位翻译官,负责将现实世界中连续的模拟信号“翻译”成计算机(MCU)能够理解和处理的离散的数字信号。…

基于Redisson和自定义注解的分布式锁实现策略

要实现基于Redisson和自定义注解的分布式锁策略,我们需首先理解Redisson。Redisson是一个基于Redis的高级Java对象映射库,其内部封装了分布式数据结构和同步服务,使得在分布式环境中操作Redis变得非常方便。 以下是…

CCPC2025网络赛 游记

队友超快砍完签到,我全场挂机没作用,3t寄了。省流 队友超快砍完签到,我全场挂机没作用,3t寄了。9.20 内含剧透,请vp后再来。 赛前 比赛开始前登录机器,发现我点不进去比赛页面,一顿查询之后发现队长机是叶神,不…

深入解析:Python进阶第三方库之Numpy

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

17.生成器和推导式 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

知行合一

都说,人赚不到认知之外的钱,这句话是真理。这些年,做生意创业的过程中,也发现了一个法则——寒门的孩子想改命,只有一条路,叫改脑,升认知。当我见到一个人时,只需要了解一下,他当下每天时间用在哪里,在跟谁在…

Manim实现水波纹特效

本文将介绍如何使用ManimCE框架实现一个水波纹特效,让你的数学动画更加生动有趣。 1. 实现原理 水波纹特效通过WaterRipple类实现,这是一个自定义的Animation子类。让我们从代码角度来分析其实现原理: 1.1. 核心数据…

CSP 2025 S1 游记

CSP 2025 S1 游记想到这可能是我最后一个赛季打 OI ,还是留下点东西记录 暑假 由于没有认真考虑过考不上XJ本部的情况,所以没有三连签,之后填的是杭高、学紫。结果tmd连杭高都没上,遂至学紫。学校举办了十天“夏令…

深入解析:解锁AI智能体:上下文工程如何成为架构落地的“魔法钥匙”

深入解析:解锁AI智能体:上下文工程如何成为架构落地的“魔法钥匙”pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

JS之使用for...of赋值失败的原因分析

原代码为for (let tab of tabList.value) {const subFormData = subOrderListMap.value[tab.subFormWebUuid];debuggerif (subFormData) {tab.formStatus = "已完成";tab = { ...subFormData, ...tab };} }这…

Linux /lib/modules/$(uname -r)/ 目录功能作用详解

Linux /lib/modules/$(uname -r)/ 目录功能作用详解Linux 系统中的 /lib/modules/$(uname -r)/目录非常重要,它承载着与当前运行内核版本严格对应的​​内核模块​​及其相关的管理文件。理解这个目录,对你高效管理…

《建筑的永恒之道》第 27 章:道之核心

从你至此所读列的看起来,仿佛建筑的生活以及它们充满生气时所具有的永恒特征可以简单地靠使用模式语言来创造。若是人们有了一种有活力的语言,仿佛其建筑行为所产生的东西都将是有生气的,仿佛城市的生活可以简单地靠…

软件工程第二次作业_个人项目

Github连接: Ender39831/3123004694: homework ](https://github.com/Ender39831/3123004694)这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience这个作业要求在哪里 https://e…

Linux命令大全(档案管理)

Linux命令大全(档案管理)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

小狼毫雾凇拼音安装部署

I. 资源链接 小狼毫官网:RIME | 中州韻輸入法引擎 雾凇拼音仓库:iDvel/rime-ice

Chapter 3 Resize and Cropping

img = cv2.imread(images/lambo.png) # (462, 623, 3) print(img.shape)# 先是width(x轴),然后是height(y轴),可以看出 resize 是放大或缩小并不是裁剪 imgResized = cv2.resize(img, (300, 200)) # 这里是He…

详细介绍:java中常见的几种排序算法

详细介绍:java中常见的几种排序算法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

Linux 内核VRF

Linux 内核VRFVirtual Routing and Forwarding (VRF) 由路由表+网络设备组成。 加载vrf内核模块 modprobe vrf 基本操作 # 创建并拉起vrf设备 # 自动创建路由表1 ip link add vrf1 type vrf table 1 ip link set dev v…

使用FFmpeg转换m4a

在Linux下可以使用FFmpeg将m4a文件转换为mp3文件,如下 ffmpeg -i input.m4a -vn -acodec libmp3lame -ab 320k output.mp3其中-i 是输入文件 -vn 是不包括视频 -acodec libmp3lame 是指定 LAME MP3 解编码器 -ab 320k…