我了解在数据库中存储密码时使用慢速散列函数(如bcrypt,scrypt或argon2)的最佳做法。我读过的关于选择参数的大多数文档,例如时间和内存成本,建议设置尽可能高的值,以便在攻击者获得对数据库的访问权限时阻止密码破解尝试。我的问题是在对Web应用程序中的用户进行身份验证时可以接受哪种资源消耗?我理解这个问题的答案会因服务器执行身份验证的规格,身份验证发生的频率等因素而有所不同,但我想得到一些关于什么是明智的以及什么是明智的建议。不会告发'吨。密码认证需要一秒钟吗?如果我的服务器有8GB的内存,使用1GB的哈希内存成本是否过高?我希望有问题的应用程序偶尔会执行密码验证,因为它会对大多数请求使用基于令牌的身份验证。
答案 0 :(得分:1)
密码认证需要一秒钟吗?
如果您的用户会容忍它,那就不行了,但我认为几百毫秒就足够了。请参阅this excellent answer更具体的问题。
如果我的服务器有8GB的内存,使用1GB的哈希内存成本太高了吗?
我不希望您的密码哈希策略需要几乎那么多内存。散列通常是一个CPU /计算绑定任务。