Yk2's Blog.

CBC安全问题

字数统计: 806阅读时长: 3 min
2019/11/01 Share

安全问题

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
    • 联立,密文C^C^密文^IV=M1^M0
    • IV=M1^M0^C
  • 故若能够得到两组相同的密文就可以得到IV

padding oracle攻击(CBC填充攻击)

  • 常出现在web题目中
  • 分组密码CBC模式的padding oracle攻击
    需要满足一下特定条件:
    • 加密是采用了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,L^R^K1
- L^R^K1,L^K1^K2
- L^K1^K2,R^K2^K3
- ……
- 每一轮都是可推理的,且每个的内容均为L^R^固定的常数
- 只要知道一组明密文对,就可以解密所有密文
CATALOG
  1. 1. 安全问题
    1. 1.1. CBC比特翻转攻击
    2. 1.2. CBC选择密文攻击
    3. 1.3. padding oracle攻击(CBC填充攻击)