【发布时间】:2017-09-01 05:37:46
【问题描述】:
我正在使用 Bouncy Castle 在 Java 中编写应用程序,但我仍然希望通过 Java 密码体系结构编写尽可能可移植的代码。是否可以通过 JCA 访问 SCrypt 算法?
In the list of algorithms for SecretKeyFactory 不存在,只有:
- AES
- ARCFOUR
- DES
- DESede
- PBEWithAnd
- PBEWithAnd
- PBEWithMD5AndDES (PKCS5, v 1.5),
- PBEWithHmacSHA256AndAES_128(PKCS5,v 2.0)
- PBKDF2WithHmacSHA1
实际上,该文档在任何地方都没有提到 Scrypt。
【问题讨论】:
-
那些当然不会列出它。这些是默认实现附带的标准。如果您使用的是其他提供商,例如 BC,他们将列在 他们的 文档中。但是,考虑到 scrypt 比大多数较旧的哈希算法要复杂一些,您可能无法编写仅 JCA 的代码而仅添加 BC 作为提供程序。因此,您将使代码直接依赖于 BC 包。
-
对于密码派生和密码验证器,您可以使用
PBKDF2,这是 NIST 的建议和标准。PBKDF21的一些实现在 RFC 编号之后命名为Rfc2898DeriveBytes。 -
@zaph:我的理解是 Scrypt 和 PBKDF2 与 CPU 攻击的强度相似,而 Scrypt 由于内存密集,也比 PBKDF2 更能抵御 GPU 攻击;那么,为什么我会选择 PBKDF2 而不是 Scrypt?
-
PBKDF2 是经过批准的标准,可在大多数平台上使用。绝大多数用途的安全差异很小。
-
如果您已创建威胁模型(以书面形式)并确定 PBDKF2 和 Scrypt 之间的差异是最高漏洞,那么 Scrypt 是正确的选择。还有许多其他加密安全问题可能会造成安全漏洞,例如缺少加密然后 MAC、返回填充错误、未在每次加密时使用随机 IV。
标签: java encryption bouncycastle