长度延展攻击

附加实验

长度延展攻击

在密码学中长度延展攻击就是指攻击者通过已知的hash(message1)和message1的长度,从而能够知道hash(message1‖message2)的值。其中‖ 表示的是连接符。并且攻击性并需要知道message1到底是什么。

上一节我们讲到的MD结构,是将消息分成一个一个的block,前一个block 运算出来的值会跟下一个block再次进行运算,这种结构可以很方便的进行长度延展攻击。前提是我们需要知道原消息的长度。

我们举个例子,假设我们有下面的请求:

Original Data: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo Original Signature: 6d5f807e23db210bc254a28be2d6759a0f5f5d99

上面的例子是给编号为1的用户发送鸡蛋馅的华夫饼,并附带了消息签名,以保证消息的正确性。这里消息签名使用的MAC算法。

假如恶意攻击者想把waffle的值从eggo修改成为liege。

那么新的数据将会是这样的:

count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo&waffle=liege

为了对该新消息进行签名,通常,攻击者需要知道该消息签名使用的密钥,并通过生成新的MAC来生成新的签名。但是,通过长度扩展攻击,可以将哈希(上面给出的签名)作为输入,并在原始请求已中断的地方继续进行hash输出,只要知道原始请求的长度即可。

如果考虑到padding(消息填充)的影响的话,我们还需要恢复原始消息的填充内容,然后在恢复过后的内容之后再添加我们的攻击代码:

New Data: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x28&waffle=liege

这样我们就可以得到新的MAC值:

New Signature: 0e41270260895979317fff3898ab85668953aaa2

长度拓展攻击 (理解)

长度扩展攻击 是当一个攻击者通过添加一个后缀来修 改一个消息,但仍然能够指出消息的Hash值,这里有两种类型 的长度扩展攻击。符号||表示链接。

类型一:如果Digest(Msg1)=Digest(Msg2),并且Len(Msg1)= Len(Msg2),消 息 Msg1 ¹ Msg2,则 Digest(Msg1 ‖ Sufx)= Digest(Msg2‖Sufx)。

类型二:假设一个原始消息Msg,攻击者不知道消息的内 容,给定 Len(Msg),填充消息 X,Digest(Msg),对于一个适当 的后缀,攻击者可以计算出Digest(Msg‖Sufx)。

通过消息的填充可以抵抗第一类型的攻击;第二类的攻 击可以通过大的内部状态来预防。链接变量循环的Hash结构 中使用了消息填充,可以抵抗第一类型的攻击;链接变量长度 n 远大于Hash值长度 l(n > 2l) ,也就是说Hash值长度小于链接 变量长度,使得计算 Msg‖Sufx 的 Hash 值时,无法连接。因 此,可以抵抗第二类长度扩展攻击。

参考:

https://blog.csdn.net/weixin_43749051/article/details/104233885

https://zhuanlan.zhihu.com/p/392339959

posted @ 2023-05-28 22:39  B1smarck  阅读(30)  评论(0编辑  收藏  举报