隨機鹽值(salt)是什麼?泄露會出什麼問題?

在這篇文章里看到的:http://36kr.com/p/5038017.html

是一個網站在 md5 的時候使用一個統一的隨機字元串么?不太了解這個,網上搜索到的也不敢相信。是的話這個值如果連同包含密碼的資料庫一起泄露會怎樣?


題主可參看wiki百科中的詞條:鹽(密碼學)。若翻不了牆,見下原文:

(Salt),在密碼學中,是指通過在密碼任意固定位置插入特定的字元串,讓散列後的結果和使用原始密碼的散列結果不相符,這種過程稱之為「加鹽」。

安全因素

通常情況下,當欄位經過散列處理(如MD5),會生成一段散列值,而散列後的值一般是無法通過特定演算法得到原始欄位的。但是某些情況,比如一個大型的彩虹表,通過在表中搜索該MD5值,很有可能在極短的時間內找到該散列值對應的真實欄位內容。

加鹽後的散列值,可以極大的降低由於用戶數據被盜而帶來的密碼泄漏風險,即使通過彩虹表尋找到了散列後的數值所對應的原始內容,但是由於經過了加鹽,插入的字元串擾亂了真正的密碼,使得獲得真實密碼的概率大大降低。

實現原理

加鹽的實現過程通常是在需要散列的欄位的特定位置增加特定的字元,打亂原始的字元串,使其生成的散列結果產生變化。比如,用戶使用了一個密碼:

x7faqgjw

經過MD5散列後,可以得出結果:

455e0e5c2bc109deae749e7ce0cdd397

但是由於用戶密碼位數不足,短密碼的散列結果很容易被彩虹表破解,因此,在用戶的密碼末尾添加特定字元串(粗體下劃線為加鹽的欄位):

x7faqgjwabcdefghijklmnopqrstuvwxyz

因此,加鹽後的密碼位數更長了,散列的結果也發生了變化:

4a1690d5eb6c126ef68606dda68c2f79

以上就是加鹽過程的簡單描述,在實際使用過程中,還需要通過特定位數插入、倒序或多種方法對原始密碼進行固定的加鹽處理,使得散列的結果更加不容易被破解或輕易得到原始密碼,比如(綠色字體為加鹽字元串):

x7afabqgcjw


剛查了相關資料,覺得自己應該是懂了。salt值只是為了防禦彩虹表,這個值不用考慮泄不泄露的問題,就算告訴黑客了,他也是無法根據散列後的值找到用戶密碼的。因為他根本無法根據散列後的值從彩虹表裡查到加了鹽值後的密碼。


推薦閱讀:

魅族MX6發布會中為快閃記憶體優化的「全新文件管理架構」的原理是?
如何看待軍工女學霸對想破解北斗系統不如去造時光機的言論?
使用筆記本辦公,經常帶來帶去,如果丟失了,怎樣儘可能保證數據安全?
手機丟了,第一時間應該怎麼辦?

TAG:數據安全 | 網路安全 |