密碼的安全等級
一、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的基礎上,將密碼分成若干個塊,分發到不同的數據庫
轉發