bcrypt 日志循环与哈希迭代

bcrypt log rounds vs. hash iterations

我刚刚启动了 Grails 2.4.4/Spring Security 2.0-RC4(插件)应用程序。我使用的是与 Grails 2.3.11/Spring Security 1.2.7.3:

中相同的安全配置
grails.plugin.springsecurity.password.algorithm = 'bcrypt'
grails.plugin.springsecurity.password.bcrypt.logrounds = 31

它在启动时挂起 - 我是这么想的。真的,当 log rounds 在 20 多岁时,它开始需要非常长的时间才能开始。之前的app,设置为31没有延迟。对比文档后,我注意到2.0插件有一个新的配置选项:

Property                    Default Description
password.hash.iterations    10000   the number of iterations which will be executed on the hashed password/salt.

然后我深入研究了代码,似乎 2.0 不再依赖于 jbcrypt,而是 Spring 实现 (org.springframework.security.crypto.bcrypt)。

我认为这与速度差异有关,但我对 bcrypt 或实施差异的理解不够好,无法比较它们。有人可以阐明这一点吗?什么会使它们相等?那是我想要的,还是我的旧应用程序不安全?

password.hash.iterations 选项不适用于 bcrypt,但可与其他哈希算法一起使用,例如 SHA-256。

请注意,bcrypt logrounds 与迭代不同。迭代次数 = 2log_rounds。例子:12 logrounds = 4096 (212) iterations.

如果计算速度很快,很可能没有应用 31 个 bcrypt logrounds。

更新:旧的 jbcrypt 版本有一个 overflow bug where a setting of 31 causes zero (0) iterations instead of 231! The .NET port has suffered 来自同样的问题。