2016-03-10 177 views
3

我有一个JKS密钥库,它在我的应用程序中保留了几个私钥/公钥对。这已经使用密钥库的密码进行了保护。我正在添加用于与Bouncy Castle一起完成OpenPGP的密钥,并且我需要生成几个与Bouncy Castle PGP配合使用的密钥。我知道我可以将这些密钥存储为单独的文件,但这些文件需要单独使用密码进行保护,从而为用户造成头痛。我想简单地将PGP密钥存储在现有密钥库中。我已经阅读了几个关于Stackoverflow的回应,暗示它可能,但没有明确的答案。那么我可以将PGP密钥存储在现有的密钥库中吗?如何在Java密钥库中存储Bouncy Castle PGP密钥?

这是我在想什么。 Bouncy Castle的PGP课程没有实施密钥或证书。它的确有JcaPGPKeyPair可以包装一个PrivateKey/PublicKey实例。因此,我可以在JCE中创建密钥,然后使用JcaPGPKeyPair将JCE密钥“导入”BC PGP基础架构。一旦完成,我将扔掉所有BC PGP实例,并在我再次需要时重新创建它们。可能使用JcaPGPKeyConverter来完成JCE密钥和PGP密钥之间的转换?

我可以使用2个JCE RSA或DSA密钥对签名和加密密钥PGP想要使用?将这些密钥存储在Keystore中,并在需要使用这些密钥时按需重新构建PGP基础结构?

回答

3

我想简单地将PGP密钥存储在现有密钥库中。我已经阅读了几个关于Stackoverflow的回应,暗示它可能,但没有明确的答案。那么我可以将PGP密钥存储在现有的密钥库中吗?

Java密钥存储区不支持OpenPGP密钥。 OpenPGP是与X.509不兼容的另一个标准。

Bouncy Castle的PGP类没有实现密钥或证书。它的确有JcaPGPKeyPair可以包装一个PrivateKey/PublicKey实例。因此,我可以在JCE中创建密钥,然后使用JcaPGPKeyPair将JCE密钥“导入”BC PGP基础架构。一旦完成,我将扔掉所有BC PGP实例,并在我再次需要时重新创建它们。可能使用JcaPGPKeyConverter来完成JCE密钥和PGP密钥之间的转换?

我可以使用2个JCE RSA或DSA密钥对签名和加密密钥PGP想要使用?将这些密钥存储在Keystore中,并在需要使用这些密钥时按需重新构建PGP基础结构?

您可能可以提取构成公钥和私钥的普通数字,但正在丢失用户ID,时间戳......的所有信息,您必须每次都重构该信息。我不会去做这样一个脆弱和容易出错的路径。没有OpenPGP和X.509关键属性的真实映射,并且对于证书(关键字上的签名)它变得更糟。

+0

那么存储PGP密钥的最佳方式是什么,像一个密钥库?我知道有很多其他格式PKCS11,PKCS12可以存储多个密钥。在API中,PGPSecretKeyRingCollection有一个编码(OutputStream)方法,但是细节却缺少它的实际功能。或者如何保护你写出来的密钥。 – chubbsondubs

+0

OpenPGP知道“钥匙扣”的概念,这些钥匙基本上是一个接一个列出的多个钥匙。如果您安装了GnuPG并使用它,可以通过查看'〜/ .gnupg/pubring.gpg'文件轻松观察到这一点,例如使用'gpg --list-packets'或'pgpdump'来列出实际的密钥数据包(以及连接到它们的所有东西)。私钥默认使用密码进行对称加密,密码也在OpenPGP中标准化。 –

+0

嗯,我想在Bouncy Castle API中这样做,因为这是我的产品的一部分,所以使用GnuPG不是一种选择。所以我想我会继续寻找。 – chubbsondubs

相关问题