密碼加密的方式有:1、利用對稱加密算法(例如3DES、AES)進(jìn)行加密,使用這種方式加密是可以通過解密來還原出原始密碼的,當(dāng)然前提條件是需要獲取到密鑰;2、使用單向HASH算法(例如MD5、SHA1)進(jìn)行密碼,但無法通過計算還原出原始密碼;3、使用特殊的單向HASH算法進(jìn)行密碼;4、使用PBKDF2算法進(jìn)行加密;5、使用BCrypt算法進(jìn)行加密;6、用SCrypt算法進(jìn)行加密。
本教程操作環(huán)境:windows7系統(tǒng)、DELL G3電腦
作為一名Web開發(fā)人員,我們經(jīng)常需要與用戶的帳號系統(tǒng)打交道,而這其中最大的挑戰(zhàn)就是如何保護(hù)用戶的密碼。密碼是一個網(wǎng)站系統(tǒng)最重要的護(hù)盾,如果把網(wǎng)站系統(tǒng)比作城堡,那密碼就是城門。關(guān)于如何安全的存儲密碼以及使用何種算法總是有很多的爭論:MD5、SHA1,SHA256、PBKDF2,Bcrypt、Scrypt、Argon2、明文??
常見的7種密碼加密方式
??我們該采用什么方式來保護(hù)用戶的密碼呢?以下幾種方式是常見的密碼保存方式:
算法 | 特點(diǎn) | 有效破解方式 | 破解難度 | 其它 |
---|---|---|---|---|
對稱加密 | 可以解密出明文 | 獲取密鑰 | 中 | 需要確保密鑰不泄露 |
單向HASH | 不可解密 | 碰撞、彩虹表 | 中 | |
特殊HASH | 不可解密 | 碰撞、彩虹表 | 中 | 需要確?!胞}”不泄露 |
Pbkdf2 | 不可解密 | 無 | 難 | 需要設(shè)定合理的參數(shù) |
BCrypt | 不可解密 | 無 | 難 | 需要設(shè)定合理的參數(shù) |
SCrypt | 不可解密 | 無 | 難 | 需要設(shè)定合理的參數(shù) |
Argon2 | 不可解密 | 無 | 難+ |
1、使用對稱加密算法來保存
使用情況: ★★☆☆☆
??比如3DES、AES等算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當(dāng)然前提條件是需要獲取到密鑰。不過既然大量的用戶信息已經(jīng)泄露了,密鑰很可能也會泄露,當(dāng)然可以將一般數(shù)據(jù)和密鑰分開存儲、分開管理,但要完全保護(hù)好密鑰也是一件非常復(fù)雜的事情,所以這種方式并不是很好的方式。
對稱加密
明文
密文
對稱解密
密文
明文
2、使用MD5、SHA1等單向HASH算法保護(hù)密碼
使用情況: ★★★☆☆
??使用這些算法后,無法通過計算還原出原始密碼,而且實(shí)現(xiàn)比較簡單,因此很多互聯(lián)網(wǎng)公司都采用這種方式保存用戶密碼,曾經(jīng)這種方式也是比較安全的方式,但隨著彩虹表技術(shù)的興起,可以建立彩虹表進(jìn)行查表破解,目前這種方式已經(jīng)很不安全了。
HASH算法
明文
密文
無法還原
密文
明文
3、特殊的單向HASH算法
使用情況: ★★★☆☆
??由于單向HASH算法在保護(hù)密碼方面不再安全,于是有些公司在單向HASH算法基礎(chǔ)上進(jìn)行了加鹽、多次HASH等擴(kuò)展,這些方式可以在一定程度上增加破解難度,對于加了“固定鹽”的HASH算法,需要保護(hù)“鹽”不能泄露,這就會遇到“保護(hù)對稱密鑰”一樣的問題,一旦“鹽”泄露,根據(jù)“鹽”重新建立彩虹表可以進(jìn)行破解,對于多次HASH,也只是增加了破解的時間,并沒有本質(zhì)上的提升。
HASH算法
鹽+明文
密文
無法還原
密文
明文
4、PBKDF2
使用情況: ★★★★☆
??該算法原理大致相當(dāng)于在HASH算法基礎(chǔ)上增加隨機(jī)鹽,并進(jìn)行多次HASH運(yùn)算,隨機(jī)鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。使用PBKDF2算法時,HASH算法一般選用sha1或者sha256,隨機(jī)鹽的長度一般不能少于8字節(jié),HASH次數(shù)至少也要1000次,這樣安全性才足夠高。一次密碼驗(yàn)證過程進(jìn)行1000次HASH運(yùn)算,對服務(wù)器來說可能只需要1ms,但對于破解者來說計算成本增加了1000倍,而至少8字節(jié)隨機(jī)鹽,更是把建表難度提升了N個數(shù)量級,使得大批量的破解密碼幾乎不可行,該算法也是美國國家標(biāo)準(zhǔn)與技術(shù)研究院推薦使用的算法。
??PBKDF2 已經(jīng)存在很長時間了,像之前文章討論的一樣,它有點(diǎn)過時了:輕松的在多核系統(tǒng)(GPU)上實(shí)現(xiàn)并行,這對于定制系統(tǒng)(FPGA/ASIC)來說微不足道。
多次HASH算法
隨機(jī)鹽+明文
密文
無法還原
密文
明文
5、BCrypt
使用情況: ★★★★☆
??BCrypt 在1999年就產(chǎn)生了,并且在對抗 GPU/ASIC 方面要優(yōu)于 PBKDF2,但是我還是不建議你在新系統(tǒng)中使用它,因?yàn)樗陔x線破解的威脅模型分析中表現(xiàn)并不突出。 盡管有一些數(shù)字加密貨幣依賴于它(即:NUD),但它并沒有因此獲得較大的普及,因此,F(xiàn)PGA/ASIC 社區(qū)也并沒有足夠的興趣來構(gòu)建它的硬件實(shí)現(xiàn)。 話雖如此,Solar Designer(OpenWall)、Malvoni 和 Knezovic(薩格勒布大學(xué))在 2014 年撰寫了一篇論文,這篇文章描述了一種混合使用 ARM/FPGA 的單片系統(tǒng)來攻擊該算法。
6、SCrypt
使用情況: ★★★★☆
??SCrypt 在如今是一個更好的選擇:比 BCrypt設(shè)計得更好(尤其是關(guān)于內(nèi)存方面)并且已經(jīng)在該領(lǐng)域工作了 10 年。另一方面,它也被用于許多加密貨幣,并且我們有一些硬件(包括 FPGA 和 ASIC)能實(shí)現(xiàn)它。 盡管它們專門用于采礦,也可以將其重新用于破解。
7、Argon2
使用情況: ★★★★★
??Argon2 基于 AES 實(shí)現(xiàn),現(xiàn)代的 x64 和 ARM 處理器已經(jīng)在指令集擴(kuò)展中實(shí)現(xiàn)了它,從而大大縮小了普通系統(tǒng)和攻擊者系統(tǒng)之間的性能差距,
??Argon2 有三個主要的版本:
- Argon2i 是對抗側(cè)信道攻擊的最安全選擇,Argon2i 使用與數(shù)據(jù)無關(guān)的內(nèi)存訪問,這是密碼哈希的首選方法,Argon2i 對內(nèi)存進(jìn)行了