我应该在哪些情况下使用非默认的Java加密提供程序?

3

我的应用是一个web(使用Hibernate、Spring),没有移动客户端。我需要采用256位的AES算法来保护后端表中的财务敏感数据。我对密码学不太熟悉。

除了Java密码体系结构之外,还有其他提供者,如Bouncy Castle。只考虑AES。在Java Cryptography API中,我看到了它的支持。为了满足什么需求,我应该考虑其他提供者,如Bouncy Castle或Jasypt?标准Java密码学的限制是什么?

2个回答

3
EJP在外部提供者使用的明确点上进行了说明,但我会在此处大量扩展答案:
1. 如果您要查找的功能不由JCE提供;这可能是因为算法 - 可以是密码,模式和补码的组合 - 没有实现(EJP); 2. 相关:如果支持的算法不支持您的用例(例如非命名EC曲线); 3. 如果算法实现对您来说没有正确的属性(例如速度); 4. 如果您想使用硬件HSM、智能卡、TPM模块等密钥,这些通常通过Sun PKCS#11提供程序访问; 5. 如果您需要特定的支持,例如IAIK提供商具有兼容性列表,并为其实现提供支持; 6. 如果您想使用NSS库或另一个(部分)软件PKCS#11实现(再次使用Sun PKCS#11提供程序); 7. 如果您需要FIPS认证(例如Bouncy Castle正在进行FIPS认证); 8. 如果已实现的算法未提供您要求的名称或别名;
然而,使用Oracle提供者有很多理由:
1. 软件编程、实现和测试相当良好,软件管理得当,使人们更容易相信该实现; 2. 大多数人都在使用,意味着寻找解决方案相对容易; 3. 快速,通常比例如Bouncy Castle的速度更快; 4. 相关:支持AES-NI,AES-NI由AES本地指令支持,例如用于AES/CBC,可以显着加快AES的速度; 5. 兼容性,JCE提供的算法得到了很好的支持(请注意,有一个单独的算法列表,需要由Java SE实现支持,因此例如IBM JDK可能不支持Oracle提供的所有算法)。
请注意,通常明确在软件本身中指定提供程序(使用getInstance()工厂方法),这是不明智的,最好将其留给系统。
如果您只想在没有FIPS要求的情况下简单地使用AES/CBC进行软件加密,那么我建议坚持默认/ SunJCE提供程序。Bouncy Castle提供商的AES字节码速度要慢得多。如果支持AES-NI,我不会感到意外,SunJCE比Bouncy快四倍。

实际上,那个列表只是部分的,但这应该涵盖了大多数原因。 - Maarten Bodewes

2
如果您需要的算法或密钥长度未在标准名称中列出,则需要使用支持它的外部提供程序。请注意,保留 HTML 标签。

2
此外,如果您打算使用硬件保护密钥,您可能需要使用制造商提供的提供程序。另外加1。 - Duncan Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接