目前我正在使用特定的方案來保護密碼,我想我有一些要改進的地方。這個實現是用Java編寫的,所以我更喜歡使用SHA-2 512作爲加密表單。密碼安全
目前,我有一個客戶端 - 服務器模型,所以這些事情都可能發生:
- 客戶希望登錄,他把他的一次正常的SHA-2 512加密在網絡上的密碼。
- 服務器將密碼存儲在數據庫中,例如SHA-2_512(SHA-2_512(password)+ salt),內部SHA-2_512(密碼)是通過網絡接收的'加密'密碼。
- 密碼檢查是在服務器端完成的,沒有任何方法可以從服務器泄漏出來,唯一可能的漏洞是如果有人能夠讀出我認爲的RAM。
我有以下問題:
攻擊者通常想破解密碼時產生的碰撞攻擊。但是,碰撞攻擊如何充分?如果密碼需要用於Outlook.com,Facebook等其他應用程序(可能使用另一種鹽,因爲它們與我的應用程序無關),那麼碰撞攻擊是如何進行的?你不需要真正的密碼嗎?
SHA-2 512是否已經使用迭代?即使如此,我是否應該將自己的加密方法更改爲自動使用多次迭代以及優先迭代次數?我也讀過使用隨機數的迭代(在一個範圍內),我如何存儲隨機因子?
我應該爲服務器代碼中的每次迭代存儲系統機密嗎?見http://blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/。我可以存儲一個數組,每個迭代都會保存一個靜態的祕密,第n個祕密是第n次迭代。沒有人可以知道祕密,他們被計算一次(我猜想是加密一些隨機字符串),然後基本上存儲在服務器的RAM中。
目前我只是將密碼從客戶端發送到服務器,只是SHA-2_512(密碼),這個過程是否應該改進,如果是這樣,怎麼做?我不能使用鹽,因爲客戶沒有可用的鹽。
問候。
我研究了一下,我認爲這是一個重要的注意要補充:BCrypt應該做客戶端授權(和服務器端一次註冊/密碼更改)。所以服務器上的壓力真的很低。如果錯了,請糾正我。有沒有辦法確定一個好的工作因素? – skiwi
@skiwi我不認爲你應該在客戶端執行bcrypt計算。你能分享你的參考嗎?服務器上使用bcrypt的壓力仍然很低,但是攻擊者試圖通過嘗試1000次猜測來強制攻擊的壓力非常大。 – Steve
查看http://stackoverflow.com/questions/4443476/optimal-bcrypt-work-factor確定工作因子。 – Steve