数据块加密模式以及IV的意思
(本文资料主要来自:http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)
目前流行的加密和数字认证算法,都是采用块加密(block cipher)方式(注:还有一种叫 stream cipher,流式加密)。就是将需要加密的明文分成固定大小的数据块,然后对其执行密码算法,得到密文。数据块的大小通常采用跟密钥一样的长度。
加密模式在加密算法的基础上发展出来,同时也可以独立于加密算法而存在。加密算法,如DES、AES等不多的几种,目前采用最多的是AES。而加密模式是定义怎样通过重复利用加密算法将大于一个数据块大小的明文转化为密文。目前利用较多的加密模式有以下几种:
• ECB:Electronic Code Book(电子码本模式)
• CBC:Cipher Block Chaining(密码块链模式)
• CTR:Counter(计数器模式)
此外,还有其他的一些模式,本文中将不做介绍。
• CFB:Cipher Feedback(密码反馈模式)
• OFB:Output Feedback(输出反馈模式)
电子码本模式(ECB)
这是一种最简单的加密模式,只是将明文分块,并将加密算法应用于数据块,没有任何其他的前后处理。加密和解密流程如下图所示:
在ECB加密模式下,各个数据块的加解密是完全独立的,因此各个数据块的处理可以完全平行地进行,易于用硬件实现,达到很高的处理性能。但ECB有一个致命的弱点,也即不能隐藏明文数据的特定模式。在数据模式中包含较多有用信息时,不用破解就可以发现很多信息。下面就是一个用ECB对一个图像文件加密的典型例子,主要信息实际上已经泄漏了。
另外,由于相同的明文总是得到相同的密文,因此不能抵挡回放攻击(Playback Attack)。比如说,可能不能窃取到你的密码信息,只要通过监视偷录到密码加密后的数据,就可以通过回放进入到你的网上账户。
为了解决以上两个问题,就需要对加密后的数据进行二次处理,以破坏其中的数据模式,同时达到相同的明文在不同时刻加密得到不同的密文,以有效阻止回放攻击。
密码块链模式(CBC)
CBC的基本思路是在明文的各个模块加密之前,与另一个选定的数据块执行一次异或操作,有效地破坏明文数据中的模式。为了保持所选的数据块的随机性,在CBC中选择了前一个数据块的密文。但是对第一个数据块,因为没有前一个数据块的加密结果,需要引入一个初始向量(Initialization Vector: IV)作为选定的数据块。加解密流程如下图所示:
从上述流程图可以看出,CBC的最大问题是各个数据块的加密必须按顺序进行,但解密是可以平行进行的。
CBC的还有一个有趣的特点是,即使中间有一个密文数据块丢失,这只影响它后面的一个数据块的解密,此后的数据块还是可以正确解密的。这个特点引入了一个解决IV选择的思路:Explicit Initialization Vector。在明文之前加一个随机数据块,然后用一个随机的IV对它加密。IV和这随机数据块并不通知到解密侧。在解密侧,第一个数据块由于缺少IV信息,不能正确解密,但其后的数据块都可以正确解密。由于第一个数据块是为了加密而引入的内容,因此可以得到完整的明文内容。
上述Linux企鹅用CBC加密后的数据就非常接近伪随机数。如下图所示:
计数器模式(CTR)
CTR模式的加解密流程如下图所示。
CTR模式解决问题的思路与CBC等不同,它是对一个构建成的数据块施行加密操作,然后再用生成的密文与明文进行异或操作,生成最后的密文。由于对于各个模块的加解密操作都是独立的,因此可以平行处理。
在CTR模式中,加密操作用的构建数据块由两部分构成:Nonce和Counter。为了保证安全性,通常要求Nonce在一个Key的使用周期内保持唯一。在能够保证时间同步的系统中,经常选择时间作为Nonce。
另外,在CTR处理中,不需要对明文进行pad补0操作。
CTR模式广泛用在各种系统中,在互联网和物联网中广泛使用的CCM模式的加解密部分用的就是CTR模式。
数据块加密模式以及IV的意思的更多相关文章
- openssl之aes加密(源码分析 AES_encrypt 与 AES_cbc_encrypt ,加密模式)
首先要了解AES加密是什么,以及几种加密模式的区别.之后才是编程.具体的编程案例,在下面的链接. openssl之aes加密(AES_cbc_encrypt 与 AES_encrypt 的编程案例) ...
- 参考别人的代码写的aes加密,记录一下(AES,ECB模式,填充PKCS5Padding,数据块128位,偏移量无,以hex16进制输出)
package org.jimmy.autosearch2019.test; import java.security.SecureRandom; import javax.crypto.Cipher ...
- DES加密模式详解
DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...
- AES块加密与解密
AES块加密与解密 解密目标 在CBC和CTR两种模式下分别给出十篇加密的样例密文,求解密一篇特定的密文 解密前提 全部密文及其加密使用的key都已给出 加密的方法遵循AES的标准 解密过程分析 实验 ...
- 无线路由器的加密模式WEP,WPA-PSK(TKIP),WPA2-PSK(AES) WPA-PSK(TKIP)+WPA2-PSK(AES)。
目前无线路由器里带有的加密模式主要有:WEP,WPA-PSK(TKIP),WPA2-PSK(AES)和WPA-PSK(TKIP)+WPA2-PSK(AES). WEP(有线等效加密)WEP是Wired ...
- Aes加密算法加密模式介绍
本文转自:https://www.jianshu.com/p/582d3a47729a AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中 ...
- DES算法与四种加密模式的代码实现(C++语言)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Love_Irelia97/article/ ...
- [编码解码] 关于AES加解密中CBC模式的IV初始化向量的安全性问题
copy from : https://www.jianshu.com/p/45848dd484a9 前段时间,在研究HLS的AES加密,由于一个地方电视台的HLS流有AES加密,在查看了相关的加解密 ...
- AES加密模式
https://baike.baidu.com/item/高级加密标准/468774 AES加密模式 对称/分组密码一般分为流加密(如OFB.CFB等)和块加密(如ECB.CBC等).对于流加密,需要 ...
随机推荐
- Unity3d + PureMVC框架搭建
0.流程:LoginView-SendNotification()---->LoginCommand--Execute()--->调用proxy中的函数操作模型数据--LoginProxy ...
- Ant多渠道批量打包
由于我现在已经用更好的gradle了,所以关于ant我只是简单的讲一讲,如果想学gradle请到我的博客中查看 http://www.cnblogs.com/uncle2000 ant的配置请自行百度 ...
- OpenCV学习:实现简单的图像叠加
本实例使用简单的线性叠加方法来实现两幅图像的叠加,主要使用的知识如下: 1)线性融合 2)addWeighted函数 //! computes weighted sum of two arrays ( ...
- Oracle收购Apiary来加强其API集成云
Oracle宣布计划于1月19日收购Apiary,一家专注于API设计和协作的API管理公司.Apiary最为人所知的是API flow,其API管理平台. Oracle并没有宣布计划 ...
- cesium可视化空间数据2
圆柱圆锥体 <!DOCTYPE html> <html> <head> <!-- Use correct character set. --> < ...
- 关于JavaScript中的this
1.关于this的误会. 误会(1):this指向所在函数本身. 我们常常会对this产生各种误会,比如说我们可能认为this会指向所在函数本身,但实际上并非如此. function foo (){ ...
- JsonConvert.DeserializeAnonymousType
string JsApiTicketString = string.Empty; using (StreamReader reader = new StreamReader(response.GetR ...
- Android问题集锦之三十四:android studio导入项目下载gradle-x.x.x-all.zip
每每打开github上的项目,都会先下载gradle.每一个项目都有自己的gradle构建程序,可是打开一个新项目就又一次下载gradle对于网络较差的情况真是苦不堪言.所以我们能够用已经下载好的放到 ...
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指仅仅能从人(Person)这端载入身份证端(IdCard),可是反过来.不能从身份 ...
- day26<网络编程>
网络编程(网络编程概述) 网络编程(网络编程三要素之IP概述) 网络编程(网络编程三要素之端口号概述) 网络编程(网络编程三要素协议) 网络编程(Socket通信原理图解) 网络编程(UDP传输) 网 ...