0

我知道在數據庫中存儲密碼時,最好使用慢散列函數,如bcrypt,scrypt或argon2。我讀過的有關選擇參數(如時間和內存成本)的大多數文檔都建議儘可能設置最高值,以便在攻擊者訪問數據庫時阻止密碼破解嘗試。我的問題是,在Web應用程序中對用戶進行身份驗證時,可以接受哪種資源消耗?我知道這個問題的答案會因爲諸如執行身份驗證的服務器的規格,身份驗證的發生頻率等因素而有所不同,但我希望得到一些一般性建議,指出哪些是合理的,噸。密碼認證需要一秒多的時間?如果我的服務器有8GB的內存,使用1GB的散列內存成本太高?我期望有問題的應用程序只會偶爾執行密碼驗證,因爲它對大多數請求使用基於令牌的驗證。密碼認證需要多長時間?

回答

1

密碼認證需要一秒多的時間?

如果您的用戶能夠容忍它,那麼不是這樣,但我認爲幾百毫秒就足夠了。有關更具體的問題,請參見this excellent answer

如果我的服務器有8GB的內存,使用1GB的散列內存開銷太高?

我不希望你的密碼哈希策略需要接近那麼多的內存。散列通常是CPU /計算限制任務。

+0

感謝您的評論。 Argon2是一種內存硬件功能,除了時間成本和並行性之外,還允許您指定內存開銷參數,這就是爲什麼我想知道我可以合理地致力於多少內存散列。 – user3607758

+0

啊,如果你正在挑選一個任意數量的內存來使用,那麼「多少太多」將取決於其他因素,例如你在最高負載下可以節省多少內存。 1GB似乎過度。它看起來像Argon2的CLI默認值是4096KiB。 –