使用者密碼加密方式
使用者密碼儲存到資料庫時,常見的加密方式有哪些?以下幾種方式是常見的密碼儲存方式:
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於2009年所發明的金鑰推衍函式,當初設計用在他所創立的Tarsnap服務上。設計時考慮到大規模的客制硬體攻擊而刻意設計需要大量記憶體運算。
Scrypt不僅計算所需時間長,而且佔用的記憶體也多,使得平行計算多個摘要異常困難,因此利 用rainbow table進行暴力攻擊更加困難。Scrypt 沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函式庫支援。但是,Scrypt 在演算法層面只要沒有破綻,它的安全性應該高於PBKDF2和bcrypt。
使用者密碼加密方式
使用者密碼儲存到資料庫時,常見的加密方式有哪些?以下幾種方式是常見的密碼儲存方式:
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於2009年所發明的金鑰推衍函式,當初設計用在他所創立的Tarsnap服務上。設計時考慮到大規模的客制硬體攻擊而刻意設計需要大量記憶體運算。
Scrypt不僅計算所需時間長,而且佔用的記憶體也多,使得平行計算多個摘要異常困難,因此利 用rainbow table進行暴力攻擊更加困難。Scrypt 沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函式庫支援。但是,Scrypt 在演算法層面只要沒有破綻,它的安全性應該高於PBKDF2和bcrypt。