密碼加密的方式有:1、利用對稱加密演演算法(例如3DES、AES)進行加密,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到金鑰;2、使用單向HASH演演算法(例如MD5、SHA1)進行密碼,但無法通過計算還原出原始密碼;3、使用特殊的單向HASH演演算法進行密碼;4、使用PBKDF2演演算法進行加密;5、使用BCrypt演演算法進行加密;6、用SCrypt演演算法進行加密。
本教學操作環境:windows7系統、DELL G3電腦
作為一名Web開發人員,我們經常需要與使用者的帳號系統打交道,而這其中最大的挑戰就是如何保護使用者的密碼。密碼是一個網站系統最重要的護盾,如果把網站系統比作城堡,那密碼就是城門。關於如何安全的儲存密碼以及使用何種演演算法總是有很多的爭論:MD5、SHA1,SHA256、PBKDF2,Bcrypt、Scrypt、Argon2、明文??
我們該採用什麼方式來保護使用者的密碼呢?以下幾種方式是常見的密碼儲存方式:
演演算法 | 特點 | 有效破解方式 | 破解難度 | 其它 |
---|---|---|---|---|
對稱加密 | 可以解密出明文 | 獲取金鑰 | 中 | 需要確保金鑰不洩露 |
單向HASH | 不可解密 | 碰撞、彩虹表 | 中 | |
特殊HASH | 不可解密 | 碰撞、彩虹表 | 中 | 需要確保「鹽」不洩露 |
Pbkdf2 | 不可解密 | 無 | 難 | 需要設定合理的引數 |
BCrypt | 不可解密 | 無 | 難 | 需要設定合理的引數 |
SCrypt | 不可解密 | 無 | 難 | 需要設定合理的引數 |
Argon2 | 不可解密 | 無 | 難+ |
1、使用對稱加密演演算法來儲存
使用情況: ★★☆☆☆
比如3DES、AES等演演算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到金鑰。不過既然大量的使用者資訊已經洩露了,金鑰很可能也會洩露,當然可以將一般資料和金鑰分開儲存、分開管理,但要完全保護好金鑰也是一件非常複雜的事情,所以這種方式並不是很好的方式。
2、使用MD5、SHA1等單向HASH演演算法保護密碼
使用情況: ★★★☆☆
使用這些演演算法後,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多網際網路公司都採用這種方式儲存使用者密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。
3、特殊的單向HASH演演算法
使用情況: ★★★☆☆
由於單向HASH演演算法在保護密碼方面不再安全,於是有些公司在單向HASH演演算法基礎上進行了加鹽、多次HASH等擴充套件,這些方式可以在一定程度上增加破解難度,對於加了「固定鹽」的HASH演演算法,需要保護「鹽」不能洩露,這就會遇到「保護對稱金鑰」一樣的問題,一旦「鹽」洩露,根據「鹽」重新建立彩虹表可以進行破解,對於多次HASH,也只是增加了破解的時間,並沒有本質上的提升。
4、PBKDF2
使用情況: ★★★★☆
該演演算法原理大致相當於在HASH演演算法基礎上增加隨機鹽,並進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。使用PBKDF2演演算法時,HASH演演算法一般選用sha1或者sha256,隨機鹽的長度一般不能少於8位元組,HASH次數至少也要1000次,這樣安全性才足夠高。一次密碼驗證過程進行1000次HASH運算,對伺服器來說可能只需要1ms,但對於破解者來說計算成本增加了1000倍,而至少8位元組隨機鹽,更是把建表難度提升了N個數量級,使得大批次的破解密碼幾乎不可行,該演演算法也是美國國家標準與技術研究院推薦使用的演演算法。
PBKDF2 已經存在很長時間了,像之前文章討論的一樣,它有點過時了:輕鬆的在多核系統(GPU)上實現並行,這對於客製化系統(FPGA/ASIC)來說微不足道。
5、BCrypt
使用情況: ★★★★☆
BCrypt 在1999年就產生了,並且在對抗 GPU/ASIC 方面要優於 PBKDF2,但是我還是不建議你在新系統中使用它,因為它在離線破解的威脅模型分析中表現並不突出。 儘管有一些數位加密貨幣依賴於它(即:NUD),但它並沒有因此獲得較大的普及,因此,FPGA/ASIC 社群也並沒有足夠的興趣來構建它的硬體實現。 話雖如此,Solar Designer(OpenWall)、Malvoni 和 Knezovic(薩格勒布大學)在 2014 年撰寫了一篇論文,這篇文章描述了一種混合使用 ARM/FPGA 的單片系統來攻擊該演演算法。
6、SCrypt
使用情況: ★★★★☆
SCrypt 在如今是一個更好的選擇:比 BCrypt設計得更好(尤其是關於記憶體方面)並且已經在該領域工作了 10 年。另一方面,它也被用於許多加密貨幣,並且我們有一些硬體(包括 FPGA 和 ASIC)能實現它。 儘管它們專門用於採礦,也可以將其重新用於破解。
7、Argon2
使用情況: ★★★★★
Argon2 基於 AES 實現,現代的 x64 和 ARM 處理器已經在指令集擴充套件中實現了它,從而大大縮小了普通系統和攻擊者系統之間的效能差距,
Argon2 有三個主要的版本:
如果你擔心側通道攻擊(例如:惡意資料快取載入/幽靈漏洞,它允許通過基於快取的側通道讀取同一硬體上其他正在執行的程序的私有記憶體資料),你應該使用 Argon2i,否則使用 Argon2d。 如果你不確定或你對混合方法感到滿意,你可以使用 Argon2id 來獲得兩個方面的優勢。
原始碼可以在 Github 上獲得,使用相容 C89 的 C 語言編寫,並在知識共用許可協定下獲取許可,並且可以在大多數 ARM、x86 和 x64 架構的硬體上編譯。
溫馨提醒:
在2019 年之後,就有相關專家提出建議儘量不要使用 PBKDF2 或 BCrypt,並強烈建議將 Argon2(最好是 Argon2id)用於最新系統。而Scrypt 是當 Argon2 不可用時的不二選擇,但要記住,它在側側通道洩露方面也存在相同的問題。
更多相關知識,請存取欄目!
以上就是密碼加密的方式有哪些的詳細內容,更多請關注TW511.COM其它相關文章!