常見的用戶密碼加密方式以及破解方法(轉)

【作者】張輝,就職于攜程技術中心信息安全部,負責安全產品的設計與研發。
作為互聯網公司的信息安全從業人員經常要處理撞庫掃號事件,產生撞庫掃號的根本原因是一些企業發生了信息泄露事件,且這些泄露數據未加密或者加密方式比較弱,導致黑客可以還原出原始的用戶密碼。目前已經曝光的信息泄露事件至少上百起,其中包括多家一線互聯網公司,泄露總數據超過10億條。
要完全防止信息泄露是非常困難的事情,除了防止黑客外,還要防止內部人員泄密。但如果采用合適的算法去加密用戶密碼,即使信息泄露出去,黑客也無法還原出原始的密碼(或者還原的代價非常大)。也就是說我們可以將工作重點從防止泄露轉換到防止黑客還原出數據。下面我們將分別介紹用戶密碼的加密方式以及主要的破解方法。
一、用戶密碼加密
用戶密碼保存到數據庫時,常見的加密方式有哪些,我們該采用什么方式來保護用戶的密碼呢?以下幾種方式是常見的密碼保存方式:
1、直接明文保存,比如用戶設置的密碼是“123456”,直接將“123456”保存在數據庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能采取的是這種方式。 2、使用對稱加密算法來保存,比如3DES、AES等算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到密鑰。不過既然大量的用戶信息已經泄露了,密鑰很可能也會泄露,當然可以將一般數據和密鑰分開存儲、分開管理,但要完全保護好密鑰也是一件非常復雜的事情,所以這種方式并不是很好的方式。

圖片描述

3、使用MD5、SHA1等單向HASH算法保護密碼,使用這些算法后,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多互聯網公司都采用這種方式保存用戶密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。
圖片描述

4、特殊的單向HASH算法,由于單向HASH算法在保護密碼方面不再安全,于是有些公司在單向HASH算法基礎上進行了加鹽、多次HASH等擴展,這些方式可以在一定程度上增加破解難度,對于加了“固定鹽”的HASH算法,需要保護“鹽”不能泄露,這就會遇到“保護對稱密鑰”一樣的問題,一旦“鹽”泄露,根據“鹽”重新建立彩虹表可以進行破解,對于多次HASH,也只是增加了破解的時間,并沒有本質上的提升。
圖片描述

5、PBKDF2算法,該算法原理大致相當于在HASH算法基礎上增加隨機鹽,并進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。使用PBKDF2算法時,HASH算法一般選用sha1或者sha256,隨機鹽的長度一般不能少于8字節,HASH次數至少也要1000次,這樣安全性才足夠高。一次密碼驗證過程進行1000次HASH運算,對服務器來說可能只需要1ms,但對于破解者來說計算成本增加了1000倍,而至少8字節隨機鹽,更是把建表難度提升了N個數量級,使得大批量的破解密碼幾乎不可行,該算法也是美國國家標準與技術研究院推薦使用的算法。
圖片描述

6、bcrypt、scrypt等算法,這兩種算法也可以有效抵御彩虹表,使用這兩種算法時也需要指定相應的參數,使破解難度增加。
下表對比了各個算法的特性:
圖片描述

二、用戶密碼破解
用戶密碼破解需要針對具體的加密方式來實施,如果使用對稱加密,并且算法足夠安全(比如AES),必須獲取到密鑰才能解密,沒有其它可行的破解方式。
如果采用HASH算法(包括特殊HASH),一般使用彩虹表的方式來破解,彩虹表的原理是什么呢?我們先來了解下如何進行HASH碰撞。單向HASH算法由于不能進行解密運算,只能通過建表、查表的方式進行碰撞,即將常用的密碼及其對應的HASH值全計算出來并存儲,當獲取到HASH值是,直接查表獲取原始密碼,假設用MD5算法來保護6位數字密碼,可以建如下表:
圖片描述

全表共100W條記錄,因為數據量不大,這種情況建表、查表都非常容易。但是當密碼并不是6位純數字密碼,而是數字、大小寫字母結合的10位密碼時,建立一個這樣的表需要(26+26+10)^ 10 ≈ 83億億(條記錄),存儲在硬盤上至少要占用2000W TB的空間,這么大的存儲空間,成本太大,幾乎不可行。有什么辦法可以減少存儲空間?一種方法是“預計算哈希鏈”,“預計算哈希鏈”可以大幅減少HASH表的存儲空間,但相應的增加了查表時的計算量,其原理大致如下:
建表過程:
圖片描述

先對原始數據“000000”進行一次HASH運算得到“670B1E”,再對HASH值進行一次R運算,R是一個定制的算法可以將HASH值映射到明文空間上(這里我們的明文空間是000000~999999),R運算后得到“283651”,再對“283651”進行hash運算得到“1A99CD”,然后在進行R運算得到“819287”,如此重復多次,得到一條哈希鏈。然后再選用其它原始數據建立多條哈希鏈。最終僅將鏈頭和鏈尾保存下來,中間節點全都去掉。
查表過程:假設拿到了一條HASH值“670B1E”,首先進行一次R運算,得到了“283651”,查詢所有鏈尾是否有命中,如果沒有,則再進行一次HASH、一次R,得到了“819287”,再次所有鏈尾,可以得到看出已經命中。這樣我們就可以基本確認“670B1E”對應的明文就在這條鏈上,然后我們把這條鏈的生成過程進行重新計算,計算過程中可以發現“000000”的HASH值就是“670B1E”,這樣就完成了整個查表過程。這種表就是“預計算哈希鏈”。這種方式存在一個問題,多條鏈之間可能存在大量的重復數據,如下圖所示:
圖片描述

為了解決這個問題,我們將R算法進行擴展,一條鏈上的多次R運算采用不同的算法,如下圖:
圖片描述

一條鏈上的每個R算法都不一樣,就像彩虹的每層顏色一樣,因此取名的為彩虹表。
當然彩虹表除了可以用戶破解HASH算法外,理論上還可以用于破解對稱加密算法,比如DES算法,由于DES算法密鑰比較短,建立彩虹表破解是完全可行的;但對于AES算法,由于密鑰比較長,建表幾乎不可行(需要耗時N億年)。
三、小結
采用PBKDF2、bcrypt、scrypt等算法可以有效抵御彩虹表攻擊,即使數據泄露,最關鍵的“用戶密碼”仍然可以得到有效的保護,黑客無法大批量破解用戶密碼,從而切斷撞庫掃號的根源。當然,對于已經泄露的密碼,還是需要用戶盡快修改密碼,不要再使用已泄露的密碼。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容

  • 這篇文章主要講述在Mobile BI(移動商務智能)開發過程中,在網絡通信、數據存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 2,582評論 0 6
  • 現在比較流行的密碼存儲是對密碼明文做 HASH運算,把得到HASH值存儲到數據庫中。驗證過程就是再次對用戶發過來的...
    JSON_NULL閱讀 3,538評論 4 7
  • 所有貨幣都需要一些方法來控制供應,并強制執行各種安全屬性以防止作弊。在法定貨幣方面,像中央銀行這樣的組織控制貨幣供...
    Nutbox_Lab閱讀 3,138評論 1 3
  • 〇、序言 貨幣由于其天然屬性決定了其與安全不可分割的聯系,從最早的金庫、保險柜、鏢局到后來的ATM機、運鈔車;從存...
    怒馬2048閱讀 38,919評論 4 79
  • about 參考cdw_FstLst的 Ubuntu配置Caffeonspark教程 Note 安裝的總體流程請看...
    龐貝船長閱讀 1,242評論 4 1