【问题标题】:How long should password authentication take? [closed]密码验证需要多长时间? [关闭]
【发布时间】:2018-03-22 12:44:57
【问题描述】:

我了解在数据库中存储密码时,最好使用 bcrypt、scrypt 或 argon2 等慢速哈希函数。我读过的大多数关于选择参数(例如时间和内存成本)的文档都建议将值设置得尽可能高,以在攻击者访问您的数据库时阻止密码破解尝试。我的问题是在 Web 应用程序中对用户进行身份验证时可以接受什么样的资源消耗?我知道这个问题的答案会因执行身份验证的服务器的规格、身份验证发生的频率等因素而异,但我想就什么是明智的和什么不应该得到一些一般性建议吨。密码验证花费一秒钟是否太长?如果我的服务器有 8GB 内存,那么使用 1GB 的哈希内存成本是否太高?我希望有问题的应用程序只会偶尔执行密码身份验证,因为它对大多数请求使用基于令牌的身份验证。

【问题讨论】:

    标签: web-services authentication restful-authentication password-hash


    【解决方案1】:

    一秒钟的密码验证时间太长了吗?

    如果您的用户能够容忍,则不会,但我认为几百毫秒就足够了。有关更具体的问题,请参阅 this excellent answer

    如果我的服务器有 8GB 内存,使用 1GB 的哈希内存成本是否太高?

    我不希望您的密码散列策略需要这么多内存。散列通常是一个 CPU/计算密集型任务。

    【讨论】:

    • 感谢您的评论。 Argon2 是一个内存硬函数,除了时间成本和并行性之外,还允许您指定内存成本参数,这就是为什么我想知道我可以合理地将多少内存用于散列。
    • 啊,如果您要选择任意数量的内存来使用,那么“多少是太多”将取决于其他因素,例如您可以节省多少内存〜峰值〜负载。 1GB 似乎过多。看起来 Argon2 的 CLI 默认是 4096KiB。
    猜你喜欢
    • 2013-04-11
    • 2022-01-21
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 2022-01-19
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多