bcrypt - 最佳 bcrypt 工作因子

标签 bcrypt

密码散列的理想 bcrypt 工作因素是什么。

如果我使用因子 10,则在我的笔记本电脑上对密码进行哈希处理大约需要 0.1 秒。如果我们最终得到一个非常繁忙的网站,那么仅仅检查人们的密码就会变成大量的工作。

也许最好使用 7 的工作因子,将每次笔记本电脑登录的总密码哈希工作减少到约 0.01 秒?

您如何决定强力安全性和运营成本之间的权衡?

最佳答案

请记住,该值存储在密码中:$2a$(2 chars work)$(22 chars salt)(31 chars hash)。它不是一个固定值。

如果您发现负载太高,只需将其设置为在他们下次登录时,您就可以加密到更快的计算速度。同样,随着时间的推移,您获得了更好的服务器,如果负载不是问题,您可以在他们登录时升级其哈希强度。

诀窍在于,按照摩尔定律,让它在未来永远花费大致相同的时间。 数字是 log2,因此每次计算机速度加倍时,默认数字加 1。

决定暴力破解用户密码所需的时间。例如,对于一些常见的字典单词,您的帐户创建可能已经警告他们密码很弱。例如,如果它是 1000 个常见单词之一,并且攻击者需要 0.1 秒来测试每个单词,那么攻击者就需要 100 秒(好吧,有些单词更常见......)。如果用户选择“常用词典单词”+ 2 个数字,则需要两个多小时。如果您的密码数据库遭到破坏,并且攻击者每天只能获得几百个密码,那么您就为大多数用户赢得了数小时或数天的时间来安全地更改其密码。这是为他们争取时间的问题。

http://www.postgresql.org/docs/8.3/static/pgcrypto.html有一些破解密码的时间供您考虑。当然,他们列出的密码是随机字母。字典单词...实际上,你无法拯救密码为 12345 的人。

关于bcrypt - 最佳 bcrypt 工作因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443476/

相关文章:

Java spring boot 在将管理员密码存储到数据库之前对其进行加密?

windows - 在 Windows 上安装 bcrypt-ruby gem

node.js - 运行 Node 应用程序时bcrypt无效的elf header

mysql - bcrypt 密码比较函数总是返回 false

php - 有什么理由不对电子邮件地址使用 bcrypt?

java - Spring Security 和 BCryptPasswordEncoder 用于注册和登录

node.js - bcrypt 与 Node 一起使用的替代方案是什么?

node.js - Passport bcrypt 密码与 db 的密码不同

node.js - brcypt 模块未对密码进行哈希处理

使用 BCrypt 的 PHP 登录身份验证