MD5是消息摘要算法的一種,它和SHA,HMAC是消息摘要算法的主要代表,其前身有MD2,MD3,MD4算法。
消息摘要算法又稱為散列算法,其不可破解的核心在于散列函數的單向性,即可以通過散列函數得到結果,卻不可能通過結果反推出其原始信息。這是消息摘要算法的安全性根本所在。如果用戶輸入的密碼是123456789,則會得到25f9e794323b453885f5181f1b624d0這樣的結果;如果有人拿到25f9e794323b453885f5181f1b624d0這樣的結果,他是不可能反推出密碼123456789的。
但是,總所周知的是,MD5已經被我國山東大學王小云教授攻破了。他是怎么做到這不可能的事呢?當然不是反推,而是使用的碰撞算法,具體來說就是,拿到25f9e794323b453885f5181f1b624d0這樣的結果,用多種精心設計的字符串去試試,總有一個字符串經MD5加密后能得到25f9e794323b453885f5181f1b624d0這樣的結果,這個字符串也許是真實密碼,也是是別的,但它加密后可以得到和123456789加密后一樣的效果。這就意味著,你給自己設定的密碼,別人通過其他密碼也可能通過驗證!
其原因還是在于散列函數,不同的輸入通過散列函數可能得到同一結果,雖然這個可能性較小。王教授成果的意義在于,以前號稱用全世界所有計算機算一百年不能做到的,用他的辦法用一臺普通微機在數個小時內就能做到。這個很了不起,諸位如果有意可以去當他的研究生,這樣就知道是怎么做的了。
那么,MD5還有存在的價值嗎。當然有,因為破解者要破解成功有三個必要條件,一,知道算法;二,知道密鑰;三,有大量數據供測試。如果把幾種其它算法和MD5混合,破解者就容易困惑,再加上時間限制,破解也不是件容易的事。最后,還有理論上不可能破解的量子密碼,如果它能實用化,則能達到真正意義上的不可破解。