1

我在维护阶段继承了一个 Java (Spring) 项目,该项目刚刚第一次通过 Veracode,High我们剩下的唯一缺陷是报告“弱或损坏”的加密算法。我更愿意花时间学习更多关于密码学的知识,但是这个项目是在野外进行的,所以我需要从一个更直接的解决方案开始,以确保这个应用程序的安全。

这是 Veracode 专门报告的行:

Cipher cipher = Cipher.getInstance("PBEWITHSHA1ANDDESEDE");

Veracode 不提供以下信息:

  • 为什么这个算法被破坏/弱
  • 哪些算法可能会产生足够的替代品
  • 选择适当算法时需要注意的任何其他问题

我可以用什么代替"PBEWITHSHA1ANDDESEDE"?这是否需要其他重构,还是像字符串文字交换一样简单?我很乐意提供更多规范来帮助我们缩小最佳加密算法的范围,但由于 Veracode 没有提供任何规范,唯一的规范是“满足 Veracode 的加密算法”。

4

1 回答 1

2

为什么这个算法被破坏/弱

它主要是因为它使用 PBKDF1 而不是 PBKDF2(或另一个/更好的基于密码的密钥派生函数)而被破坏。使用三重 DES 也是一个小弱点,因为它在某些设置中可能只提供大约 80 位的安全性。SHA-1 已损坏,这很可能是 Veracrypt 提到“弱或损坏”加密算法的原因,但实际上在密钥派生函数中使用 SHA-1 被认为是安全的。

哪些算法可能会产生足够的替代品

如果您想依赖内置功能,那么PBEWithHmacSHA256AndAES_128将是直接替代品。其他方案可能包括其他派生函数,例如 bcrypt、scrypt 或 Argon2,以及其他加密模式,例如 AES-GCM。

选择适当算法时需要注意的任何其他问题。

除非添加 MAC(消息认证),否则上述方案中使用的 CBC 对于传输模式的安全性是不安全的;它仅对不适用填充预言机攻击的就地加密是安全的。不过,您当前的方案也是如此。

您的方案仍然依赖于密码安全性,这本身可能非常薄弱。通常,您希望使用高迭代次数/工作因子和/或非常确保密码/密码短语具有足够的强度。

没有 PBE 方案(包括您已经在使用的方案)是Java 兼容 JRE 的实现要求。尽管替代的 JRE 可能会提供一个实现,但我不会指望它在其他供应商的 Java 版本中存在或正确实现。

于 2017-05-26T23:43:22.707 回答