@shellex说: 没关系,意思到了就行了。

自己试试MD5碰撞生成器

N久以前,王小云同学找到了能构造出能导致MD5碰撞的算法,也就是不同的明文,所得的md5值是一样的。貌似很难,原理上是这样的,特别是对我这样没有搞过密码学的同学来说。但是看看这里吧,其实体验一下很容易。

这些同学基于王小云同学的理论,加以改动,有了如下我可以体验的成果。

这里给出了一个快速生成碰撞的程序,叫MD5 Collision Generator。啊,这个生成器根据所谓的构造前缀碰撞法可以生成两个不同的文件,而这两文件的md5 sum却是一样的。

MD5 Collision Generator(win32 .exe)

MD5 Collision Generator(source)

需要boost库,我没有,就没有编译了。直接wine。

$ wine cmd5.exe
MD5 collision generator v1.5
by Marc Stevens (http://www.win.tue.nl/hashclash/)

Allowed options:
-h [ --help ]           Show options.
-q [ --quiet ]          Be less verbose.
-i [ --ihv ] arg        Use specified initial value. Default is MD5 initial
value.
-p [ --prefixfile ] arg Calculate initial value using given prefixfile. Also
copies data to output files.
-o [ --out ] arg        Set output filenames. This must be the last option
and exactly 2 filenames must be specified.
Default: -o msg1.bin msg2.bin

$ wine cmd5.exe -p a.txt -o 1.out 2.out
MD5 collision generator v1.5
by Marc Stevens (http://www.win.tue.nl/hashclash/)

Using output filenames: '1.out' and '2.out'
Using prefixfile: 'a.txt'
Using initial value: 1ff51986786fcd387467c376774e77b8

Generating first block: ...
Generating second block: S00....................
Running time: 4.409 s
$ md5sum 1.out
6b6a97ba4b60721f6d3a7cba989bdb3f  1.out
$ md5sum 2.out
6b6a97ba4b60721f6d3a7cba989bdb3f  2.out
$ diff 2.out
diff: 在`2.out'后缺失操作数
diff: 用 `diff --help' 来获得更多的信息
$ diff 1.out 2.out
二进制文件1.out和2.out有差异

唔,看吧。1.out 和 2.out的md5 sum都是6b6a97ba4b60721f6d3a7cba989bdb3f,但是它们是不一样的文件。a.txt是前缀文件,具体是起什么作用的我就不知道咯,但是我知道a.txt里面的内容会被copy到两个输出文件里面去。

这些同学还构造出了两个可执行文件(http://www.win.tue.nl/hashclash/SoftIntCodeSign/),两个文件执行的动作完全不一样,但是通过这个构造前缀碰撞法,就可以通过添加一段附加数据使最后它们的md5校验一样。方法具体是什么嘛…他们给了论文,可以看看(估计看不懂)。

受此影响的同学:

  • 使用md5作为文件/通讯安全校验的同学(因为改动可以被伪造了,赶紧换别的算法)

不受此影响的同学:

  • 使用md5作为口令加密的同学(因为从数学上证明md5是不可逆的,当然不是我证明的)
  1. On July 21, 2008 at 1:29 pm

    不错,在开源世界里,还是大有用途的。

    Notify
  2. On July 21, 2008 at 2:38 pm
    回忆 :

    能不能做个在 DOS下的啊 wine很不了解
    如果我那2个不同的程序 能不能通过这个软件来进行MD5碰撞

    Notify
  3. On July 21, 2008 at 2:50 pm

    [quote comment="221"]能不能做个在 DOS下的啊 wine很不了解
    如果我那2个不同的程序 能不能通过这个软件来进行MD5碰撞[/quote]
    1. 这本来就是windows下的控制台程序(我纠正你一点,控制台程序不是dos程序)。wine是linux下运行windows PE可执行文件的程序。你在windows下直接在cmd执行就好
    2. 貌似,要做到这一点,你需要去看看他们的论文。

    Notify
  4. On July 21, 2008 at 2:51 pm

    [quote comment="220"]不错,在开源世界里,还是大有用途的。[/quote]
    怎么说呢,我觉得影响不是很大吧

    Notify
  5. On July 21, 2008 at 8:55 pm
    回忆 :

    我是说 wine 下语法不是怎么清楚 所以没看懂 如果是DOS 对我们常耍windos的人直观些

    Notify
  6. On July 21, 2008 at 9:15 pm

    [quote comment="225"]我是说 wine 下语法不是怎么清楚 所以没看懂

    如果是DOS 对我们常耍windos的人直观些[/quote]
    ….看起来你没搞清楚…

    Notify
  7. On July 21, 2008 at 10:14 pm

    回忆同学,你就把它当DOS程序好了,效果是一样的。

    nl是荷兰的吧?刚看了一下那PDF文档,里面的数学公式把我吓得立马关掉了。哈哈!

    ShelleX同学,你看的懂吗?

    Notify
  8. On July 21, 2008 at 10:37 pm

    [quote comment="229"]回忆同学,你就把它当DOS程序好了,效果是一样的。

    nl是荷兰的吧?刚看了一下那PDF文档,里面的数学公式把我吓得立马关掉了。哈哈!

    ShelleX同学,你看的懂吗?[/quote]

    那个….我没看懂。呵呵…不是搞这行的。

    Notify
  9. On July 21, 2008 at 11:34 pm
    回忆 :

    也就是说那个软件只是演示用的 不能让2个不同的程序生成一样的MD5码 是这样吗?

    Notify
  10. On July 22, 2008 at 11:08 am

    [quote comment="232"]也就是说那个软件只是演示用的 不能让2个不同的程序生成一样的MD5码 是这样吗?[/quote]
    貌似是这样的

    Notify
  11. On January 13, 2010 at 12:26 am
    清风剑 :

    其实既然可以伪造程序,理论上也可以伪造密码,前提是密码的前缀被猜中

    Notify

Leave a Reply