MD5是否將會被SHA-1取而代之?
問:許多組織已經用SHA-1算法取代了MD5算法,那么MD5算法現在仍可以安全地使用嗎?
答:MD5(Message-Digest Algorithm 5,消息摘要算法5)算法是一個用于加密的單向散列函數。散列函數可以對一段數據(如文件或消息)進行運算,生成一個較短的、固定長度的數值,稱為散列值。一個MD5散列值通常表示為一個32位的十六進制數。散列函數在加密方面用途廣泛,因為對原始輸入的任何修改(包括故意的和無意的修改)都將會引起結果散列值的變化。散列函數可用于多種形式的認證,例如數據簽名和消息認證碼。另外,散列函數還可用于驗證文件的完整性,因為即使是對文件最細微的修改,也會改變其散列值。例如,許多軟件出版商都會提供其可下載軟件的MD5散列值,從而使用戶可以驗證該文件是可信的,沒有被篡改的。
然而,由于散列算法生成一個較短的、固定長度的散列值來代表任意長度的數據,這就意味著,可能的輸入值要遠遠多于散列算法生成的唯一散列值。因此,必定會有多個輸入值將產生相同的散列值,這就是所謂的散列碰撞。對于一個在密碼學意義上被認為是安全和具有抗碰撞性的散列函數來說,找到能夠產生相同散列值的兩個輸入值非常困難。2005年3月,兩名研究人員創建了兩個公鑰不同但MD5散列值相同的X.509數字證書。從那以后,可以在一分鐘內找到一個MD5碰撞的各種方法層出不窮。正是因為如此,MD5算法在密碼學上被認為已經遭到破解,并逐漸被SHA-2散列函數系列所取代。
MD5算法肯定不適合基于安全性的應用和服務,例如SSL(安全套接字層)和依賴抗碰撞性的數字簽名。對于使用MD5散列值存儲用戶密碼的早期應用來說,降低MD5算法脆弱性的一種可能的方法是,先向密碼中添加一段隨機字符,然后再計算其散列值。這種方法在一定程度上可以抵抗針對散列密碼的字典攻擊。盡管MD5散列值不再能保證文件未被篡改,但是在下載較大的文件時,可以使用MD5散列值檢查錯誤,并驗證文件是否損壞和完整。
需要指出的是,在新的應用中沒有理由再使用MD5。美國政府的大多數應用被要求在今年年底以前改用SHA-2散列函數系列,早期的應用也要盡可能地進行升級。至于你在問題中提到的SHA-1散列算法也具有安全漏洞,而迄今為止還沒有出現關于成功攻擊SHA-2散列函數系列的報道。同時,研究人員已經在進行SHA-3算法的開發。一個緊跟加密技術最新發展的好方法是,及時關注標準機構(如美國國家標準與技術研究所)的新聞并接受其建議。
【編輯推薦】