Salt
“鹽”的用法
有人可以解釋一下 Salts 應該如何儲存在數據庫中嗎?Salt的使用流程是怎樣的?
我在一本書中讀到鹽應該儲存在雜湊表數據庫旁邊。但是如果攻擊者同時竊取雜湊表和 Salt 值會發生什麼?我們應該使用多少鹽值?
我們應該使用多少鹽值?
鹽的想法是使密碼散列唯一,因此攻擊者無法重複使用從破解一個密碼到另一個密碼的計算,因此您確實應該為每個密碼散列使用一個唯一的鹽。
但是如果攻擊者同時竊取雜湊表和鹽值會發生什麼?
攻擊者將能夠暴力破解表中所有使用者的密碼。如果密碼很弱和/或使用了弱密碼散列函式,這可能允許他恢復一些密碼。攻擊者恢復密碼後,他可能會嘗試在使用者使用相似/相同使用者名的其他服務中重新使用這些密碼。如果兩個雜湊共享相同的鹽並且恰好是相同的密碼(例如“123456”),那麼攻擊者可以通過僅破解其中一個來有效地恢復兩個使用者的密碼。
Salt的使用流程是怎樣的?
通常你將你的鹽連同密碼和散列一起輸入你的*密碼散列函式,然後它會告訴你密碼對於這個散列和鹽是否有效。*更好的方案(例如Argon2)支持所謂的模組化加密格式,它是密碼雜湊的編碼,還包括關鍵參數和每個密碼雜湊的新(隨機)鹽(base64 編碼)。如果您可以使用這種格式,這是一個一次性的解決方案,因為您只需要求工具/後端生成一個新條目(對於給定的密碼)並立即儲存它,當您登錄時,您可以獲取它字元串並將其傳遞給驗證引擎,您就完成了。
有人可以解釋一下 Salts 應該如何儲存在數據庫中嗎?
在某個地方,您可以直接將每個鹽 1 對 1 映射到相應的密碼雜湊。這可能直接在同一個條目、不同列甚至不同表中使用散列。