本章概要
MD5消息摘要算法
MD5
出生日期:1992年公開
發(fā)明人:羅納德·李維斯特
算法簡介
是一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值hash value 用于確保信息傳輸?shù)耐暾恢滦?在RFC 1321中被加以規(guī)范 1992年8月,羅納德·李維斯特向ietf提交了一份重要文件,描述了算法的原理,由于md5算法的公開性和安全性,在90年代被廣泛使用在各種程序語言中,確保資料傳遞安全無誤
產(chǎn)生基礎(chǔ)
將數(shù)據(jù)(比如一段文字)運(yùn)算編程另一固定長度值,是散列算法的基礎(chǔ)原理 輸入不定長度信息,輸出固定長度128位,經(jīng)過程序流程,生成四個(gè)32位數(shù)據(jù),最后聯(lián)合起來成為一個(gè)128位散列,基本生成方式是:求余,取余,調(diào)整長度,與鏈接變量進(jìn)行循環(huán)運(yùn)算
存在隱患
1996年被證實(shí)存在弱點(diǎn),可以被加以破解,對(duì)于需要高度安全性的數(shù)據(jù),建議使用其他算法,比如SHA-1 2004年,證實(shí)MD5算法無法防止碰撞,因此無法適用于安全性認(rèn)證,比如SSL公開密鑰認(rèn)證或是 數(shù)字簽名等用途 2009年,謝濤和馮登國僅用了2exp(20.96)的碰撞算法復(fù)雜度,破解了MD5的碰撞抵抗,該攻擊在普通計(jì)算機(jī)上運(yùn)行只需要數(shù)秒鐘
MD5散列
一般128位的MD5散列被表示為32位16進(jìn)制數(shù)字,舉例:

應(yīng)用
MD5已經(jīng)廣泛使用在為文件傳輸提供一定的可靠性方面。例如,服務(wù)器預(yù)先提供一個(gè)MD5校驗(yàn)和,用戶下載完文件以后,用MD5算法計(jì)算下載文件的MD5校驗(yàn)和,然后通過檢查這兩個(gè)校驗(yàn)和是否一致,就能判斷下載的文件是否出錯(cuò) MD5亦有應(yīng)用于部分網(wǎng)上賭場以保證賭博的公平性,原理是系統(tǒng)先在玩家下注前已生成該局的結(jié)果,將該結(jié)果的字符串配合一組隨機(jī)字符串利用MD5 加密,將該加密字符串于玩家下注前便顯示給玩家,再在結(jié)果開出后將未加密的字符串顯示給玩家,玩家便可利用MD5工具加密驗(yàn)證該字符串是否吻合 例子: 在玩家下注骰寶前,賭場便先決定該局結(jié)果,假設(shè)生成的隨機(jī)結(jié)果為4、5、 6大,賭場便會(huì)先利用MD5 加密“4, 5, 6”此字符串并于玩家下注前告訴玩家;由于賭場是無法預(yù)計(jì)玩家會(huì)下什么注,所以便能確保賭場不能作弊;當(dāng)玩家下注完畢后,賭場便告訴玩家該原始字符串,即“4, 5, 6”,玩家便可利用MD5工具加密該字符串是否與下注前的加密字符串吻合。 該字符串一般會(huì)加上一組隨機(jī)字符串 (Random string),以防止玩家利用碰撞 (Collision) 解密字符串,但如使用超級(jí)電腦利用碰撞亦有可能從加上隨機(jī)字符串的加密字符串中獲取游戲結(jié)果。隨機(jī)字符串的長度與碰撞的次數(shù)成正比關(guān)系,一般網(wǎng)上賭場使用的隨機(jī)字符串是長于20字,有些網(wǎng)上賭場的隨機(jī)字符串更長達(dá)500字,以增加解密難度