彩虹表


彩虹表(Rainbow Table)是一種破解哈希算法的技術,是一款跨平台密碼破解器,主要可以破解MD5、HASH等多種密碼。它的性能非常讓人震驚,在一台普通PC上輔以NVidia CUDA技術,對於NTLM算法可以達到最高每秒103,820,000,000次明文嘗試(超過一千億次),對於廣泛使用的MD5也接近一千億次。更神奇的是,彩虹表技術並非針對某種哈希算法的漏洞進行攻擊,而是類似暴力破解,對於任何哈希算法都有效。

一、彩虹表原理

這幾乎是令人難以置信的,Roger迫不及待的去看了 http://www.project-rainbowcrack.com 所介紹的原理。這其實已經不是新的技術了,但是很遺憾的是,搜索“彩虹表原理”出來的文章對彩虹表原理的介紹都有不太正確,Roger就在這里簡單的介紹一下,主要參考的是Wiki上的這篇 http://en.wikipedia.org/wiki/Rainbow_tables,英文好的可以去看這篇論文http://lasecwww.epfl.ch/pub/lasec/doc/Oech03.pdf

我們先來做點科普,哈希(Hash)算法就是單向散列算法,它把某個較大的集合P映射到另一個較小的集合Q中,假如這個算法叫H,那么就有Q = H(P)。對於P中任何一個值p都有唯一確定的q與之對應,但是一個q可以對應多個p。作為一個有用的Hash算法,H還應該滿足:H(p)速度比較快; 給出一個q,很難算出一個p滿足q = H(p);給出一個p1,很難算出一個不等於p1的p2使得 H(p1)=H(p2)。正因為有這樣的特性,Hash算法經常被用來保存密碼————這樣不會泄露密碼明文,又可以校驗輸入的密碼是否正確。常用的 Hash算法有MD5、SHA1等。

破解Hash的任務就是,對於給出的一個q,反算出一個p來滿足q = H(p)。通常我們能想到的兩種辦法,一種就是暴力破解法,把P中的每一個p都算一下H(p),直到結果等於q;另一種辦法是查表法,搞一個很大的數據 庫,把每個p和對應的q都記錄下來,按q做一下索引,到時候查一下就知道了。這兩種辦法理論上都是可以的,但是前一種可能需要海量的時間,后一種需要海量 的存儲空間,以至於以目前的人類資源無法實現。


我們可以簡單的算一下,對於14位的大小寫加數字(先不算特殊字符了)組成的密碼的集合有多大?自然就是(26*2+10)^14 = 62^14 = 1.24 * 10^25,這個就約等於12億億億,即使我們每納秒可以校驗一個p(一秒鍾10億次,目前PC做不到),暴力破解法也大概需要4億年;如果我們采用查表 法,假定Hash的結果是128Bit即16字節的,光存放Hash(不存放明文P)就需要10^26字節的存儲空間。什么?現在硬盤很便宜?沒錯現在 1GB硬盤大概是五毛錢,那么按這個來算光存儲這個Hash大概需要5億億人民幣來買硬盤。所以有些文章說彩虹表就是依賴查一個巨大的表來破解Hash, 簡直是個無知的玩笑。

也正因為如此,我們一直都認為Hash是足夠安全的,十幾位的密碼也是強度足夠的,直到彩虹表的出現。現在我們來看看彩虹表是怎么干的。

彩虹表的根本原理就是組合了暴力法和查表法,並在這兩者之中取得一個折中,用我們可以承受的時間和存儲空間進行破解。它的做法是,對於一個Q = H(P),建立另一個算法R使得 P = R(Q),然后對於一個p,這樣進行計算:

p0 -H-> q1 -R->p1 -H-> q2 -R->p2 -H-> q3 -R->p3  … -H-> q(n-1) -R->p(n-1) -H-> qn -R->pn

簡單的說,就是把q用H、R依次迭代運算,最后得到pn,n可能比較大。最后我們把p0和pn都存儲下來,把其他的結果都丟棄。然后用不同的p0代入計算,得到多個這樣的p的對子。

我們在做破解的時候,給出了一個q,我們來尋找p。我們先把q做一次R運算得到一個值例如叫c1,然后把c1和每一個p對的最后一個做比較,假如和某一個 pn相等,那么有可能這個pn所對應的p(n-1)就是我們在追尋的q,為了驗證我們把pn對應的p0再做一次鏈式計算,比對qn是否就是給出的q,如果 是,很明顯p(n-1)就是我們在追尋的p,因為 p(n-1) -H-> qn。如果不是就繼續尋找直到遍歷所有的q0qn對。

事情還剛剛開始,我們再算q -R-> c1 -H-> -R-> c2,再比對c2是否是qn,如果是,那么p(n-2)就可能是p;再算c3、c4直到c(n-1),不知道這樣說你明白了嗎?

總的來說,就是用一個p0pn對來存儲了一個鏈子的數據,如果n很大,就可以大大減小了存儲的空間。這樣帶來的問題是必須做n次比對,時間更長,但是我們不需要瞬間破解,等待幾秒乃至幾天破解一個密碼都是可以接受的。

當然這里只是講述了最粗淺的原理,仔細想一下還有很多的問題,例如R的選擇,Hash沖突的處理,如何選擇p0來實現足夠的覆蓋,如何在有限資源下生成彩虹表等等。對這些感興趣的可以去看看RainbowCrack的源碼 http://www.project-rainbowcrack.com

二、獲得彩虹表

彩虹表 官方下載地址:
http://ophcrack.sourceforge.net/

120G彩虹表BT下載:http://www.ha97.com/code/tables.rar

三、彩虹表的使用

彩虹表工具很多,常用到的彩虹表工具有Ophcrack、rcracki_mt、Cain等。

Cain: http://www.onlinedown.net/soft/53494.htm

freerainbowtables: http://www.freerainbowtables.com/

Ophcrack: http://ophcrack.sourceforge.net/tables.php

RainbowCrack: http://project-rainbowcrack.com/table.htm

RainbowCrack + LM Tables 破解SAM密碼

http://www.t00ls.net/viewthread.php?tid=505

SAMInside + LM Tables 破解SAM密碼完美組合

http://www.t00ls.net/viewthread.php?tid=503

最小彩虹表是最基本的字母數字表,就這樣它的大小就有388MB。這是Ophcrack啟動盤默認的表,很多人的收集便有了傳說中的120G的彩虹表。win2003及以前的windows操作系統的密碼采用的LM算法加密,而Vista、Win7、Win2008/R2采用的是NTLM,NTLM比LM安全得多。


免責聲明!

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



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