AES加密算法的五种加密模式
米扑博客在上一篇博客应用了《PHP 对称加密AES算法》,本文将详细介绍AES加密算法的五种加密模式,略作探究。
若想深入了解AES原理,并实现之,可参见米扑博客的下一篇《AES 加密算法的详细介绍与实现》
AES 算法简介
AES(Advanced Encryption Standard,高级加密标准),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
AES对称加密算法的加密和解密的密钥(密钥K)是相同的,米扑科技的项目、微信小程序加密传输等就是用这个加密算法的,具体的加密流程如下图:
AES是基于数据块的加密方式,每次处理的数据是一块16字节,当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度。
分组加密有几种方式分别是:
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。
CFB/OFB实际上是一种反馈模式,目的也是增强破解的难度。
ECB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量。
AES 数学理论基础
更多详见:AES算法之理论与编程结合篇
AES 五种加密模式
AES分组密码在加密时明文分组的长度是固定的,而实用中待加密消息的数据量是不定的,数据格式可能是多种多样的。
为了能在各种应用场合安全地使用分组密码,通常对不同的使用目的运用不同的工作模式。
一、电码本模式(ECB)
将整个明文分成若干段相同的小段,然后对每一小段进行加密
优点:操作简单,易于实现;分组独立,易于并行;误差不会被传送。——简单,可并行,不传送误差。
缺点:掩盖不了明文结构信息,难以抵抗统计分析攻击。——可对明文进行主动攻击。
二、密码分组链模式(CBC)
先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密
优点:能掩盖明文结构信息,保证相同密文可得不同明文,所以不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL和IPSec的标准。
缺点:
1)不利于并行计算;
2)传递误差——前一个出错则后续全错;
3)第一个明文块需要与一个初始化向量IV进行抑或,初始化向量IV的选取比较复杂。
初始化IV的选取方式:固定IV,计数器IV,随机IV(只能得到伪随机数,用的最多),瞬时IV(难以得到瞬时值)
IV是做什么用的呢?
初始向量IV(Initialization Vector)它的作用和MD5的“加盐”有些类似,目的是防止同样的明文块始终加密成同样的密文块。
三、输出反馈模式(OFB)
密码算法的输出(指密码key而不是密文)会反馈到密码算法的输入中,OFB模式并不是通过密码算法对明文直接加密,而是通过将明文分组和密码算法的输出进行XOR来产生密文分组。
优点:隐藏了明文模式;结合了分组加密和流密码(分组密码转化为流模式);可以及时加密传送小于分组的数据。
缺点:不利于并行计算;需要生成秘钥流;对明文的主动攻击是可能的。
四、计数器模式(CTR)
完全的流模式,将瞬时值与计数器连接起来,然后对此进行加密产生密钥流的一个密钥块,再进行XOR操作
优点:不泄露明文;仅需实现加密函数;无需填充;可并行计算。
缺点:需要瞬时值IV,难以保证IV的唯一性。
对比CBC和CTR
1)CBC需要填充;CTR不用填充。
2)CBC不可并行;CTR可并行速度快。
3)CBC需要实现加密和解密函数;CTR实现简单,仅需实现加密函数。
4)鲁棒性:CBC强于CTR——使用重复瞬时值,CBC会泄露初始明文块,CTR会泄露所有信息。
如果有好的瞬时值选择策略,采用CTR,否则采用CBC。
如加密成绩单,可选用CTR,因为学号唯一,可作为瞬时值。
五、分组密码填充
目的:将明文填充到满足分组大小,解密后再把填充去掉。
如何填充:缺几个字节填充几个自己的几(如缺5个字节,填充5个字节的5);
如果不需要填充,则添加一个分组,分组中填充分组大小(如分组大小为64,填充16个字节的16)
分组密码模式的安全性
任何分组密码模式都存在信息的泄露,没有一个是完美的,任何分组模式都可能会泄露信息,这只是一个概率的问题。
碰撞概率计算:
M个明文块,块长为N,以两个块组成一对,
不同块的对数为:M(M-1)/2
两个块相等的概率为:1/2的n次方
密文块相等的数量期望为:M(M-1)/2的n+1次方。
则当M(M-1)=2的n+1次方时候,即M约等于2的n/2次方时发生碰撞的概率约等于1。
例如:分组长度为64,则当块数为2的32次方时,即加密数据2的32次方*64bit=256G时便会发生碰撞。
结论
分组密码的安全不仅和秘钥长度有关还和分组长度有关。
参考推荐:
AES 加密算法的详细介绍与实现(推荐)
Python 常用加密算法 base64, md5, sha1
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-06-09 05:30:42
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: AES加密算法的五种加密模式 (米扑博客)