MD5碰撞原理簡單介紹及其實現


MD5碰撞原理簡單介紹及其實現

MD5是什么

MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16[字節]的散列值(hash value)),用於確保信息傳輸完整一致。MD5由美國密碼學家[羅納德·李維斯特](Ronald Linn Rivest)設計,於1992年公開,用以取代[MD4]算法。這套算法的程序在 RFC 1321 標准中被加以規范。1996年后該算法被證實存在弱點,可以被加以破解,對於需要高度安全性的數據,專家一般建議改用其他算法,如[SHA-2]。2004年,證實MD5算法無法防止碰撞,因此不適用於安全性認證,如[SSL]公開密鑰認證或是[數字簽名]等用途。

MD5的原理

直接看百度上的圖就一目了然了
enter image description here

MD5的“破解”

2004年,我國中科院院士王小雲證實md5算法無法防止碰撞,因此,不適用於安全性認證。在2005年,王小雲院士提出了md5哈希碰撞,公式如下

f(f(s, M), M') = f(f(s, N), N')

所謂的“破解”其實用“碰撞”一詞語更為妥當,因為她的研究成果表明了給定消息 M1,能夠計算獲取 M2,使得 M2 產生的散列值與 M1 產生的散列值相同,即:

MD5(M1)=MD5(M2)

於是乎MD5不滿足抗碰撞性,於是不再是安全的散列算法
但是
直到現在,給出一個MD5散列值,然后通過計算還原出原文來是不可能的的。也就是說通過一個MD5后的密文,回推明文目前還是沒有方法的。
這里給出相關論文:https://xueshu.baidu.com/usercenter/paper/show?paperid=7c9cd409db9bf2b5f06971928d6d7148&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8

碰撞實現

這里介紹一個MD5碰撞的工具:fastcoll,fastcoll 可以用來對給定的前綴快速生成md5碰撞 (也就是說,生成兩個不同的文件,每個文件都是在給定的內容后面附加一段東西生成的)
給出其主頁:https://www.win.tue.nl/hashclash/
相關文章:https://homepages.cwi.nl/~stevens/papers/eprint-2006-104-S.pdf

下面給出示例,我們創建一個文本文檔在里面寫入123456789
enter image description here
將其拖入fastcoll后得到兩個文件
enter image description here
enter image description here
經過檢驗可以發現,第一個文檔和第二個文檔字符串不同,但最終MD5值相同enter image description here
enter image description here

其他

之前打比賽的時候學習過一點技巧,可以通過python來爆破md5中的幾位,下面給出一份示例python代碼

1.  import hashlib
2.  for i in range(0,9999999999999999):
3.  md5=hashlib.md5(str(i).encode("utf-8")).hexdigest()
4.  if md5[0:5]=="66666": #md5后前五位是66666
5.  print(i)
6.  print("no result")

該腳本實現了純數字通過MD5加密后相應位數是特定字符的功能

最后

thanks for reading


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM