Key-Derivation

使用確定性鹽作為 KDF(Argon2)的輸入是否安全?

  • February 11, 2020

我正在製作一個使用客戶端密碼雜湊的應用程序原型,以便從伺服器隱藏“真實”帳戶密碼(伺服器無論如何都會對任何收到的密碼進行雜湊處理,因此數據庫中沒有明文記錄)。這似乎是一件有爭議的事情,但我沒有找到任何令人信服的論據反對它(我是密碼學的新手,所以如果我錯了,請糾正我)。

我正在嘗試找出適合 Argon2i 的鹽。許多實現預設生成隨機鹽,但它不允許使用者再次登錄,因為使用新鹽會產生新的雜湊。這就是為什麼我不能避免使用確定性鹽。

我的理解是:每個鹽值最好對每個使用者都是全域唯一的,因此從某種意義上說,電子郵件地址似乎可以使鹽成為唯一的,但不是全域的。電子郵件 + 密碼肯定會降低發生衝突的機率,但某些使用者可能在許多應用程序中使用相同的密碼。我正在考慮sha256(app name + email)。它會成為一種好鹽嗎?

我的主要問題是關於一般使用確定性鹽的含義。它是否使生成的雜湊更容易破解?如果可以的話,產生這種鹽的合適方法是什麼?

我想知道的另一件事是破解雜湊而不是密碼本身有多容易?假設我使用 Argon2 對密碼進行雜湊處理,並使用與雜湊相同的密碼(argon2(pwd = “foobar”, salt = sha256(“foobar”))。除了使用彩虹桌?

這似乎是一件有爭議的事情,但我沒有找到任何令人信服的論據反對它

如果您可以將鹽從伺服器傳輸到客戶端,例如在應用程序或桌面應用程序中,並且具有一些很好的負載分佈屬性,這可能是一個很好的解決方案。

無論如何,伺服器都會對任何收到的密碼進行雜湊處理,因此數據庫中沒有明文記錄

這實際上很重要,因此洩露的數據庫不會立即允許登錄。

它會成為一種好鹽嗎?

它會起作用的。然而,“問題”是它允許有針對性的預計算攻擊。因此,假設您的對手已經知道一組目標使用者。對於他們來說,他們現在可以預先計算大量密碼散列,因此一旦密碼數據庫受到破壞,如果預先計算的散列包含匹配項,則目標的密碼恢復延遲非常低。如果您不擔心此類攻擊,唯一性是鹽所需的唯一屬性,並且可以以任意方式實現。

實際上,如果您可以控制客戶端並進行雙向通信,則首選使用像OPAQUE這樣的協議,因為它還隱藏了鹽。

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