2011-07-29 139 views
3

我見過很多關於使用salt和hash來創建可以存儲在數據庫中的密碼的安全版本的文章。安全的網站密碼存儲

但是,有一個問題令我困惑,我看不到問題,所以我想我會在這裏發佈問題,看看其他人是否可以指出這個想法中的任何缺陷。

我的基本想法是生成一個公鑰/私鑰對,然後銷燬私鑰。我對公鑰/私鑰密碼學的理解有限,如果我沒有私鑰,那麼解密用公鑰加密的消息在數學上是不可能的。

我會使用公鑰來加密密碼,然後將加密版本存儲在數據庫中。當有人試圖登錄時,我只需使用公鑰對密碼進行加密,並查看它是否與存儲的密碼相符?

這個想法是否有一些可怕的缺陷?鹽和哈希會以某種方式更安全嗎?

回答

1

這種方法的問題是,不像散列函數,加密函數的輸出是不確定的一般:您可以使用相同的公鑰對相同的有效負載進行兩次加密,並且每次加密算法都會生成完全不同的密文。例如,RSA加密將隨機填充納入輸入以抵禦某些類型的攻擊。

相比之下,密碼散列的輸出是確定性的,因此需要在需要該屬性的密碼存儲等問題中使用。

0

您已經有效地描述了散列部分 - 考慮兩個人共享相同密碼的情況 - 使用您的基本方法,存儲的值將是相同的。因此,如果您發現哈希算法和字典攻擊,您可以生成密碼 - >哈希值表,並立即查找每個人的可能密碼。

畢竟,如果黑客得到了你的餐桌,他們可能得到你的代碼,太...

+0

對 - 我現在明白了,所以只要我根據記錄中的數據使用salt生成密碼,那麼這將意味着每個密碼都必須單獨暴力強制,這不會阻止數據被泄露,但會使這樣做非常昂貴。 –