博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分组加密算法CBC模式的 Padding Oracle Attack 与 Hash算法的Length Extention Attack 小记...
阅读量:4323 次
发布时间:2019-06-06

本文共 1042 字,大约阅读时间需要 3 分钟。

对Padding Oracle Attack与哈希扩展长度攻击想做个精炼总结,故作此记录。

 

  首先,这两个漏洞都与padding有关(不完美的技术细节总是容易出漏洞)。

  其次,这两个漏洞都是算法或算法模式本身的缺陷,但也都需要开发人员其他的一些疏忽才能被利用,例如Padding Oracle需要解密结果错误回显,Length Extention需要可修改的关键信息放在字符串后部。所以也都有开发层面的解决办法。

  最后,Padding Oracle的原因是错误回显的开启导致而已用户可以通过改变IV的方式一步步试出加解密中间值,最后再与真实IV运算得出明文,也可以通过此种方式将密文解密成任意指定明文(修改IV),整个过程不需要知道密钥,这种攻击可以归为旁敲侧击的侧信道攻击范畴。而Length Extention的原因是MD5、SHA-1等使用的Merkle–Damgård construction压缩算法,使得手动在明文后面添加padding之后,可以使用原来明文的hash值作为下一轮运算的输入,从而在不知道明文的情况下,构造出“明文+padding+somethingelse”形式的hash值,进而绕过某些鉴权判断。

 

一点疑惑:padding中的\0会不会被截断从而无法完成攻击?

 解答:一般不会。\0本质上是一个普通的char,只是被c选做字符串终结符了。c的字符串只是逻辑上的一个需求,并不是一个数据类型。因为c没有字符串类型,采用\0结束的字符数组的概念来表示字符串也是权宜之计,称为“c风格字符串”。

高级语言(C++、PHP、Python、Java等)开始有了真正的字符串类型。字符串对象有长度字段,因而不需要终结符(例如python中str="\x00\x00\x00\x00"),从而会将\0当做正常字符处理。

某些高级语言的低版本(PHP)曾经有过以\0作终结符的问题,这导致了上传的0截断问题。如何选取终结符是逻辑处理需要解决的问题,例如http消息格式里的\n,$,&,#等。

 

 

参考:

https://zh.wikipedia.org/wiki/%E9%95%BF%E5%BA%A6%E6%89%A9%E5%B1%95%E6%94%BB%E5%87%BB

 https://segmentfault.com/q/1010000005141633

转载于:https://www.cnblogs.com/rec0rd/p/7675831.html

你可能感兴趣的文章
session和cookie
查看>>
tftp 开发板ping不通PC机
查看>>
未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”
查看>>
Erdos
查看>>
docker初学
查看>>
面向对象的程序第三次实验作业
查看>>
Windows 安装启动apache时出现错误的解决方法
查看>>
Object.prototype.toString()
查看>>
int.Parse()与int.TryParse()
查看>>
c#调用钩子
查看>>
最近最少使用队列算法
查看>>
ONOS:负载均衡路由算法及应用开发(二)
查看>>
把js写到链接a标签的href中和写到onclick中的区别
查看>>
压缩解压缩命令
查看>>
MySQL基于binlog主从复制
查看>>
HDU 1394(归并求逆序对)
查看>>
配置 Windows 下的 nodejs C++ 模块编译环境 安装 node-gyp
查看>>
我和Socket的第一次亲密接触
查看>>
2016/09/22
查看>>
2016/09/02
查看>>