Passwords

當秘密為低熵密碼時,公共 SRP 驗證者或公共雜湊鏈“公鑰”

  • September 3, 2016

我想設置以下內容:

  • 不受信任的伺服器應該在不知道使用者密碼或能夠以使用者名創建虛假使用者會話的情況下託管使用者會話並驗證使用者身份。
  • 這是通過公開證明客戶能夠證明他們對秘密知識的必要資訊來使所有會話可公開驗證來實現的。
  • 客戶端持有的秘密是密碼級別的熵。

現在,這裡想到了一些事情。對於初學者來說,SRP 或雜湊鏈身份驗證都可以用於此目的,如果秘密是密鑰級別的熵,實際上會很好地工作。

其次,可以通過使用密鑰推導將密碼推向密鑰級熵。

所以我的問題是:使用密鑰派生算法創建安全密碼以與 SRP 或雜湊鍊等身份驗證方案一起使用是否魯莽,其中不受信任的伺服器和公眾將知道生成的驗證者或“公眾”鑰匙?或者,KDF 是否僅適用於提供一些希望,即當受信任的伺服器被攻擊者侵入時,並非所有密碼都會失效?

我知道 PBKDF2 對於任何擁有 GPU 裝備的人來說基本上是“無用的”,而且我已經讀過 bcrypt 對於任何擁有 FPGA 設置的人來說都是“無用的”。Scrypt,人們討論的最後一個替代方案是“年輕的”,在它結束時,直覺上似乎很難假裝低熵可以真正變成高熵,除非只是讓今天的攻擊者更難.

那麼,這種設置是否有任何解決方案,或者這最終是否是使用者必須擁有一些類似密鑰的密碼的情況?如果是這樣,對於實際上是通過單詞列表翻譯的鍵的分配密碼,這是否是一個很好的案例?例如,如果你強制使用 10 個單詞的 Diceware 密碼方案,你最終會得到作者聲稱的 12.9 * 10 位熵,或者 129 位熵,這對於被迫記住 10 個單詞來說似乎相當不錯。

讓我們還假設使用者有點上手,因為他們受到產品本身的激勵,但他們也不應該忍受太多。他們不是外行使用者被迫進入一個比他們習慣的系統更複雜的系統,但他們也不應該有糟糕的登錄體驗。

我知道 PBKDF2 對於任何擁有 GPU 裝備的人來說基本上是“無用的”,而且我已經讀過 bcrypt 對於任何擁有 FPGA 設置的人來說都是“無用的”。

兩者都沒有用。scrypt 和最終的 PHC 贏家等較新的替代方案可以更好地利用防御者的資源,但與什麼都不做相比,即使 PBKDF2 的一千次迭代也是有用的。

如果你假設 $ 2^{80} $ 雜湊函式呼叫對攻擊者來說是不可行的(合理,雖然不是特別保守),那麼 $ 2^n $ 多輪 PBKDF2 只允許您的密碼 $ 80-n $ 一點點的熵。自從 $ n=20 $ 通常是合理的,您將刪除所需密碼“長度”的四分之一,一切都一樣。

那麼,這種設置是否有任何解決方案,或者這最終是否是使用者必須擁有一些類似密鑰的密碼的情況?如果是這樣,對於實際上是通過單詞列表翻譯的鍵的分配密碼,這是否是一個很好的案例?

儘管如此,典型的使用者選擇的密碼當然沒有那麼多的熵,所以是的,這可能是分配密碼的一個很好的例子。即使使用者不願意記住分配的密碼,寫下來也不會讓典型的竊聽者攻擊它。此外,使用者不能通過在此處重複使用他們在其他地方(在防止離線攻擊的情況下)使用的密碼來使其易受攻擊。

因此,要回答您的實際問題:

使用密鑰派生算法創建安全密碼以與 SRP 或雜湊鍊等身份驗證方案一起使用,其中不受信任的伺服器和公眾將知道生成的驗證者或“公共”密鑰是否魯莽?或者,KDF 是否僅適用於提供一些希望,即當受信任的伺服器被攻擊者侵入時,並非所有密碼都會失效?

不,我認為這不一定是魯莽的,至少對於您分配密碼的想法(這不會導致某些重複使用的密碼洩露)。但是,在伺服器沒有受到威脅的情況下,最好還是防止這種離線攻擊。即盡可能使用受信任的伺服器進行身份驗證。

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