彩虹表:你的密碼的最糟糕的噩夢

不要讓他們可愛的名字欺騙你,這些東西是可怕的。

雖然您可能會將彩虹桌想像成折衷主義色彩豐富的家具,但這些並不是我們將要討論的。 我們談論的彩虹表被用來破解密碼,並且是黑客不斷增長的武器庫中的又一個工具。

彩虹桌怎麼樣? 怎麼能有這樣一個可愛和可愛的名字是如此有害?

彩虹桌後面的基本概念

我是一個剛插入服務器或工作站的拇指驅動器,重新啟動它,並運行一個程序,該程序將包含用戶名和密碼的安全數據庫文件複製到我的拇指驅動器。

該文件中的密碼是加密的,所以我無法閱讀它們。 我將不得不破解文件中的密碼(或者至少是管理員密碼),以便我可以使用它們訪問系統。

什麼是破解密碼的選項? 我可以嘗試使用蠻力密碼破解程序,比如John the Ripper,它在密碼文件中減掉了密碼,試圖迭代地猜測每個可能的密碼組合。 第二個選項是加載包含數十萬常用密碼的密碼破解字典,並查看它是否有任何匹配。 如果密碼足夠強大,這些方法可能需要幾週,幾個月甚至幾年。

當對系統“嘗試”密碼時,使用加密 “散列” 密碼,以便實際密碼永遠不會通過通信線路以明文形式發送。 這可以防止竊聽者攔截密碼。 密碼的散列通常看起來像一堆垃圾,通常與原始密碼的長度不同。 你的密碼可能是“shitzu”,但密碼的散列看起來像“7378347eedbfdd761619451949225ec1”。

為了驗證用戶,系統在客戶端計算機上獲取由密碼散列函數創建的散列值,並將其與服務器上的表中存儲的散列值進行比較。 如果哈希匹配,那麼用戶將被驗證並授予訪問權限。

散列密碼是單向函數,這意味著您無法解密散列以查看密碼的明文是什麼。 創建哈希後,沒有解密哈希的密鑰。 如果你願意,沒有“解碼器環”。

密碼破解程序的工作方式與登錄過程類似。 破解程序首先獲取明文密碼,通過散列算法(如MD5)運行它們,然後將散列輸出與被盜密碼文件中的散列進行比較。 如果它發現匹配,那麼程序破解了密碼。 正如我們之前所說,這個過程可能需要很長時間。

進入彩虹表

彩虹表基本上是大量預先計算的表格,其中填充了與預先匹配的可能的明文密碼的散列值。 彩虹表實質上允許黑客反轉散列函數以確定明文密碼可能是什麼。 有可能兩個不同的密碼導致相同的散列,因此找出原始密碼是什麼並不重要,只要它具有相同的散列即可。 明文密碼甚至可能不是由用戶創建的相同密碼,但只要哈希匹配,那麼它與原始密碼的內容無關。

彩虹表的使用可以使密碼在很短的時間內與強力方法相比被破解,然而,折衷是需要大量的存儲空間(有時是Terabytes)來保存彩虹表本身,這些日子的存儲是充足且便宜的,所以這種折衷不像十年前那樣大,當時TB級驅動器不是您可以在當地百思買購買的東西。

黑客可以購買預先計算的彩虹表,以破解易受攻擊的操作系統(如Windows XP,Vista,Windows 7以及使用MD5和SHA1作為其密碼散列機制的應用程序(許多Web應用程序開發人員仍使用這些散列算法))的密碼。

如何保護自己免受基於彩虹表的密碼攻擊

我們希望對每個人都有更好的建議。 我們想說一個更強的密碼會有幫助,但這不是真的,因為密碼的弱點不是問題,而是用於加密密碼的哈希函數的弱點。

我們可以給用戶的最好建議是遠離將您的密碼長度限制為短字符的Web應用程序。 這是脆弱的老派密碼認證例程的明顯跡象。 擴展的密碼長度和復雜性可能有所幫助,但不是保證形式。 密碼越長,Rainbow Tables就越需要破解密碼,但擁有大量資源的黑客仍然可以實現這一目標。

我們關於如何防禦彩虹表的建議真的適用於應用程序開發人員和系統管理員。 當涉及到保護用戶免受這種攻擊時,他們處於第一線。

以下是一些有關防禦彩虹表攻擊的開發人員提示:

  1. 請勿在密碼散列函數中使用MD5或SHA1。 MD5和SHA1是過時的密碼散列算法,並且大多數用於破解密碼的彩虹表都是針對使用這些散列方法的應用程序和系統構建的。 考慮使用更現代的散列方法,如SHA2。
  2. 在密碼散列例程中使用密碼“Salt”。 將密碼Salt添加到您的密碼散列函數將有助於防止彩虹表在您的應用程序中用於破解密碼。 要查看一些關於如何使用密碼鹽來幫助您的應用程序“防虹”的編碼示例,請查看WebMasters By Design站點,該站點上有關於該主題的精彩文章。

如果你想看看黑客使用Rainbow Tables如何執行密碼攻擊,你可以閱讀這篇關於如何使用這些技術來恢復自己的密碼的優秀文章