2011-05-30 149 views
4

我正在使用PKCS#5標準在輸入中使用隨機和唯一的salt以及用戶的密碼來生成密鑰。把這個鍵看作是「加密」鍵。沿着加密的AES密鑰存儲密碼哈希的安全隱患

「加密」密鑰用於加密隨機AE​​S密鑰。每個用戶都有一個與其個人資料關聯的AES密鑰。

所以,一個user`s配置文件將包含此信息:

- 用於認證目的>密碼哈希。

- >在PKCS#5算法中使用的鹽。 (從PKCS#5 V2.0文檔,我們知道這些信息不需要保護)。

- >隨機生成的,與由PKCS#5 ALGO與鹽和user`s密碼產生的「加密」鍵

我問自己是否是危險的加密的加密的AES密鑰在同一時間擁有密碼的哈希,鹽和加密的AES密鑰。我99.9%確定這不是問題,但是它能否促進攻擊者擁有所有這些細節的工作?

+2

你可能會更好地問這個在http://security.stackexchange.com/ – 2011-05-30 15:23:33

+1

密碼哈希是否也被鹽漬? – 2011-05-30 19:15:29

回答

3

密碼哈希還需要使用salt,否則可能會發生字典攻擊,碰巧選擇相同密碼的兩個用戶將具有存儲在數據庫中的相同散列密碼。

我會建議這樣做:只需使用PKCS#5兩次;一次生成哈希密碼(您保存在明文中),一次生成加密密鑰(您不知道)。

確保salt是大的,隨機的和獨立的,然後密碼散列和加密密鑰之間將沒有可檢測的關係。畢竟,鹽就是這樣。

[更新,來闡述一個比特]

接兩種鹽S1和S2。確保每個都至少有64位,是隨機的,並且是獨立的。

將密碼+ s1用作空字符串上PKCS#5 HMAC的輸入。這是「散列密碼」。

使用密碼+ s2作爲PKCS#5加密方案的輸入來加密實際數據。

將散列密碼s1和s2存儲在數據庫中的明文中。完成。