高效的密碼攻擊方法 彩虹表

2021-09-12 12:16:41 字數 2382 閱讀 6199

為了保護賬號安全,幾乎所有**都不會儲存使用者的密碼,而是用雜湊加密演算法對密碼進行計算,將得到的雜湊串儲存在資料庫中,每次使用者登入時會將使用者提交的密碼用同樣的演算法計算,並將結果與資料庫中儲存的雜湊串比對以驗證使用者身份。前面的文章中講過,黑客可以採用密碼字典的方式對雜湊密碼進行「撞庫」破解,這種方式對長度較短、組合簡單的密碼確實很有用,但是遇到複雜的密碼時往往力不從心。今天為大家介紹一種高效的密碼攻擊方法:彩虹表。

彩虹表的產生背景

雜湊加密演算法是不可逆的,也就是說無論是**的資料庫管理員還是獲取了密碼資料的黑客,能看到的只是一長串毫無意義的字元,不可能將它還原成真正的密碼。通常的解決辦法有兩個,一是用窮舉法組合出所有的密碼可能,然後經雜湊機密演算法計算,將結果與雜湊串進行比對;二是提前生成可能密碼與對應雜湊串的對照表,密碼攻擊時直接根據雜湊串從對照表中查詢對應的密碼。

第一種方法需要大量的計算,因此破解速度非常慢,以14位字母和數字的組合密碼為例,共有1.24×10^25種可能,即使電腦每秒鐘能進行10億次運算,也需要4億年才能破解;第二種方法需要海量的磁碟空間來儲存資料,仍以14位字母和數字的組合密碼為例,生成的密碼32位雜湊串的對照表將占用5.7×10^14 tb的儲存空間。如何增加密碼長度或新增符號,需要的時間或磁碟空間將更加難以想象,顯然這兩種方法是難以讓人滿意的。本文要介紹的彩虹表,其實是兩種方法的折衷,將耗時和占用空間控制在可接受的範圍內。

彩虹表的實現原理

首先定義雜湊加密函式h,q=h(p)表示將明文密碼p加密成雜湊串q;然後定義規約函式r,p=r(q)表示將雜湊串q轉換成明文p,注意p不是真正的密碼p。將乙個可能的密碼p0交替帶入h和q兩個函式進行運算,先後得到q1,p1,q2,p2,...,q(n-1),p(n-1),qn,pn。其中p是明文,q是雜湊串,它們組成的鏈稱為雜湊鏈,n是雜湊鏈的長度,一般大於2000。將雜湊鏈的首尾元素p0和pn做為乙個數對存入表中,中間的其它元素全部刪除。由多個數對組成的表稱為彩虹表。

密碼攻擊就是找到雜湊串q對應的明文密碼p,利用彩虹表進行密碼攻擊的過程如下:c1=r(q),將c1與彩虹表中每乙個pn進行比對,如果相等,則p=p(n-1),由於彩虹表中只儲存了p0和pn,因此需要重新計算該雜湊鏈得到p(n-1);如果沒找到相等的pn,計算c2=r(h(c1)),將c2與彩虹表中所有pn進行比對,如果相等,則p=p(n-2),重新計算該雜湊鏈得到p(n-2);如果沒找到相等的pn,繼續計算c3...以此類推。

以上只是彩虹表最基本的原理,沒看明白的讀者可以自己拿筆在紙上試著將以上的步驟寫出來。彩虹表的關鍵是構造r函式,優秀的r函式要保證計算結果均勻分布,即避免出現相同的明文密碼。然而想構造優秀的r函式是件非常困難的事,不同的雜湊鏈中可能會出現大量的重複資料,嚴重影響了密碼攻擊的效率。改良後的彩虹表在雜湊鏈的計算過程中引入不同的r函式,有效減少不同雜湊鏈中的重複節點,進一步提高了攻擊效率。如果將不同的r函式用不同的顏色表示,眾多的雜湊鏈就會像彩虹一樣,從裡到外呈現出顏色變化,這就是彩虹表名稱的由來。

彩虹表的獲取

彩虹表確實像它的名字一樣美好,至少黑客眼裡是這樣。上表是7位以內密碼在不同字符集下構造出的彩虹表的情況,彩虹表中雜湊鏈的長度和個數隨著字符集的增長而增長,彩虹表的大小和生成時間也隨之成倍增加。7位數字組合在彩虹表面前簡直就是秒破,即使最複雜的7位密碼不到乙個小時就能破解,如果採用普通的暴力攻擊,破解時間可能需要三周。

如何防禦彩虹表

雖然彩虹表有著如此驚人的破解效率,但**的安全人員仍然有辦法防禦彩虹表。最有效的方法就是「加鹽」,即在密碼的特定位置插入特定的字串,這個特定字串就是「鹽」,加鹽後的密碼經過雜湊加密得到的雜湊串與加鹽前的雜湊串完全不同,黑客用彩虹表得到的密碼根本就不是真正的密碼。即使黑客知道了「鹽」的內容、加鹽的位置,還需要對h函式和r函式進行修改,彩虹表也需要重新生成,因此加鹽能大大增加利用彩虹表攻擊的難度。

彩虹表的攻擊與防禦

hash 一般翻譯做 雜湊 也有直接音譯為 雜湊 的,就是把任意長度的輸入 又叫做預對映pre image 通過雜湊演算法變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來確定唯一的輸入值。...

字典攻擊 彩虹表攻擊與防禦

其實彩虹表攻擊只是批處理字典攻擊的一種具體實現,它的主要特點是 以時間換空間 意思是查表時間變長了,但所需儲存空間減少了。公開鹽值使得破解大量密碼時更加耗時。使用公開鹽的情況下,在輸入密碼時,隨機選擇n位鹽s,通過測試h pw,sa ha驗證a的pw。攻擊者必須為每個使用者重新遍歷雜湊字典。批處理字...

有一種攻擊叫彩虹表攻擊

在我們日常系統中,很多都有使用者註冊功能,使用者註冊需要使用者名稱和密碼,密碼一般我們都採用md5加密的方式,但是用md5加密,對於乙個固定的字串,其md5值是固定的,這樣就會出現彩虹表攻擊情況。所謂彩虹表攻擊就是指攻擊者有一張表,裡面有密碼明文和對應md5值的對應關係,攻擊者利用這些關係來破解使用...