2009-08-02 83 views
3

與大多數程序員一樣,我不是密碼學方面的專家,但我理解基礎知識。然而,如Jeff's blog post所述,一些知識可能是一件危險的事情。考慮到這一點,我理解鹽值的目的,但我需要一點幫助,瞭解如何使用鹽值。密碼鹽:其他最佳實踐

我已閱讀關於此主題的其他文章,最好使用隨機salt值爲每個密碼進行加密。如果是這種情況,當我嘗試驗證用戶時,如何再現該隨機鹽值?在這種情況下,我會加密用戶提供的明文密碼,對其進行加密,並將其與數據庫中存儲的內容進行比較。創建密碼時,是否將隨機鹽值與加密密碼一起存儲在用戶記錄中?如果黑客擁有完整的用戶記錄,這是否會使鹽值無用?

+1

與此問題相同:http://stackoverflow.com/questions/1219899/where-do-you-store-your-salt-strings – 2009-08-02 21:50:55

+1

我的部分搜索不佳。感謝那些選擇回答的人。 – 2009-08-02 22:04:01

回答

8

鹽的主要目的是在破解密碼哈希時防止使用rainbow tables - 如果不使用鹽,可以簡單地使用預先生成的反向查找表來查找哈希,並立即知道密碼可能會產生它。

有了鹽,彩虹表方法就會失敗,因爲哈希映射到密碼對於特定的鹽是完全不同的 - 因此必須爲每個鹽值分別生成彩虹表(以及花費的時間生成彩虹表的時間與在沒有彩虹表幫助的情況下強制散列花費的時間成正比)。

由於salt的目的是不允許使用預先生成的彩虹表,而不管攻擊者是否知道給定用戶輸入的特定鹽分,所以沒有真正的理由將其分開存儲,只要因爲您爲每個條目使用獨特的鹽。

1

我通常將我的鹽儲存在與用戶數據相同的表格中 - 如果黑客直接訪問您的數據庫,他們會破解您的密碼,鹽只是延遲它的方法。這會阻止他們使用彩虹桌。