2017-05-06 26 views
-2

爲數據庫中的每個密碼(例如SHA-1和MD5)存儲兩個散列並檢查登錄腳本中的兩個散列以防止衝突是一個好主意嗎?另一方面,從兩個哈希計算密碼(例如,如果黑客可以訪問數據庫),是不是更容易?爲數據庫中的每個密碼存儲兩個哈希是一個好主意嗎?

+0

[在crypto stackexchange上查看此答案](https://crypto.stackexchange.com/a/31165)。總結一下,碰撞的可能性大約是2^64,假設你有兩個相同的哈希值,它們是單獨的賬戶,那麼如何知道? – ourmandave

+0

我投票結束這個題目,因爲它屬於crypto.se.com –

回答

1

這可能沒有用。

任何你使用的散列函數都可以避免意外碰撞 - 它們幾乎不可能。所以你關心的唯一衝突是黑客已經損害了你的數據庫,並且擁有你的哈希值,試圖找出生成目標哈希的密碼。

這被稱爲「第二原像攻擊」,它非常困難。對於任何相對較新的算法,都沒有已知的第二次原像攻擊,即使是回到MD4。這不應該是一個嚴重的問題。

但是,如果您使用的是通用哈希函數,那麼人們強制您的黑客哈希現實的問題。 您不應該使用SHA-2等通用哈希函數,即使使用鹽類。你應該使用密碼哈希函數,比如bcrypt,它可以抵抗暴力破壞。如果你正在使用正常的散列函數,那麼,正如你注意到的那樣,存儲兩個意味着他們只需要強悍弱者 - 這又是一件可能出錯的事情。

不要打擾。改爲使用密碼哈希函數。這會更安全和簡單。

0

我真的不知道如何從密碼存儲2次哈希值然後檢查兩者中獲得任何好處。所有你在這裏做的是給你的應用程序做更多的工作,在我看來不提供任何額外的安全級別,因爲他們仍然輸入相同的密碼。

+0

它會阻止這種攻擊[破碎的SHA1](https://shattered.io/),因爲md5會仍然無法匹配。 – KauriNZ

相關問題