【问题标题】:Is this PBKDF2 java implementation, a good implementation? Is up to date?这是 PBKDF2 java 实现,一个好的实现吗?已是最新?
【发布时间】:2014-09-23 05:51:22
【问题描述】:

这是 PBKDF2 的良好实现吗? https://crackstation.net/hashing-security.htm#javasourcecode

我不确定存储密码是否是个好主意,例如: pass = PBKDF2_ITERATIONS + ":" + toHex(salt) + ":" + toHex(hash);

还有其他实现吗?

【问题讨论】:

  • 你觉得pass = PBKDF2_ITERATIONS + ":" + toHex(salt) + ":" + toHex(hash);有什么问题?
  • PBKDF2_ITERATIONS 是明文,冒号可能会向攻击者提供信息。
  • PBKDF2 旨在抵御拥有您的整个数据库和您的整个代码的攻击者。在这种情况下,不知道密码的格式对于攻击者来说只是一个小小的减速带(他们可以在代码中找到它)。

标签: java passwords pbkdf2


【解决方案1】:

基于保密的密码学永远不会在任何可测量的持续时间内起作用。

在实现像 PBKDF#2 这样的 KDF 时,允许“公众”知道某些参数,因为它们对于正确使用至关重要。在您返回的密码中保持神秘不会在任何可测量的持续时间内阻止攻击者,因为您必须假设他们可以轻松地对您的软件进行逆向工程(如果他们要去的话,让我们面对现实吧与 PBKDF#2 相比,他们可能可以)。

不包括任何地方的迭代计数就像不包括盐或散列一样,同时,迭代计数的值与盐和散列一样安全地传输。并且研究攻击者可以对您的代码进行逆向工程的原则,冒号或无冒号并不是他们的障碍,他们最终会发现

关于 Java 的 PBKDF#2 是否“好”,我无法给出任何可靠的事实。但考虑到它是 java 加密库中最重要的加密功能之一,我认为它是 java 中可能的最佳实现之一(不考虑使用硬件加速本机代码的 3rd 方库,那就是作弊)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2012-07-22
    相关资源
    最近更新 更多