密碼學是理論計算機的一個很大的方向。以前準備先寫密碼學概論再提在hash函數破解上作出重大貢獻的王小云教授的工做,不過前兩天王小云得到求是傑出科學家獎以及100萬獎金,在媒體上又掀起了一輪宣傳狂潮,可是有些報道極端弱智,錯誤百出,因此我趁機糾正一下,並介紹密碼學的一個組成部分——hash函數,以及王小云在這上面的工做。算法
王小云的主要工做是關於hash函數的破解工做。她在2005一個密碼學會議上宣佈破解了SHA-1,震驚了全世界。因此要介紹和理解她的工做,先看一下hash函數具體是怎麼回事。數據庫
簡單的說,hash函數就是把任意長的輸入字符串變化成固定長的輸出字符串的一種函數。通俗得說,hash函數用來生成信息的摘要。輸出字符串的長度稱爲hash函數的位數。app
目前應用最爲普遍的hash函數是SHA-1和MD5,大可能是128位和更長。函數
hash函數在現實生活中應用十分普遍。不少下載網站都提供下載文件的MD5碼校驗,能夠用來判別文件是否完整。另外,好比在WordPress的數據庫,全部密碼都是保存的MD5碼,這樣即便數據庫的管理員也沒法知道用戶的原始密碼,避免隱私泄露(不少人在不一樣地方都是用的同一個密碼)。網站
若是兩個輸入串的hash函數的值同樣,則稱這兩個串是一個碰撞(Collision)。既然是把任意長度的字符串變成固定長度的字符串,因此,必有一個輸出串對應無窮多個輸入串,碰撞是必然存在的。google
一個「優良」的hash函數 f 應當知足如下三個條件:spa
任意y,找x,使得f(x)=y,很是困難。翻譯
給定x1,找x2,使得f(x1)=f(x2),很是困難。orm
找x1,x2,使得f(x1)=f(x2),很是困難。htm
上面的「很是困難」的意思是除了枚舉外不可能有別的更快的方法。好比第3條,根據生日定理,要想找到這樣的x1,x2,理論上須要大約2^(n/2)的枚舉次數。
幾乎全部的hash函數的破解,都是指的破壞上面的第三條性質,即找到一個碰撞(前兩條都能被破壞的hash函數也太弱了點,早就被人拋棄了)。在密碼學上還有一個概念是理論破解,指的是提出一個算法,使得能夠用低於理論值得枚舉次數找到碰撞。
王小云的主要工做是給出了MD5,SHA-0的碰撞,以及SHA-1的理論破解,她證實了160位SHA-1,只須要大約2^69次計算就能找出來,而理論值是2^80次。她的尋找MD5碰撞的方法是極端高效的。傳說王小云當時在會議上把碰撞寫出來,結果被下面的人驗證發現不對,原來她把MD5算法的一個步驟弄錯了。可是她立馬聯繫她的當時留在中國的學生,修正算法,並找到一個新的碰撞。這一個是對的。
看到這裏,那些認爲中國國安局應該將這些結果封存做爲祕密武器甚至幻想用這些成果來襲擊美國之徒能夠停住大家的YY了。這種形式上的破解,在大多數狀況下沒有實際性的做用。更別提MD5早就被美國人拋棄了。
可是,說這種破解一點實際意義都沒有,那就侮辱了廣大密碼學家的智商,密碼學家不會平白無故的弄出碰撞這麼一個概念來。下面簡單的介紹一下在特定狀況下,怎麼利用給定的碰撞來作壞事(翻譯自Attacking Hash Functions):
Caesar給實習生Alice叫寫了一封推薦信(letter)。同一天,Alice叫Caesar在推薦信上數字簽名,並提供了一份推薦信的電子板。Caesar打開文件,發現和原件如出一轍。因此他在文件上籤了名。
幾個月後,Caesar發現他的祕密文件被非法察看。這究竟是怎麼回事呢?
a25f7f0b 29ee0b39 68c86073 8533a4b9
事實上,Alice要求Caesar簽名的文件letter已經被Alice作了手腳,準確地說,Alice還準備了另一個文件order,它們的MD5碼徹底一致。而Caesar的數字簽名還依賴於MD5算法,因此Alice用order文件替換Letter文件以後,Caesar的數字簽名依然有效。那封order給Alice提供了察看祕密文件的權限。
具體的實現方法可見Hash Functions and the Blind Passenger Attack。我在這裏簡單的解釋一下(只是大體思路,具體實現方式,須要對文件結構信息有所瞭解):
letter文件的內容是:
if(x1==x1) show "letter" else show "order"
order文件的內容是:
if(x2==x1) show "letter" else show "order"
其中字符串"letter"和"order"表明兩封信實際顯示的內容。x1,x2是一個MD5的碰撞。
上面的方法,只供參考和學術用途,實際使用所引發的後果概不負責。
參考:
Attacking Hash Functions by Poisoned Messages "The Story of Alice and her Boss"
Hash function, wikipedia
SHA, wikipedia
Interview with Yiqun Lisa Yin concerning the attack on SHA-1
PS:我跟王小云老師的接觸不多,上過倆次她的討論班而已,亦感受到王小云老師的嚴謹和耐心。在去年一個Turing獎得到者的演講上,王小云提問的時候竟口而出「I ask who」的中式英語,在引發鬨笑的同時,我也極端佩服她的勇氣。也許只有這樣才能作出很是好的工做吧。
PS2: wikipedia在國內能夠經過free_door瀏覽。