5種使用者密碼加密方式,哪種最安全?

2021-10-16 13:21:31 字數 2406 閱讀 2549

作為網際網路公司的資訊保安從業人員經常要處理撞庫掃號事件(撞庫是黑客無聊的「惡作劇」,黑客通過收集網際網路已洩露的使用者+密碼資訊,生成對應的字典表,嘗試批量登陸其他**後,得到一系列可以登陸的使用者),產生撞庫掃號的根本原因是一些企業發生了資訊洩露事件,且這些洩露資料未加密或者加密方式比較弱,導致黑客可以還原出原始的使用者密碼。

以京東之前的撞庫舉例,首先京東的資料庫並沒有洩漏。黑客只不過通過「撞庫」的手法,「湊巧」獲取到了一些京東使用者的資料(使用者名稱密碼),而這樣的手法,幾乎可以對付任何**登入系統,使用者在不同**登入時使用相同的使用者名稱和密碼,就相當於給自己配了一把「****」,一旦丟失,後果可想而知。

今天主要分別介紹使用者密碼的加密方式以及主要的破解方法。

彩虹表:如果將雜湊後的密文比作一把鎖,暴力破解的方法就是現場製作各種各樣不同齒形的鑰匙,再來嘗試能否開鎖,這樣耗時無疑很長;我以前錯誤理解的「彩虹表」,是事先製作好所有齒形的鑰匙,全部拿過來嘗試開鎖,這樣雖然省去了製作鑰匙的時間,但是後來發現這些鑰匙實在是太多了,沒法全部帶在身上。而真正的彩虹表,是將鑰匙按照某種規律進行分組,每組鑰匙中只需要帶最有特點的乙個,當發現某個「特徵鑰匙」差一點就能開鎖了,則當場對該鑰匙進行簡單的打磨,直到能開鎖為止。這種方法是既省力又省時的。

使用者密碼加密方式

使用者密碼儲存到資料庫時,常見的加密方式有哪些?以下幾種方式是常見的密碼儲存方式:

1. 明文儲存

比如使用者設定的密碼是「123456」,直接將「123456」儲存在資料庫中,這種是最簡單的儲存方式,也是最不安全的方式。但實際上不少網際網路公司,都可能採取的是這種方式。

2. 對稱加密演算法來儲存

比如3des、aes等演算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到金鑰。不過既然大量的使用者資訊已經洩露了,金鑰很可能也會洩露,當然可以將一般資料和金鑰分開儲存、分開管理,但要完全保護好金鑰也是一件非常複雜的事情,所以這種方式並不是很好的方式。

3. md5、sha1等單向hash演算法

使用這些演算法後,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多網際網路公司都採用這種方式儲存使用者密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。

其實之前公司也是採用的這種md5加密方式。

4. pbkdf2演算法

該演算法原理大致相當於在hash演算法基礎上增加隨機鹽,並進行多次hash運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次hash也使得建表和破解的難度都大幅增加。

在使用pbkdf2演算法時,hash一般會選用sha1或者sha256,隨機鹽的長度一般不能少於8位元組,hash次數至少也要1000次,這樣安全性才足夠高。一次密碼驗證過程進行1000次hash運算,對伺服器來說可能只需要1ms,但對於破解者來說計算成本增加了1000倍,而至少8位元組隨機鹽,更是把建表難度提公升了n個數量級,使得大批量的破解密碼幾乎不可行,該演算法也是美國國家標準與技術研究院推薦使用的演算法。

5. bcrypt、scrypt等演算法

這兩種演算法也可以有效抵禦彩虹表,使用這兩種演算法時也需要指定相應的引數,使破解難度增加。

在密碼學中,scrypt(唸作「ess crypt」)是colin percival於2023年所發明的金鑰推衍函式,當初設計用在他所創立的tarsnap服務上。設計時考慮到大規模的客製硬體攻擊而刻意設計需要大量記憶體運算。

scrypt不僅計算所需時間長,而且占用的記憶體也多,使得平行計算多個摘要異常困難,因此利 用rainbow table進行暴力攻擊更加困難。scrypt 沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函式庫支援。但是,scrypt 在演算法層面只要沒有破綻,它的安全性應該高於pbkdf2和bcrypt。

各個演算法的特性

總結

採用pbkdf2、bcrypt、scrypt等演算法可以有效抵禦彩虹表攻擊,即使資料洩露,最關鍵的「使用者密碼」仍然可以得到有效的保護,黑客無法大批量破解使用者密碼,從而切斷撞庫掃號的根源。

哪種WIFI無線各種加密方式更安全可靠?

現在是 有隱私,就有安全防護wifi,wi。加密作為一種緊張的安全防護本領,在無線網路的應用中可謂無以復加。但對付家庭來說,如果自己付款的寬頻網路因無線訊號沒有加密而給別人免費享用並占用了大量的頻寬這可不是一件愉快的事情。隨著無線網路的普及,在商場 街上 餐廳搜尋到無線訊號並不出奇,這些無線熱點一般...

最簡單的使用者密碼儲存方式

最簡單的使用者密碼儲存方式 使用者訪問 在註冊時需要輸入使用者名稱和密碼,在僅考慮功能的前提下,可以把使用者名稱和密碼以明文的方式儲存在資料表中。username password foobar foobar 123456 當使用者登入時,直接使用使用者提供的明文密碼與資料庫中的密碼進行比對,如果相...

Linux中檢視使用者密碼(加密方式)

我們知道linux是乙個多使用者的作業系統,也就是說在linux系統中儲存著很多不同使用者的使用者名稱及密碼。那麼如果某乙個使用者的密碼忘記了怎麼辦?首先我們得知道,在linux系統中,使用者名稱被存放在了 etc passwd這個檔案中 密碼存放在 etc shadow中。知道這兩條重要的資訊,那...