一个寄存器有几个字节_对字节反转攻击的深入研究

本文转自先知社区:

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

前言

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

CBC

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

b4c53451954aa089ccbe304128a1dbac.png

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

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

3fdb39961475445112f14133a5ea93ed.png

运行结果为:56a3ed29067663983e46b26f00400992.png

前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:

a79256f2e64df0fca2738b0565829a1b.png

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

f65dce1c4e4312c30598d172d750eb3a.png运行结果如下:

401b2efff5e62bbf55f981768c1ac6bc.png

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

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

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

程序运行结果如下:

f0d86a4ffdc2b89d607bd07e60f7d4ff.png

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

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

967ade22851b19949caeacd31f5b7c02.png

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

6922d48e87c25023c5e6adc57f7081c9.png

程序运行结果为:f145f005da8c74284346e2c51ac9cad4.png

OFB

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

ee362bf70379375e8f5ab572d3a810fd.png

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

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

demo如下:

47a028f9a55d5e105a81f00be57d02db.png

运行结果如下b71254228c48b07d7f1b90c00c83dfb0.png

总结

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

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

大家有好的技术原创文章

欢迎投稿至邮箱:edu@heetian.com

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

有才能的你快来投稿吧!

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

f7b99d4526fa952f11b477970dd38ef7.gif

aeb69911395f4565eef6f657a05c2820.png 826fc58cfdb305f376fac4fbf677b5f3.gif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值