使用md5collgen进行MD5碰撞实验

题目一

题目1:可在ubuntu主机上预先安装md5collgen,题目为“生成两个MD5哈希值一致但是文件内容不同的文件”。
所谓“文件内容不同但却有相同的哈希值”就是 碰撞。
在这个题目中,我们将生成两个具有相同MD5哈希值的不同文件。这两个文件的开始部分需要相同,即它们共享相同的前缀。我们可以使用md5collgen程序实现这一点,它允许我们提供具有任意内容的前缀文件。

md5collgen的原理

image.png
MD5将输入的数据按照64字节一组(M1-Mn)进行切分,然后在这些分组上进行迭代地计算。其核心是压缩函数,其接受两个输入,分别是64字节的数据分组和前一次迭代的输出,压缩函数compression function会输出128位的IHV(intermediate hash value),这个输出将在下一次迭代时参与运算。如果当前的迭代是最后一次,IHV就是最终的hash值。而第一次迭代IHV0的IHV的输入是固定值。

安装md5collgen

先从github下载md5collgen工具包源码,将其上传至ubuntu中(官网下载好像没makefile文件)
image.png
然后进行解压 unzip
image.png
sudo apt install build-essential
image.png
sudo apt install libboost-all-dev
image.png
然后执行make命,安装好md5collgen工具
image.png

利用md5collgen生成文件

在md5collgen-master下新建一个文本文件 prefix.txt(作为相同前缀的文件)
image.png
执行命令:

./md5collgen -p prefix.txt -o out1.bin out2.bin

image.png
目录下生成了对应的两个文件
image.png

diff out1.bin out2.bin
md5sum out1.bin
md5sum out2.bin

image.png
文件不一样,但哈希值一致。

hexdump -C out1.bin
hexdump -C out2.bin

在图形界面也可以看出,两个文件不一致
image.png
经观察可得两文件的前缀相同,文件内容有不同。通过分析md5collgen的原理可以明白形成这一现象原因。从prifix.txt中取前缀,若前缀不是64的倍数,则用零填充。md5collgen为两个输出文件生成128字节的内容,这两个输出文件就是在这128字节中存在部分差异。

题目二

新建一个文件source_code.c,用于存放源代码(并给定数组的内容)
image.png
执行编译:
image.png
编译后的结果:
image.png
在二进制文件中找到xyz数组的位置:

hexdump -C source_code

image.png
image.png
我们可以选择前 12480 个字节作为前缀prefix文件,中间12480到12608作为中间的128字节文件,后面第12609个字节到文件结束作为后缀suffix文件。

head -c 12480 source_code > prefix
tail -c +12609 source_code > suffix

image.png
前缀prefix文件:(部分)
image.png
后缀suffix文件:(部分)
image.png
用前缀prefix文件上运行md5collgen 来生成两个具有相同MD5散列值的输出(即数组内容相同):

./md5collgen -p task2_prefix -o task2_out1.bin task2_out2.bin

image.png

diff task2_out1.bin task2_out2.bin
md5sum task2_out1.bin
md5sum task2_out2.bin

image.png
可视化:
image.png
文件内容不同
image.png
哈希值相同

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值