我正在处理我的站点身份验证,并且正在考虑使用 bcrypt 并随机创建一个存储在数据库上我的用户登录行中的盐。我希望我的网站速度很快,但是使用 15 生成(大约需要 1 秒)的任何东西都太慢了,所以我想在 5-14 之间随机生成盐,但这是安全的还是有更好的方法?
如果有帮助,我正在使用py-bcrypt。
我正在处理我的站点身份验证,并且正在考虑使用 bcrypt 并随机创建一个存储在数据库上我的用户登录行中的盐。我希望我的网站速度很快,但是使用 15 生成(大约需要 1 秒)的任何东西都太慢了,所以我想在 5-14 之间随机生成盐,但这是安全的还是有更好的方法?
如果有帮助,我正在使用py-bcrypt。
使用 bcrypt 的一个主要原因是通过需要大量 CPU 时间来计算哈希来防止暴力攻击。对于您的问题,我将使用恒定长度的盐,但使用随机值,这样每个密码都需要相同的时间来计算。
从这里你可以满足你的盐的长度和拉伸迭代的数量,只要你觉得足够安全,尽管我个人喜欢确保哈希值至少需要 1/2 秒才能在一个非常强大的服务器上生成。
好的,所以看起来盐的长度和工作因子是相关的。bcrypt 已经相当安全了,但问题是无论您使用哪种散列,密码强度本身至少同样重要。所以你应该尽量在你的服务器上处理最好的,最低成本(强度)为 12。
请注意,需要加密安全但快速且经常重新播种的 RNG,否则您可能会用完随机数。
更重要的是:确保密码有足够的强度。即使使用 bcrypt,查找密码“password”也不需要任何时间。
不,没有更好的方法,除了为密码散列找到更快的实现。攻击者当然会使用最快的实现。