Passwords

如果數據是客戶端的,我需要 Scrypt 的鹽嗎?

  • March 1, 2021

我有一個網路應用程序,我在其中加密使用者數據客戶端。每個客戶端都有自己的密碼,用於派生加密密鑰(通過 Scrypt)來加密其數據。由於數據是客戶端的,並且黑客可以完全訪問(加密的)數據,是否有必要為 Scrypt 使用鹽?我們為 KDF 使用 salt 的原因是為了減少影響 Web 伺服器的彩虹表。由於這裡沒有網路伺服器,攻擊者可以隨心所欲地進行攻擊,那麼鹽不會提供額外的好處,對嗎?

你能保證使用者會使用像dicewire這樣的高強度密碼嗎?如果他們使用簡單的密碼怎麼辦?當他們被黑客入侵並暴露他們的數據時,他們會起訴你嗎?很多問題?

考慮到您的所有使用者都由於您的應用程序中的錯誤而被黑客入侵,那麼攻擊者也可以執行批量攻擊。使用鹽可以防止這種批量攻擊。

在適用的情況下,使用鹽是彩虹表的對策。因此,您將它們限制為單一搜尋。在這種情況下,剩下兩個向量

  1. 使用者的密碼有多好?
  2. 密碼雜湊算法可以使攻擊者減慢多少?

第一個問題的答案有人性的一面。您可以在一定程度上測試密碼的質量,如果較低則拒絕。教你的使用者使用 dicewire。不難學,見XKCD 936

第二個問題有更好的答案,因為Argon2id是最佳選擇。您可以參數化;

  • 迭代次數 $ t $ ,影響時間成本。
  • 使用的記憶體大小 $ m $ ,影響記憶體成本。
  • 執行緒數 $ h $ ,影響並行度。

此參數必鬚根據您的目標系統進行調整。

因此,您可以限制攻擊者主要使用大規模 GPU/ASIC 並行搜尋,並且隨著時間的推移,您可以削弱他們的努力。

建議使用 salt,通過使用/dev/urandom或類似方法生成一個並不難。

請記住,熵和輸出不能超過輸入的熵。確保使用者擁有高強度密碼。

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