MD5是消息摘要算法的一种,它和SHA,HMAC是消息摘要算法的主要代表,其前身有MD2,MD3,MD4算法。
消息摘要算法又称为散列算法,其不可破解的核心在于散列函数的单向性,即可以通过散列函数得到结果,却不可能通过结果反推出其原始信息。这是消息摘要算法的安全性根本所在。如果用户输入的密码是123456789,则会得到25f9e794323b453885f5181f1b624d0这样的结果;如果有人拿到25f9e794323b453885f5181f1b624d0这样的结果,他是不可能反推出密码123456789的。
但是,总所周知的是,MD5已经被我国山东大学王小云教授攻破了。他是怎么做到这不可能的事呢?当然不是反推,而是使用的碰撞算法,具体来说就是,拿到25f9e794323b453885f5181f1b624d0这样的结果,用多种精心设计的字符串去试试,总有一个字符串经MD5加密后能得到25f9e794323b453885f5181f1b624d0这样的结果,这个字符串也许是真实密码,也是是别的,但它加密后可以得到和123456789加密后一样的效果。这就意味着,你给自己设定的密码,别人通过其他密码也可能通过验证!
其原因还是在于散列函数,不同的输入通过散列函数可能得到同一结果,虽然这个可能性较小。王教授成果的意义在于,以前号称用全世界所有计算机算一百年不能做到的,用他的办法用一台普通微机在数个小时内就能做到。这个很了不起,诸位如果有意可以去当他的研究生,这样就知道是怎么做的了。
那么,MD5还有存在的价值吗。当然有,因为破解者要破解成功有三个必要条件,一,知道算法;二,知道密钥;三,有大量数据供测试。如果把几种其它算法和MD5混合,破解者就容易困惑,再加上时间限制,破解也不是件容易的事。最后,还有理论上不可能破解的量子密码,如果它能实用化,则能达到真正意义上的不可破解。