如何在Java中安全地使用3DE?

如何在Java中安全地使用3DE?,java,encryption,cryptography,java-7,Java,Encryption,Cryptography,Java 7,根据NIST的研究,3DES不是一个好的密码。但经过大量阅读,我了解到缺点是在实现中(使用弱、半弱和组合),而不是在规范中 我们使用OracleJSSE/JCA(JDK1.7)。如何验证3DES密码是否较弱?在这里启用FIPS模式有帮助吗 据我所知,ReferenceFIPS仍然允许TDEA与3个独立键(3个键3DE)一起使用。使用带有单个键的3DES当然是DES,DES已经有一段时间不安全了。使用2键3DES(DES-ABA)现在也不再符合FIPS 不幸的是,Java只支持3键3DE(DES-

根据NIST的研究,3DES不是一个好的密码。但经过大量阅读,我了解到缺点是在实现中(使用弱、半弱和组合),而不是在规范中

我们使用OracleJSSE/JCA(JDK1.7)。如何验证3DES密码是否较弱?在这里启用FIPS模式有帮助吗


据我所知,Reference

FIPS仍然允许TDEA与3个独立键(3个键3DE)一起使用。使用带有单个键的3DES当然是DES,DES已经有一段时间不安全了。使用2键3DES(DES-ABA)现在也不再符合FIPS

不幸的是,Java只支持3键3DE(DES-ABC)。这意味着许多开发人员在需要实现DES-ABA时只需复制第一个DES密钥作为第三个密钥。检测此类密钥的唯一方法是将3DES密钥的第一个密钥部分和最后一个密钥部分相互比较

要以最安全的方式使用3DES,只需使用“DESede”
密钥生成器生成192位密钥即可

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");
keyGen.init(168);
SecretKey desABCKey = keyGen.generateKey();
请注意,这将生成一个192位密钥,其中正确设置了24个奇偶校验位(168位有效,为您提供大约112位的安全性)

设置FIPS模式没有帮助,因为这似乎只是实现TLS的“Sun”JSSE提供程序的一个选项。如果您有来自其他供应商的加密提供商,它可能会有所帮助

至于弱和半弱之间的区别:这可能与底层DES分组密码使用的密钥有关。通常,您不应该验证密钥本身是否弱,而应该验证实现。只要密钥具有足够的熵,就可以安全地忽略生成弱密钥的可能性



您应该使用AES,因为它更安全、更快、更具未来性、具有更大的块大小、无弱密钥、完全随机密钥(等等)。

如果您有选择,请使用AES而不是3DE。3DES对于中级攻击者来说已经足够强大了。我投票结束这个问题,因为它是关于密码的安全性,而不是编程。这个问题可能更适合你。你在问题标题和问题正文中提出了不同的问题。请选择一个并坚持下去。提示:标题问题基于观点,将被关闭。对问题进行实质性编辑,使其成为主题。