SEEDLAB2.0-MD5 Collision Attack Lab

MD5 Collision Attack Lab

Task1生成有相同md5hash的两个不同文件
首先两个文件有相同的前缀,使用md5collgen就可以实现这一点,不论任意内容都可以有相同前缀,该程序工作流程如下
在这里插入图片描述

给出一个前缀文件prefix.txt,将会输出两个文件out1.bin,out2.bin
在这里插入图片描述

然后可以使用md5sum校验每个输出文件的hash是否相同
在这里插入图片描述

Task2理解md5的性质
在这里插入图片描述

Md5将输入的数据按照64字节一组进行切分,然后在这些分组上进行迭代地计算。其狠心是压缩函数,其接受两个输入,分别是64字节的数据分组和前一次迭代的输出,压缩函数compression function会输出128位的IHV(intermediate hash value),这个输出将在下一次迭代时参与运算。如果当前的迭代是最后一次,IHV就是最终的hash值。而第一次迭代IHV0的IHV的输入是固定值。
基于其如何工作的,我们可以得到md5算法的性质:给两个输入M和N,如果MD5(M)=MD5(N),那么对于任意输入T,都有MD5(M||T) =MD5(N||T),||表示拼接。
这意味着如果M和N有相同的hash,添加相同的后缀T将会让两个输出有相同的hash值。不仅md5有这个性质,其他的hash算法也有。
可以使用cat命令来连接两个文件(二进制文件、文本文件都可以)

Task3
可以把可执行文件分成三部分
在这里插入图片描述

我们可以使用md5collgen生成两个有相同md5hash值的文件,使用P和Q分别代表其output的第二部分(各有128字节)
因此我们有
在这里插入图片描述

基于前面提到的性质,给他们加上相同的后缀,得到的hash值依然是相同的,即
在这里插入图片描述

所以我们只需使用P和Q来提到数组的128字节,这样我们就可创建有相同hash的两个不同二进制文件。它们的输出是不同的,因为他们每个都会打印出有不同内容的数组。

可以使用bless查看二进制文件并找到数组的位置。
在切分二进制文件时可以使用head,tail。

Task4 制作两个行为不同的程序
Task3中只是打印的内容不容,其执行的还是相同的指令序列。
对于那些先是对文件md5,然后对hash进行签名的证书来说,通过hash碰撞就有可能实现给恶意软件签名的效果。
方法类似于task3,原理如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值