AES加密与攻击
AES加解密及攻击方式
AES三大要素
0X01密钥
有128位,192位,256位,对应的AES128,AES192,AES256。128位安全性最低,性能最高
0X02填充
AES将明文分组后再进行加密,每个分组长128bit,若长度不对就要填充
有四种填充模式:
1 | NoPadding: 不做任何填充,但是要求明文必须是16字节的整数倍。 |
需要注意的是,如果在AES
加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。
0X03模式
AES提供五种工作模式:ECB,CBC,CFB,OFB,CTR
ECB模式(电子密码本)
优点:1.简单;
2.有利于并行计算;
3.误差不会被传送;
缺点:
1.不能隐藏明文的模式;
2.可能对明文进行主动攻击;
工作原理
相同的明文会被加密成相同的密文,本质就是一个巨大的明密文对应表,当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。
攻击原理
攻击者可以不破译密文,而是直接操纵密文进行攻击。
如明文为:A向B转账10000元,分组为:分组1 付款人账号,分组2 收款人账号,分组3 转账金额
加密后为:密文1 密文2 密文3
攻击者拿到密文,直接更换密文1和2。更换后就变成了2向1转账10000元。
CBC模式
优点:
1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
缺点:
1.不利于并行计算;
2.误差传递;
3.需要初始化向量IV
工作原理
加密过程
IV是初始化的一个向量,每次加密的初始化向量都是随机产生的。
每次加密之前明文都先与之前的密文做异或,所以即使明文分组一样得到的密文也不一样。
解密过程:
如果解密过程中有一个密文分组损坏了(长度不变),那么就只会最多有两个分组收影响。如上图中的密文分组2损坏,就只会影响明文分组2和3.
如果解密过程中有一个密文分组的比特缺失了(长度变了),那么后面所有分组解密都受影响,因为后面的分组将会错位。
攻击原理
1.填充提示攻击Padding Oracle Attack
填充提示攻击是一种利用分组密码中填充部分来进行攻击的方法。在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一攻击并不仅限于CBC模式,而是适用所有需要进行分组填充的模式。
2.字节翻转攻击
可以通过操纵密文分组的一部分来改变下一组解密后的明文为我们想要的字符。如图
想要改变解密后的明文分组2,可以操纵密文1,改变其中的某个字节,从而实现攻击
那么怎么改变呢?
首先我们有Plain2=decrypt(Cipher2) XOR Cipher1
则plain2 XOR cipher1=decrypt(cipher2) ……..①
**要让plain2变成’a’**,就可以改变cipher1,假设改成’x’
则’x‘ XOR ‘a’=decrypt(cipher2)
带入①得:’x‘ XOR ‘a’=plain2 XOR cipher1
则有x=plain2 XOR cipher1 XOR ‘a’
解得cipher1=plain2 XOR cipher1 XOR ‘a’
这是对某个明文分组的,对分组里的某些字节也是同理。
3.对初始化向量(IV)进行攻击
初始化向量(IV)必须使用不可预测的随机数。然而在SSL/TLS的TLS1.0版本协议中,IV并没有使用不可预测的随机数,而是使用上一次CBC模式加密时的最后一个分组。为了防御攻击者对此进行攻击,TLS1.1以上的版本中改为了必须显示传送IV。
CFB模式
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.误差传送:一个明文单元损坏影响多个单元;
3.唯一的IV;
工作原理
OFB模式
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.对明文的主动攻击是可能的;
3.误差传送:一个明文单元损坏影响多个单元;
工作原理
CTR模式
全称Counter模式(计数器模式)
加密过程
解密过程
参考:https://www.cnblogs.com/adylee/archive/2007/09/14/893438.html