在什么情况下我会使用非默认的Java加密提供程序?

时间:2014-05-09 01:03:36

标签: java encryption cryptography aes bouncycastle

我的应用程序是一个Web(Hibernate,Spring)没有移动客户端。我需要使用256密钥大小的AES算法来保护后端表中的财务敏感数据。我是密码学的新手。

除了Java Cryptography Architecture之外,还有其他提供商,如Bouncy Castle。仅考虑AES。在Java Cryptography API中,我看到了支持。为了解决要求的性质,我应该考虑其他提供商,如Bouncy Castle或Jasypt?标准Java Cryptography有什么限制?

2 个答案:

答案 0 :(得分: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. 如果实现的算法不提供您需要的名称或别名;
  9. 然而,使用Oracle提供程序的原因有很多:

    1. 合理编程,实施和测试,软件管理良好,更容易信任实施;
    2. 被大多数人使用,这意味着寻找解决方案相对容易;
    3. 快速,通常比 - 例如 - Bouncy Castle更快......
    4. 相关:AES-NI支持,AES内在函数支持AES-NI,例如:用于AES / CBC,显着加速AES;
    5. 兼容性,JCE提供的算法得到了很好的支持(请注意,Java SE实现需要支持单独的算法列表,因此例如IBM JDK可能不支持Oracle提供的所有算法)。
    6. 请注意 - 通常情况下 - 在软件本身中明确指定提供程序是不明智的(使用getInstance()工厂方法,最好将其留给系统。

      如果您只想在没有FIPS要求的软件中使用AES / CBC进行加密,那么我建议您坚持使用默认/ SunJCE提供程序。对于字节码中的AES,Bouncy Castle提供程序要慢得多。如果支持AES-NI,如果SunJCE的速度比Bouncy快四倍,我不会感到惊讶。

答案 1 :(得分:2)

如果您想要的算法或密钥大小未在Standard Names中列出,则需要一个支持它的外部提供商。