【问题标题】:In what scenarios would I use non-default Java crypto providers?在什么情况下我会使用非默认 Java 加密提供程序?
【发布时间】:2014-05-09 01:03:36
【问题描述】:

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

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

【问题讨论】:

    标签: java encryption cryptography aes bouncycastle


    【解决方案1】:

    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. 速度快,通常比充气城堡更快;
    4. 相关:AES-NI 支持,AES-NI 受 AES 内在函数支持,例如用于 AES/CBC,显着加速 AES;
    5. 兼容性,JCE 提供的算法得到很好的支持(请注意,Java SE 实现需要支持一个单独的算法列表,例如 IBM JDK 可能不支持 Oracle 提供的所有算法)。

    请注意 - 通常 - 在软件本身中明确指定提供程序是不明智的(使用 getInstance() 工厂方法,最好将其留给系统。

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

    【讨论】:

    • 其实这个列表只是部分的,不过应该能涵盖大部分原因。
    【解决方案2】:

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

    【讨论】:

    • +1 此外,如果您打算对密钥使用硬件保护,您可能需要使用制造商提供的提供商。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    相关资源
    最近更新 更多