Password-Hashing

在 Web 應用程序中使用 Argon2 的最佳密碼散列策略

  • September 21, 2017

Argon2 在 Web 應用程序中散列密碼的合理參數是什麼?一方面,我們需要良好的性能、快速的響應和 DDoS 抵抗力,但另一方面,我們需要保護現代 GPU、ASIC、FPGA 等免受暴力破解。我在 Django 中看到了一個例子——他們使用 p=2 的 Argon2i, t=2 和 512kb 的 RAM,現在夠用了嗎?

**更新:**基本上我需要保持盡可能短的響應時間,比如 5ms 讓使用者散列他的密碼。考慮到 RAM 的理論吞吐量,我可以負擔每個密碼 2​​ 到 8Mb,因此我可以花更多時間在 CPU 上進行計算,或者用更少的計算消耗更多的 RAM。這種情況下的最佳策略是什麼(做更多的 CPU 計算或每個密碼消耗更多的 RAM)以獲得盡可能最大的暴力抵抗?正如標題中提到的,密碼散列算法是 Argon2。

更新 2:那些對某些答案投反對票的人請務必在評論中描述您的觀點。

經過一些研究,我想出了以下解決方案——不是專注於密碼散列算法本身,而是對整體密碼散列方案應用緩解措施。我推薦以下步驟:

  • 定義您的伺服器響應 KPI(例如,您可以為每個使用者提供 20 毫秒的密碼雜湊)
  • 盡可能優化實現(執行時 CPU 調度和不同 CPU 指令的優化,就像在這個實現中一樣)
  • 使用基準找出適當的參數
  • 在整個密碼散列方案級別上應用緩解措施(使用本地參數 - 儲存在應用程序配置中的算法機密,而不是使用散列密碼、加密錨或最先進的PO-PRF 方法儲存在數據庫中的算法機密)

僅與外圍相關,但考慮在客戶端和伺服器上進行一些昂貴的散列,並且可以說是在伺服器上而不是在伺服器上。這增加了攻擊者暴力破解密碼的成本,但可以更好地擴展,並且取決於您的客戶端,這可能是可行的——例如,瀏覽器通過 webcrypto API 公開內置的 PBKDF2。

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