2013-07-07 78 views
3

我一直在尋找一個首選位置來創建密碼salt。我應該在哪裏創建密碼salt

對我來說,創建數據庫級別的密碼salt並在數據庫級別對輸入的密碼+ salt進行哈希處理很有意義。

但是,由於我是一個登錄安全超級小白,我想知道哪個位置最適合創建鹽本身。

從我已閱讀的內容中,我創建了一個存儲過程,它需要userloginpassword並比較存儲的鹽串聯以驗證輸入的密碼是否正確。

我現在需要知道的是,在新用戶帳戶上應該在哪裏創建密碼salt?

我的意圖是如果用戶忘記了密碼不可退還。如果他們忘記了它給了他們一個溫度,然後需要改變。同樣,如果密碼改變,我也想相應地改變鹽。

我對整體安全沒有幻想,只想減輕機會。

回答

2

生成鹽並散列密碼的地方應該在代碼中,而不是在數據庫中。

要哈希密碼,您需要像BCrypt或PBKDF2這樣的慢密鑰派生函數,但大多數數據庫都沒有這些函數的實現。這些函數有一個成本因子,它控制計算散列值所需的時間(對抗暴力破壞的時間越長,安全性越高)。 salt和成本因子通常與password-hash存儲在同一個字符串中,因此只需要一個字段來存儲散列。

要驗證密碼,首先必須使用password-hash的用戶名進行搜索,然後該函數可以提取使用的salt和成本因子,最後可以使用相同的參數對輸入的密碼進行散列處理以進行比較。

在代碼中還有另一個原因,密碼系統必須轉換爲更強大的算法,或者必須在將來增加成本因素​​,那麼在代碼中處理向後兼容性要容易得多,就像使用SQL語句。

+1

在這個實現模式上有什麼好的讀法?在代碼級別執行此操作http://crackstation.net/hashing-security.htm – GoldBishop

+0

鏈接的文章正是您所需要的,它顯示了使用PBKDF2算法的代碼,salt將自動生成,幷包含在得到的散列值。有關更多一般信息,您也可以查看我的[tutorial](http://www.martinstoeckli.ch/hash/en/index.php)。 – martinstoeckli

+0

查看了解決方案和其他一些。有沒有辦法讓keymaster(代碼)和gatemaster(db)結構?那樣的話,你必須同時擁有這兩個部分纔能有效地工作?大多數解決方案僅依靠源代碼來處理所有聚合,而不是將部分資源放在數據庫上(mssql) – GoldBishop

相關問題