分组密码的模式——ECB、CBC、CFB、OFB、CTR
分组密码的模式
- 分组密码和流密码
- ECB模式
- CBC模式
- CFB模式
- OFB模式
- CTR模式
- 分组密码模式比较表
分组密码和流密码
分组密码是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组。一个分组的比特数就称为分组长度。
流密码是对数据流进行连续处理的一类密码算法。流密码一般以1比特、8比特或32比特等为单位进行加密和解密。
分组密码算法只能加密固定长度的分组,但需要加密的明文长度可能会超过分组密码的分组长度,这就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。迭代的方法就被称为分组密码的模式。
分组密码的模式主要有以下5种。
- ECB模式:Electronic CodeBook mode(电子密码本模式)
- CBC模式:Cipher Block Chaining mode(密码分组链接模式)
- CFB模式:Cipher FeedBack mode(密文反馈模式)
- OFB模式:Output FeedBack mode(输出反馈模式)
- CTR模式:CounTeR mode(计数器模式)
明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组是指使用分组密码算法将明文分组加密之后所生成的密文。
ECB模式
在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。
ECB模式的加密
ECB模式的解密
ECB模式中,明文分组和密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终将被转换为相同的密文分组。
安全性低,易攻击。
CBC模式
CBC模式的密文分组像链条一样相互连接在一起。
在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。
CBC模式的加密
CBC模式的解密
初始化向量
当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量,通常缩写为IV。一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
假设CBC模式加密的密文分组中有一个分组损坏了,例如由于硬盘故障导致密文分组的值发生了改变等,这种情况下,只要密文分组的长度没有发生变化,则解密时最多只会有2个分组收到数据损坏的影响。
假设CBC模式加密的密文分组中有一些比特缺失了,例如由于通信错误导致没有收到某些比特等,那么此时即使缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。
填充提示攻击是一种利用分组密码中的填充部分来进行攻击的方法。在分组密码中,当明文长度不为分组长度的整倍数时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充的数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的消息。这一攻击模式并不仅限于CBC模式,而是适用于所有需要进行分组填充的模式。
确保互联网安全的通信协议之一SSL/TLS,就是使用CBC模式来确保通信的机密性,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。
CFB模式
在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。
CFB模式的加密
CFB模式的解密
在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,但在CFB模式中,明文分组并没有通过密码算法来直接进行加密。在CFB模式中,明文分组和密文分组之间只有一个XOR。
在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量(IV)来代替,与CBC模式相同。
OFB模式
在OFB模式中,密码算法的输出会反馈到密码算法的输入中。
OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,这点与CFB模式相似。
OFB模式的加密
OFB模式的解密
OFB模式和CFB模式的区别仅仅在于密码算法的输入。
CFB模式中,密码算法的输入是前一个密文分组,也就是将密文分组反馈到密码算法中,因此被称为“密文反馈模式”;
OFB模式中,密码算法的输入是密码算法的前一个输出,也就是将输出反馈给密码算法,因此被称为“输出反馈模式”。
CTR模式
CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。最终的密文分组是通过将计数器加密的到的比特序列,与明文分组进行XOR而得到的。
CTR模式的加密
CTR模式的解密
计数器的生成方法,前8个字节为nonce,这个值在每次加密时必须时不同的。后8个字节为分组序号,这个部分逐次累加。
OFB模式与CTR模式的对比
- 两者都是流密码。
- OFB模式是将加密的输出反馈到输入,CTR模式是将计数器的值用作输入。
CTR模式的特点:
CTR模式的加密华为解密使用了完全相同的结构;可以以任意顺序对分组进行加密和解密;可以实现并行计算;在支持并行计算的系统中,CTR模式速度非常快。
分组密码模式比较表
模式 | 名称 | 优点 | 缺点 | 备注 |
---|---|---|---|---|
ECB模式 | Electronic CodeBook mode(电子密码本模式) | 简单、快速、支持并行运算(加密、解密) | 明文中的重复排列会反映在密文中;通过删除、替换密文分组可以对明文进行操作;对包含某些比特错误的密文进行解密时,对应的分组会出错;不能低于重放攻击。 | 不应使用 |
CBC模式 | Cipher Block Chaining mode(密码分组链接模式) | 明文的重复排列不会反映在密文中;支持并行计算(仅解密);能够解密任何密文分组 | 对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;加密不支持并行计算 | CRYPTREC推荐;《实用密码学》推荐 |
CFB模式 | Cipher FeedBack mode(密文反馈模式) | 不需要填充(padding);支持并行计算(仅解密);能够解密任意密文分组 | 加密不支持并行计算;对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;不能低于重放攻击 | CRYPTREC推荐 |
OFB模式 | Output FeedBack mode(输出反馈模式) | 不需要填充(padding);可实现进行加密、解密的准备;解密解密使用相同结构;对包含某些错误比特密文解密时,只有明文中相应的比特会出错 | 不支持并行计算;主动攻击者反转密文分组中的某些比特时,明文分组中相应的比特也会被反转 | CRYPTREC推荐 |
CTR模式 | CounTeR mode(计数器模式) | 不需要填充(padding);可实现进行加密、解密的准备;解密解密使用相同结构;对包含某些错误比特密文解密时,只有明文中相应的比特会出错;支持并行计算(加密、解密) | 主动攻击者反转密文分组中的某些比特时,明文分组中相应的比特也会被反转 | CRYPTREC推荐;《实用密码学》推荐 |
分组密码的模式——ECB、CBC、CFB、OFB、CTR相关推荐
- span class=red[置顶]/span分组对称加密模式:ECB/CBC/CFB/OFB缺CTR- -
一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式.在C#组件中实现的很多算法和Java都不太兼容,至少我发现RSA和AES/ ...
- 分组对称加密模式:ECB/CBC/CFB/OFB
一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式.在C#组件中实现的很多算法和Java都不太兼容,至少我发现RSA和AES/ ...
- 密码学专题 密钥生成|分组加密的模式 ECB|CBC|CFB|OFB
密钥生成 如何安全地生成密钥.即如何生成可信任的密钥,保证用户得到的密钥是安全的, 生成密钥的机器或程序是可信的. 如何生成安全的密钥.安全的密钥没有统一准确的定义,但一般来说是指密钥抗 猜测和抗穷举 ...
- 分组加密模式 ECB CBC OFB CFB ,分组加密填充
目录 分组加密模式 ECB模式 CBC模式 CFB/OFB都可以作为流加密 CFB模式 OFB模式 分组加密的填充 PKCS7 分组加密模式 多个分组加密互相之间如何关联 ECB模式 每个分组之间单独 ...
- 分组加密的四种模式(ECB、CBC、CFB、OFB)
加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption). 对称加密又分为分组加密和序列密码. 分组密码,也叫块加密( ...
- 分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式).CBC(Cipher-block chaining,密码块连接模式).PCBC(Prop ...
- 5、分组密码工作模式
目录 分组密码工作模式 ECB模式 CBC模式 CFB模式 OFB模式 CTR模式 参考: https://blog.csdn.net/zha_zha_yu/article/details/10916 ...
- 块加密 工作模式 ECB、CBC、PCBC、CFB、OFB、CTR
块加密 块加密,英文Block Cyper,又称分组加密,是一种常见的对称加密,具有代表性的块加密有DES,AES,3DES等.块加密的工作模式允许使用同一个分组密码密钥对多于一块的数据进行加密,并保 ...
- 信息安全工程师笔记-加密模式ECB、CBC、CFB、OFB、CTR
简述 DES和AES都属于分组密码,它们只能加密固定长度的明文.如果需要加密任意长度的明文,就需要对分组密码进行迭代,而 分组密码的迭代方法就称为分组密码"模式". 分组密码有很多 ...
最新文章
- ios 贝塞尔曲线 颜色填充_PS的3D颜色深度映射到球体模拟天线
- python2基础教程廖雪峰云-Python 基础教程
- 【CV】基于python和OpenCV构建智能停车系统
- 关于 运行root.sh 时出错误Timed out waiting for the CRS stack to start.的解决
- 【入门5】字符串(今天刷洛谷了嘛)
- 05-Prohibited package name: java异常原因
- 实现Exchange2003安全全集(下)
- FLASH、SDRAM
- 帆软报表跨域之插件开发中Controller中定义的方法实现CROS的GET跨域,且请求头带自定义属性
- html5 预渲染,VUE预渲染及遇到的坑_情愫_前端开发者
- linux SO文件
- java写企业员工信息管理系统
- kotlin-android-extensions扩展的导入
- FLUENT19.0基础入门与进阶仿真分析视频教程
- 工业过程建模与先进控制(十)MPC的MATLAB命令
- table 超级详细的 商品订单列表
- Fedora 20 的 r8168 与 rtl8723be 驱动
- 蛙蛙推荐:蛙蛙教你发明一种新语言之二--代码生成
- 在Matplotlib中将图片导出
- c语言编写图形登录窗口,C语言实现图形界面登陆窗口
热门文章
- centos hostname修改方法
- 360护心镜脚本分析及N种绕过方式
- 鸿蒙系统升级审核结果怎么查询,正式确认!华为给出结果,只要满足这个条件,即可升级鸿蒙系统...
- uni-app条件编译 解决各端差异
- PAT算法题——读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
- 美国雇主百强榜单,谷歌只排第七,第一竟然是...
- forEach,for in,for of
- 为什么飞机订座是起飞前一天选座,火车是买票的时候就选座了?——产品笔试题
- EXCEL中,怎们同时冻结首行和首列
- 使用 use_frameworks! 后项目YYCache库报错 Duplicate interface