安全使用 jBCrypt 并将其推荐给我的组织?

信息安全 加密 爪哇 bcrypt
2021-09-04 20:21:01

我想向我的开发人员推荐我们都使用 bcrypt 来散列存储的密码。我们都使用 java,我不愿推荐 jBCrypt 只是因为它的最新版本号 (0.3) 表明它是一个 beta 版本。我看到最新版本的 Spring Security 包含一个实现,该实现主要是来自 jBCrypt 的确切代码。“大部分”我的意思是 Spring Security 已经改变了它以满足他们的编码约定,而我可以检测到的其他东西很少。对我来说,Spring Security 是一个很好的认可标志。我的问题是:你们都愿意推荐 Spring 的实现吗?如果我对其进行测试并将结果与​​实际的 bcrypt 结果进行比较,这是否足够好?我怎么知道我的测试是否彻底?

2个回答

您可以自己审核jBCrypt 代码它很小:一个 750 行的源代码文件,其中一半是常量数组。此外,由于这是 Java,您不必担心 C 的可怕“未定义行为”:如果它在您的机器上运行良好,它将在任何地方运行良好(对于那种不涉及线程的代码,系统访问在浮点计算方面,Java 的“一次编写,到处运行”的口号往往是正确的)。

您还可以查看随附的TestBCrypt.java文件:这看起来像是对已知测试向量(包括一些非 ASCII 密码)的相当彻底的应用。代码对我来说看起来不错。

对于大多数开源项目来说,版本号是没有意义的,因为它们更多地传达了作者内心的满足感,而不是软件的任何实际技术质量。

注意:当然,由于慢散列是防御者和攻击者之间的预算竞赛,通过使用 Java,您可以为攻击者提供 3 倍的优势:将使用优化的 C 或汇编(或一些 FPGA)。然而,即使使用 Java,正确应用 bcrypt 也应该足以确保密码存储不再是您遇到的最糟糕的问题。

BCrypt 绝对值得推荐,无论是 Spring 版本还是最初的 Mindriot jBCrypt 端口。不要让版本号吓到您,因为它只是作者版本控制方案的结果。

有关发行说明,请参阅http://www.mindrot.org/projects/jBCrypt/