安全问题
CBC比特翻转攻击
- 已知明文攻击
- 如果我们有一组明密文,就可以做到通过修改密文,使密文解密出来的特定位置字符变成我们想要的字符.
- 经常和web一起出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 - 加密流程简述:f()为加密函数,g()为解密函数
①:明文1^iv=C1
②:f(C1)=密文1
③:密文1^明文2=C2
④:f(C2)=密文2 - 攻击流程简述:
①:g(密文2)=C2
②:C2^密文1=明文1
③:明文1->所需明文a
④:f(明文a^密文1)=所需密文a
由于CBC中每一组明文都是按位异或和加密.故可选取对应位进行操作.
CBC选择密文攻击
- 通过CBC的选择密文攻击,可以很快的恢复出IV
- 明文每次加密前会和IV异或.IV每组会更新为上一组的密文.
- 待解密的密文为:C|C时:
- 密文C^C=明文1
- 密文C^IV=M0
- 联立,密文CC密文IV=M1M0
- IV=M1M0C
- 故若能够得到两组相同的密文就可以得到IV
padding oracle攻击(CBC填充攻击)
- 常出现在web题目中
- 分组密码CBC模式的padding oracle攻击
需要满足一下特定条件:- 加密是采用了PKCS5的填充;(填充的数值时填充字符的个数)
填充规则为:
- 加密是采用了PKCS5的填充;(填充的数值时填充字符的个数)
快长度 | 填充字节 |
---|---|
0 | 08 08 08 08 08 08 08 08 |
1 | 07 07 07 07 07 07 07 |
2 | 06 06 06 06 06 06 |
3 | 05 05 05 05 05 |
4 | 04 04 04 04 |
5 | 03 03 03 |
- 攻击者可以和服务器进行交互,可以提交密文,服务器会以某种返回信息告知客户端的padding是否正常.
- 攻击效果时在不清楚key和iv的时候解密任意给定的密文.
- Padding oracle攻击的原理主要是利用服务器再对padding进行检查的时候不同回显进行的,这是一种侧信道攻击.利用服务器对padding的检查,可以从末尾开始逐位爆破明文
如果接收端发现填充数字不符合长度要求,则不反悔,而符合成功就有返回,返回内容分别为应用层数据出错或返回执行成功,则攻击者可以构造一个R为密文,使得填充长度正确.
oracle
- 对某一个blok C2的解密
- M2=D(C2)^C1
- 可以在C2前拼接一共我们构造的F,向服务器发送F|C2解密,爆破最后一位明文的流程如下:
- 枚举M2最后以为X;
- 构造F的最后一位为x^1;
- 发送并观察padding的判断结果是否正确,错误返回1
Feistel结构
- 一种简单的题点
- 如果F函数是线性的->实现已知明文攻击
- F()->^Ki
- L,R
- R,LRK1
- LRK1,LK1K2
- LK1K2,RK2K3
- ……
- 每一轮都是可推理的,且每个的内容均为LR固定的常数
- 只要知道一组明密文对,就可以解密所有密文