我知道OpenPGP是一个'definition of a set of standard formats for encrypting/signing'。
我最近建议有人使用默认的Java JCA而不是bouncycastle作为他们的加密库,这样他们就不必使用任何外部库。但后来他们问我Java JCA是否支持OpenPGP。我不知道这个问题的答案。我甚至不知道这个问题意味着什么。
我只是想知道supporting OpenPGP
是什么意思?
我们可以使用RSA等标准算法对Java JCA进行加密/签名。那么支持OpenPGP还需要什么呢?
没有人建议JCA作为this question的答案。
问:我只是想知道支持OpenPGP是什么意思? Ans:意味着提供者库应遵循RFC 4880中提到的开放PGP标准。
没有人推荐JCA作为答案...... 它的复杂性如同How do I encrypt a PGP message through java's crypto extension?
Bouncy castle是Java平台的OpenPGP提供者之一。 您可以在所有平台here上查看其他实现者。
只要我研究过,JCA作为密码学的架构就有自己的设计原则。 JCA是可以与JCE一起使用的基本加密框架。
不,Java JCA是一种加密API。它不支持任何更高级别的协议,它只是提供对加密算法的相对高级别的访问。当然有一个值得注意的协议在Java中实现:(单独的)JSSE提供程序中的TLS。这需要支持使用/验证X.509v3证书等,但这就是它(JCA非常适合支持TLS作为主要目的,原因很明显)。
另一方面,OpenPGP是Java不支持的协议规范。您需要在JCA之上构建协议实现以支持OpenPGP。然而,这正是Bouncy Castle所做的;它们的实现取决于JCA接口,而不是Bouncy Castle“轻量级”API。因此,您可以使用Bouncy Castle的OpenPGP库并使用JCA,例如支持AES-NI或硬件密钥。只需确保您要使用的JCA提供程序比任何第三方提供程序具有更高的优先级,例如Bouncy Castle提供程序(将其添加到提供程序列表的末尾!)。
当然,为了支持更深奥的选项(特别是对特定EC曲线的支持),您可能仍希望将Bouncy Castle提供程序添加到运行时。 OpenPGP的Maven模块仍然将Bouncy Castle提供程序列为编译要求,但我不确定这不仅仅是用于测试还是直接需要库。
一个可能很麻烦的问题是PGP使用自己版本的CFB加密算法,这在我所知的运行时中不能直接从默认提供者那里获得。因此,您可能需要包含该功能的库。这也可能意味着图书馆无法使用AES加速。