現在是晚上23:29。寫這篇文章呢,是因為早些時候我胃疼,是因為涼導致的胃疼。涼呢喝了一些熱水,喝完熱水胃倒是不疼了,但是由於我喝的是茶葉開水,於是就導致失眠了。想來想去這漫漫長夜也沒意思,於是就決定寫這個了。
0x01
這個md5碰撞到底是個什麼東西呢,這是王小雲發明的一種破解md5摘要演算法的的一種方法。這個md5密文,有16位的md5以及32位的md5,然而,32位的md5密文和16位的md5密文它們的區別就是長度不一樣,其他沒有什麼技術上的區別。將同乙個字串加密為16位md5密文和32位md5密文,在32位的md5中減去前8位和後8位,中間的部分就是它的16位md5。例如將字串admin加密,admin的16位md5是7a57a5a743894a0e,32位md5是21232f297a57a5a743894a0e4a801fc3,去掉32位的前8位和後8位,你看它中間剩下的是不是就是16位md5了。md5密文是由字母和數字組成的,但是md5不區分大小寫,也就是由26個字母和10個數字組成的16位的字串。所以md5密文的總個數一共就是36的16次方個,也就是全宇宙的md5密文總共有1208925819614600000000000個,雖然這是乙個很大的數,但是它終究是有限制的,它就只有這麼多個,沒有辦法再+1了,再多乙個就重複了,然而明文呢,卻是無限制的,不限長度的有標點、大小寫字母以及數字組成的字串有無數個,這是沒有辦法估量,因為不限長度。然而這無限種明文卻都可以用16位的md5表示出來,要用有限數量的東西去表示另一種無限數量的東西,就勢必會存在重複,這就是碰撞。由於數量太大,就用數字來代替舉例,例如0~9就是md5密文(有限個數),26個字母就是明文(明文數量遠大於密文數量),用0表示a,1表示b,2表示c,最多只能表示10個字母。10個數字表示完前10個字母,然而又必須用10個數字表示完26個字母,那麼就只能重複了,這是唯一的解決辦法了,9表示的字母是i,i後面的字母是j,那這個j就必須要用已經用過的數字來表示了,這樣的話從字母j開始,1個數字最少都要表示2個字母了,這就存在碰撞了。j就又要用0來表示。所以簡單來說,碰撞演算法就是找到另外乙個加密以後md5值與原字串相同的新字串。碰撞演算法會產生多少個結果呢,這是無法估計的,原因也是因為無法限制明文的長度是多少,假如說100位長度的時候就碰撞出md5值與admin相同的字串,那長度是1000位呢,是100000呢,會碰撞出多少個字串?這無法計算。如果限制了長度,萬一碰撞不出來呢?就要調大長度了。
0x02
碰撞破解對安全的實質性影響?碰撞演算法是一種能夠100%破解掉md5的一種破解演算法(就像窮舉一樣)。就用網頁登陸做為例子,假如存在乙個賬號:root,它的密碼是:a,然後網頁向資料庫查詢賬號root的密碼的md5是多少,然後再對比輸入的密碼,如果輸入的密碼的md5與查詢到的md5是一樣的,那就說明賬號和密碼輸入正確,允許登陸,否則賬號密碼錯誤。假如說a的md5是0,然後碰撞出j的md5密文也是0,那輸入賬號root和密碼j會發生什麼情況,肯定是允許登陸,因為原密碼a的md5是0,而j的md5也是0,輸入的密碼的md5和資料庫中查詢到的密碼md5是一樣的,那就說明密碼正確了,然後j並不是原始密碼,而是碰撞出的密碼。這就是碰撞破解。
0x03
理論上最多加密32的16次方+1次,就一定能碰撞出乙個字串的md5值跟某個字串的md5相同,因為32的16次方就用完了所有的md5密文,因為md5密文的總個數就只有這麼多個。再多1個字串,就一定會出現兩個字串的md5值完全相同的情況了。這32的16次方對於個人電腦來說是不可能的,然而能夠使用超級計算機的話,是100%能解md5的,如果你能夠蒐集到32的16次方個不同的md5密文所對應的明文,那麼你就100%能夠破解任何乙個md5了。
0x04
0x05
MD5的小碰撞例項
我的名字 陳聰 md5 陳聰,32 fe3f593fb5e56dd070187290697a8f6e md5 陳聰,16 b5e56dd070187290 乙個字元 hj md5 hj,32 fe3f593fb5e56dd070187290697a8f6e md5 hj,16 b5e56dd0701...
md5相等及碰撞繞過
在ctf中經常會遇到要求v1 v2,但md5 v1 md5 v2 的情況,所以上網蒐集了一下資料,學習了一下大佬的思路,拓展思路。在php中,變數都是弱型別的 就是不指定特定資料型別的 使用if判等的時候要格外小心,使用特殊的引數可能會使本來不相等的if判斷位相等,比如下面的例子。isset get...
可執行檔案的 MD5 碰撞
原來我總是很自信地以為 你有本事找到 md5 的碰撞又如何?你難道還有本事讓兩個可執行檔案的 md5 一樣,卻又都能正常執行,並且可以做完全不同的事情麼?答 還真的可以.這兩個程式會在螢幕上列印出不同的字元,但是它們的 md5 都是一樣的。通讀其 後摘要如下 這幾位密碼學家使用的是 構造字首碰撞法 ...