Rainbow Table破解演算法)

來源:互聯網
上載者:User
這是早些時候一個朋友要求幫他最佳化rainbow table代碼的時候寫的。今天,另外一個朋友提到了rainbow table,就把文檔拿出來跟大家分享一下吧。
rainbow table演算法是當前比較流行的密碼破解演算法,很多商業軟體都是基於它的改進。

加密的原理就在於,通過將明文通過一定的hash演算法,將明文空間映射到一個密文空間。

破解密碼的最簡單的兩種思路:
1. 順序的計算所有明文空間中明文的hash,與密文進行比較,如果相等,說明找到了對應的明文。
2. 預先將所有的明文空間中的明文進行hash,並將結果存放到一個表中;破解的時候,直接查表,找到對應的明文。

這兩種方法要麼費時,要麼費力。要是不相信,你可以試一下,可以將明文空間指定的大一些;-)

理解rainbow table的核心思想就在於理解reduce函數。
hash函數將明文空間映射到hash空間;reduce函數將hash空間映射到明文空間。
注意:reduce函數並不是hash函數的反函數,只是映射方向與hash函數相反而已,要是的話,我們就發財了;-)
當然,列位如果認為是反函數,可以驗證一下,如果驗證是的話,不要忘了告訴我。

舉例來說,針對6位元字的md5, MD5("493823") -> "222f00dc4b7f9131c89cff641d1a8c50"。
這裡我們定義reduce函數R()為hash值中的前6個數字,因此R("222f00dc4b7f9131c89cff641d1a8c50") -> "222004".
現在,我們通過reduce函數得到了另外一個明文,這就是reduce函數的目的。
通過不斷的重複這個過程,每次產生不同的明文,形成一條鏈。
明文 -hash->  密文 -reduce-> 明文 -hash-> 密文 -reduce->明文 -hash->密文......

經過固定的輪數N之後,通過最初的明文A,hash函數H,reduce函數R,得到了最後的密文B。
只要知道上面的A、H和R,就可以計算,第i步得到的明文和密文了。實際上,鏈表中除開頭和結尾的元素都是可以去掉的,因為我們可以通過計算得到;-)
鏈的表示,可以用Start和End元素來表示,也就是A和B。當然其他的例如H、R和N,都是系統之前設定好的。

這樣我們可能產生如下的幾條鏈:

iaisudhiu -> 4259cc34599c530b1e4a8f225d665802
oxcvioix -> c744b1716cbf8d4dd0ff4ce31a177151
9da8dasf -> 3cd696a8571a843cda453a229d741843
[...]
sodifo8sf -> 7ad7d6fa6bb4fd28ab98b3dd33261e8f

有了這些鏈,我們就可以用它們來進行密碼破解了。現在,我們有一個未知明文的密文X,需要進行破解得到明文M。

演算法如下:
start = 0
step = 0
while(step < N)
{
    if( T in Set_END )
        start = T.start
        break
    else
        T = hash(reduce(T))
        step++
}

if( start )
{
    for(;i<N-step;)
    {
        start=reduce(hash(start))
    }
    M = start
}
else
{
    NOT Found ;-(
}

1. 在所有的鏈尾元素中尋找,如果找到了就跳出迴圈。
2. 如果沒有找到,就調用reduce函數,得到一個新的明文,並對其進行hash,得到新的密文,跳到1繼續執行。
3. 如果找到了,說明了原始的密文X在對應的那條鏈中。
註:尋找元素是否在鏈尾元素集合中,通常採用二分法,需要原先將所有的鏈按照鏈尾元素大小排序。字典一般非常的大,需要拆成多個檔案。

我們用一個執行個體圖來描述一下,M表示明文,X表示密文。

假設原始密文為X2,最後通過S步的Reduce和Hash,得到一個密文X6是某一條鏈的結尾元素。
那麼X2肯定在X6所在的鏈中,而且是從開頭M0經過(N-S-1)步Hash和Reduce操作得到的那個明文,就是原始密文對應的明文。

注意:當然存在一種情況,我們構造的鏈表不能覆蓋所有的明文密文空間,那麼就會可能出現,一個密文出現在所有鏈表中都不存在的情況,那麼就無法破解這個密文。
實際上,rainbow table的演算法很簡單,最大的問題在於產生一堆比較好的chain。這需要大量的機器和大量的硬碟資源。很多破解產品,它們賣的不是軟體,而是它們的字典。
BTW:因為計算不同的chain是不相互影響的,可以通過CUDA等並行平台來進行並行化處理。

參考:
http://kestas.kuliukas.com/RainbowTables/
http://huaidan.org/archives/2132.html
http://en.wikipedia.org/wiki/Rainbow_table
http://lasecwww.epfl.ch/php_code/publications/search.php?ref=Oech03
http://project-rainbowcrack.com/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.