对字节反转攻击的深入研究
2020-01-15 11:44:16 Author: mp.weixin.qq.com(查看原文) 阅读量:127 收藏

本文转自先知社区:

https://xz.aliyun.com/t/4552

前言

现在无论你是google还是百度,"字节反转攻击"的搜索结果整整几页都是"CBC字节反转攻击",看来字节反转攻击和CBC模式结合的想法已经可以说是深入人心,毕竟它的名字就叫"CBC反转字节攻击",但是不是这种攻击只有CBC分组模式才有呢?如果不用CBC分组模式,是不是就不存在这种重放攻击呢?笔者就这个问题进行了研究。

CBC

CBC模式下的字节反转攻击想必大家都不陌生了,这种攻击方式和分组加密的加密算法无关,是在处理明文加密后的密文块时出现了漏洞:前一块的密文可以影响后一块的明文。

这种图引用自国外一个大佬的文章,攻击手法是简单明了的:

C1 xor D(C2) = P2

那么我们令C1=C1 xor P2 xor P发送给服务器,其中P是我们想要篡改的明文,那么服务器会计算:

(C1 xor P2 xor P) xor D(C2) = (P2 xor D(C2)) xor P2 xor P xor D(C2) = P

也就达到了篡改的效果,下面是作者自己写的测试demo

运行结果为:

前16个字节乱码是因为我们篡改了C1后,对应的D(C1)也发生了改变

上实验室做实验:《CBC字节翻转攻击》

http://www.hetianlab.com/expc.do?ec=ECIDf328-1dc9-464c-918b-543b4a2d6590

通过实验了解CBC模式实现流程、异或运算的高级应用、python中crypto库的使用以及cbc字节翻转攻击的原理与代码实现

CFB

CFB模式可以将块密码转换为同步的流密码。流密码通俗点讲就是将明文逐字节的进行加密,它生成密钥流块,然后与明文块进行异或,然后获得密文。

先来看一下CFB的加解密模式吧,图片选自wikipedia:

那么按道理说,我们如果将密文的第一块反转,那么明文的第一块也应该被对应篡改,但事实并非如此,我们看这个测试demo

运行结果如下:

一片乱码?但是如果你仔细观察的话,会发现其实第一个字符已经被改成了2,那为什么后面的都是乱码呢?

我们修改一下代码,只更改第一个字符:

ct = strxor(strxor(cipher[:1], '1'*1), '2'*1)+cipher[1:]

程序运行结果如下:

第一个字符依然是2,但是为什么后面有15个字符没有被篡改呢?

其实,wikipedia的图并不能很好的展示CFB的工作模式 ,真实的CFB模式是这样的:

图中的Shift register代表的是移位寄存器,图中的s一般代表的是8bit也就是1字节,同时,如果我们更改了Ci,那么Ci是要被存放到下一个移位寄存器里的,并且这个Ci会一直保存在寄存器里,直到它慢慢从寄存器移出去,所以这个Ci会影响128/8=16个字节的明文,故最后有32-1-16=15个字节的明文没有受影响,所以,CFB模式也是有字节反转攻击的,只是我们每次只能改动一个字节,完整的攻击demo如下:

程序运行结果为:

OFB

OFB和CFB类似,也是将块密码转换为流密码的一种分组模式,加解密图示如下:

可以从解密模式发现,OFB模式和CBC模式比较相似,并且如果其中一块的密文进行了改变的话,并不会影响它后面的密文

所以类似的,OFB模式也存在字节反转攻击,同时由于流密码的性质,我们可以很简单的做到对明文任意长度字符的篡改

demo如下:

运行结果如下

虽然名字叫做"CBC字节反转攻击",但并不是只有CBC模式才会有这种攻击手法,CFB和OFB模式都是不能抵御这种攻击的,不能认为如果不用CBC模式以后就能完全避免这种密文重放攻击了。

2019原创干货集锦 | 掌握学习主动权

大家有好的技术原创文章

欢迎投稿至邮箱:[email protected]

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予200元-800元不等的稿费哦

有才能的你快来投稿吧!

了解投稿详情点击——重金悬赏 | 合天原创投稿涨稿费啦!

“阅读原文”一起来实验!

文章来源: http://mp.weixin.qq.com/s?__biz=MjM5MTYxNjQxOA==&mid=2652853312&idx=1&sn=98825010613e1926d0b96e68196fb019&chksm=bd59288d8a2ea19bdacaa9bf873110c849cf1e038e74f6f84bf4052dddfb466d8be8d74c01fc#rd
如有侵权请联系:admin#unsafe.sh