2013-06-06 54 views
0

在PBKDF2中,salt應該對每個密碼都是唯一的,因此使用相同密碼的兩個用戶可以獲得兩個不同的哈希值。Javascript中的PBKDF2安全性

我對鹽的想法是用戶名和密碼的SHA1哈希值,所以它對每個用戶都是唯一的。

其實我必須在JavaScript環境中生成PBKDF2哈希。是否保存顯示salt是如何生成的,因爲JavaScript源文件是純文本的?

回答

0

使用用戶名作爲鹽主要是令人滿意的,但不能防止幾種攻擊情況。例如,可以在使用相同算法的兩個網站的數據庫中比較密碼。此外,可以預先生成彩虹表,從而減少妥協後的開裂時間。 由於這個確切的原因,鹽應該使用密碼PRNG生成。如果不可預測的話,讓隨機源的源代碼對攻擊者可見的想法本身並不是一個問題。有關如何使用JavaScript生成它,請參閱this question

+1

彩虹表只對非鹽漬密碼有效。如果鹽每個用戶都是唯一的,那麼每個用戶都必須生成彩虹表,這完全破壞了彩虹桌的點。 –

+0

沒有,它仍然有助於在散列之前計算彩虹;一旦你掌握了哈希算法,破解它就會更快。 (但你說這是一個每個用戶的桌子,這是不太方便的) – Zack4

0

簡單使用隨機鹽有什麼問題?除了你的方法不需要將鹽與散列密碼一起存儲,我想不出任何優點。

連接在一起的用戶名和密碼的散列應該沒問題。由於密碼是祕密的,因此用戶名和密碼的散列將是不可預知的。但是,正如其他人所提到的,如果有兩個網站使用相同的算法,則可能存在安全問題,並且使用這些網站的人使用相同的憑證(即查看他們的哈希密碼,我們可以告訴他們使用相同的密碼每個網站)。添加你的網站的域名應該解決這個問題。例如(+是串聯):

salt = hash(domain + username + password)

的這一切都這樣說,我會強烈建議使用密碼隨機數生成器生成的鹽,因爲它是產生鹽的標準做法。