md5不安全!那如何保護密碼?


密碼的安全等級

一、level0 ---- 明文:不加密

username

password

tom 123456

 

二、level1 ---- 摘要式身份驗證

驗證流程:
- 1、 提交用戶名密碼
- 2、計算密碼哈希值
- 3、比對存儲的哈希值和計算出的哈希值是否相等
相同:登陸成功
不同:登陸失敗
使用哈希算法(可以是md5, sha1, sha256,sha512 結果長度依次增長):

 

哈希算法缺點:

1、容易遭受彩虹表(rainbow table, 如下)攻擊!通過把大量的哈希值和原密碼存儲的組合存儲在表中。達到用得到的hash值反向查詢原密碼。
2、另外一個缺點是可以看到誰有相同的密碼
3、md5作為密碼已經十分不安全,現在網上有很多網站可以通過出入md5 的哈希碼來查詢對應的明文(通過彩虹表實現)。
hash_value original_password
ba3253876aed6b… 123456
c70b5dd9ebfb6f… abc123
b109f3bbbc244e… password

 

三、Level2 ---- 哈希+salt

salt可以簡單的理解成:隨機產生的一定長度的,可以和密碼相結合,從而使hash算法產生不同結果的字符串。

 

優點:這種方法會極大防止受到彩虹表的攻擊,因為即便攻擊者構造出彩虹表,因為你使用了 hash(密碼+ salt),
          攻擊者彩虹表里的哈希值(hash(密碼))和你數據庫中的哈希值是不同的。 
 
缺點: 如果攻擊者知道了salt和你的哈希值,就可以計算出你的原始密碼(當然也沒有那么容易)
 

四、level3 ---- 增加計算的時間 (哈希 + salt + Iteration)

通過迭代計算的方式增加計算密碼的成本。迭代的周期控制在用戶可以接受范圍內,這樣攻擊者的計算和時間成本就會大大增加。

一般的應用應用做到LEVEL3就可以了,如果需要更加安全的方式請看下文

 

五、level4 ---- 加密哈希后的密碼

通過迭代計算的方式增加計算密碼的成本。迭代的周期控制在用戶可以接受范圍內,這樣攻擊者的計算和時間成本就會大大增加。

一般的應用應用做到LEVEL3就可以了,如果需要更加安全的方式請看下文

- 定時更換密鑰(准備一組密鑰定時更換,首先通過密鑰解密加密存儲的密碼得到 bscript計算出的hash值,再用新的密鑰進行加密) 

- 密鑰存儲在在不同的數據源 
(通過將密鑰存儲在不同的數據源的方法,進一步增加了破解難度,因為需要同時獲得用戶密碼表數據,同時要獲得其他數據源存儲的密鑰)
 

六、level5 ---- 在Level4的基礎上,將密碼分成若干個塊,分發到不同的數據庫

轉發

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM