当前位置: 首页 > news >正文

密码学学习记录(三)

密码学学习记录(三)

《图解密码技术》[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.rkmt.cn/news/8879.html

相关文章:

  • 知行合一
  • 深入解析:解锁AI智能体:上下文工程如何成为架构落地的“魔法钥匙”
  • 小狼毫雾凇拼音安装部署
  • Linux 内核VRF
  • 使用FFmpeg转换m4a
  • 提升多屏监控体验/新增辅屏预览功能/轻松实现跨屏实时监控/支持高达500路多个屏幕同时显示
  • [Java SE/文件系统/IO] 核心源码精讲:java.io.File
  • 【ROS2】 忽略局域网多机通信导致数据接收的bug - 教程
  • 在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境
  • 重新理解12306:它卖的从来不是“库存”,而是“状态”
  • 基于Python+Vue开发的房产销售管理系统源码+运行步骤
  • WinSCP从Windows传文件到Linux,文件名为中文显示乱码
  • Oracle中case when函数和decode函数
  • Jmeter生成随机数
  • 实用指南:【Linux篇章】再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!
  • 第四章:大模型(LLM)】08.Agent 教程-(7)使用 LangGraph 的作文评分架构
  • 详细介绍:您必须知道的 10 大 Highcharts 性能优化技巧—— 提升加载速度与交互体验的实战建议
  • PHP8.5 Pipeline Operator 你应该了解的 8 个特性
  • Nvidia Orin DK 本地 ollama 主流 20GB 级模型 gpt-oss, gemma3, qwen3 部署与测试 - 实践
  • 实用指南:C语言基础【20】:指针7
  • WebSockets与Socket.io渗透测试实战指南
  • 深入解析:spring boot3.0整合rabbitmq3.13
  • mcp-server-chart chart mcp 服务
  • 元推理:人和事物,都是针对性的存在着与必然因果,残缺之美
  • 人和事物,都是针对性的存在着与必然因果,残缺之美
  • Linux驱动适配I2C/SPI例子
  • [重要] PySimpleGU控件函数用法整理
  • 使用XState测试分布式微服务的完整指南
  • 某些外审专家的意见,真是臭不可闻
  • 大模型赋能的具身智能:自主决策和具身学习技术最新综述