Encryption

什麼是加密“鹽”?

  • February 5, 2021

我是密碼學的初學者,希望用非常簡單的術語來理解什麼是密碼學*“鹽”*,什麼時候可能需要使用它,以及為什麼我應該或不應該使用它。

我能得到一個非常簡單明了(初級)的解釋嗎?

如果您知道有關該主題的任何參考資料,那麼這些參考資料也會很有用。

使用鹽的原因是人們傾向於選擇相同的密碼,而不是隨機選擇。許多使用的密碼都是簡短的真實單詞,以便於記憶,但這也可以進行攻擊。

您可能知道,密碼通常不以明文形式儲存,而是以散列形式儲存。如果您不確定雜湊函式的用途,請先閱讀。

現在,攻擊者可以做的就是簡單地生成一個常見密碼列表及其對應的雜湊值。如果使用通用密碼,將站點儲存的雜湊值與表進行比較,會將密碼洩露給攻擊者。

只需添加使密碼散列輸出 即使對於採用通用密碼的使用者也是唯一的。其目的是使基於預計算的攻擊無濟於事。如果您的密碼使用唯一的鹽儲存,那麼任何針對未加鹽密碼雜湊或針對具有不同鹽的帳戶的預先計算的密碼雜湊表都不會幫助破解您的帳戶密碼。一個長的隨機生成的鹽(使用/dev/urandom)預計是全域唯一的。因此鹽可以用來使預計算攻擊完全無效。

組合鹽和密碼的最簡單方法是簡單地連接它們,即儲存的雜湊值為Hash(salt||password). 通用密碼password1現在神奇地變成了,例如,6$dK,3gCA%Jpassword1在密碼破解者的表格中不太可能找到。

鹽可以完全以明文形式儲存在數據庫中,位於散列值旁邊。一旦攻擊者擁有數據庫並想要找到密碼,他需要為每個鹽單獨生成預先計算的表,這是一個昂貴的操作。

另一種幫助防禦離線密碼破解的方法是執行密碼拉伸,即。使任何人的密碼雜湊計算速度變慢,包括登錄服務和密碼破解者。一種用於拉伸密碼的方法是通過多次迭代雜湊函式來實現的,即儲存Hash(Hash(Hash(Hash…(Hash(salt||password)))…).

另一個與pickle有關的常見想法稱為胡椒。也就是說,另一個隨機值連接到密碼,這樣儲存的值是Hash(pepper||salt||password)。然後根本不儲存辣椒。登錄伺服器和密碼破解者都需要暴力破解未知的辣椒值,從而減慢雙方的密碼雜湊比較。

從 2013 年到 2015 年,舉辦了密碼雜湊競賽,以尋找更好的密碼拉伸算法。獲勝者是Argon2算法。建議程序員使用 Argon2而不是實現自己的算法

引用自:https://crypto.stackexchange.com/questions/1776