OpenPGP 和 Java JCA

OpenPGP in Java JCA

我了解 OpenPGP 是 'definition of a set of standard formats for encrypting/signing'

我最近推荐某人使用默认的 Java JCA 而不是 bouncycastle 作为他们的加密库,这样他们就不必使用任何外部库。 但后来他们问我 Java JCA 是否支持 OpenPGP。我不知道那个问题的答案。我什至不知道这个问题是什么意思。

我只想知道supporting OpenPGP是什么意思?

我们可以 encrypt/sign 在 Java JCA 中使用像 RSA 这样的标准算法。那么支持 OpenPGP 还需要什么?

没有人推荐 JCA 作为 this question 的答案。

问:我只想知道支持OpenPGP是什么意思?
答案:意味着提供程序库应遵循 RFC 4880 中提到的开放 PGP 标准。

没有人推荐 JCA 作为答案...
它很复杂——

Bouncy castle is one of the OpenPGP provider for Java platform.
You can check other implementors on all platforms here.

As long as I studied, JCA being architecture for cryptography has its own design principles. JCA is basic crypto framework which can be used with JCE.

不,Java JCA 是一种密码学API。它不支持任何更高级别的 协议 ,它只是提供对加密 算法 的相对较高级别的访问。当然,Java 中实现了一个值得注意的协议:(单独的)JSSE 提供程序中的 TLS。这需要支持使用/验证 X.509v3 证书等,但仅此而已(出于显而易见的原因,JCA 非常倾向于支持 TLS 作为主要目的)。

另一方面,OpenPGP 是 Java 不支持的协议规范。您需要在 JCA 之上构建协议实现以支持 OpenPGP。然而,Bouncy Castle 正是这样做的;它们的实现依赖于 JCA 接口而不是 Bouncy Castle "lightweight" API。所以你可以使用 Bouncy Castle 的 OpenPGP 库 and 使用 JCA,例如用于支持 AES-NI 或硬件密钥。只需确保您要使用的 JCA 提供程序 比任何第三方提供程序具有更高的优先级 ,例如 Bouncy Castle 提供程序(将其添加到提供程序列表的末尾!)。

当然,为了支持一些更深奥的选项(特别是支持特定的 EC 曲线),您可能仍希望将 Bouncy Castle 提供程序添加到您的运行时。 OpenPGP 的 Maven 模块仍然将 Bouncy Castle 提供程序列为编译要求,但我不确定这是否不仅仅是为了测试,还是直接需要该库。

一个可能麻烦的问题是 PGP 使用自己的 CFB 加密算法版本,据我所知,它不能直接从运行时的默认提供程序中获得。 因此您可能需要包含该功能的库。这也可能意味着 AES 加速不适用于该库。