CBC安全问题

安全问题

CBC比特翻转攻击

  • 已知明文攻击
  • 如果我们有一组明密文,就可以做到通过修改密文,使密文解密出来的特定位置字符变成我们想要的字符.
  • 经常和web一起出
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传CBC安全问题
  • 加密流程简述:f()为加密函数,g()为解密函数
    ①:明文1^iv=C1
    ②:f(C1)=密文1
    ③:密文1^明文2=C2
    ④:f(C2)=密文2
  • 攻击流程简述:
    CBC安全问题

①: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的填充;(填充的数值时填充字符的个数)
      填充规则为:
快长度 填充字节
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固定的常数
  • 只要知道一组明密文对,就可以解密所有密文