【问题标题】:How can I store a Bouncy Castle PGP key in a Java Keystore?如何将 Bouncy Castle PGP 密钥存储在 Java 密钥库中?
【发布时间】:2016-06-25 23:57:19
【问题描述】:

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

这就是我的想法。 Bouncy Castle 的 PGP 类不实现密钥或证书。它确实有 JcaPGPKeyPair 可以包装 PrivateKey/PublicKey 实例。所以我可以在 JCE 中创建密钥,然后使用 JcaPGPKeyPair 将 JCE 密钥“导入”到 BC PGP 基础设施中。完成后,我会丢弃所有 BC PGP 实例,并在我再次需要它们时重新创建。可能使用 JcaPGPKeyConverter 在 JCE 密钥和 PGP 密钥之间进行繁重的转换?

我可以为 PGP 想要使用的签名和加密密钥使用 2 个 JCE RSA 或 DSA 密钥对吗?将这些保留在密钥库中,并在我想使用这些密钥时按需重建 PGP 基础架构?

【问题讨论】:

    标签: java bouncycastle pgp openpgp


    【解决方案1】:

    我只想将 PGP 密钥存储在现有的密钥库中。我已经阅读了有关 Stackoverflow 的几个回复,暗示这是可能的,但没有关于如何做的明确答案。那么我可以将 PGP 密钥存储在现有的 Keystore 中吗?

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

    Bouncy Castle 的 PGP 类不实现密钥或证书。它确实有 JcaPGPKeyPair 可以包装 PrivateKey/PublicKey 实例。所以我可以在 JCE 中创建密钥,然后使用 JcaPGPKeyPair 将 JCE 密钥“导入”到 BC PGP 基础设施中。完成后,我会丢弃所有 BC PGP 实例,并在我再次需要它们时重新创建。可能使用 JcaPGPKeyConverter 在 JCE 密钥和 PGP 密钥之间进行繁重的转换?

    我可以为 PGP 想要使用的签名和加密密钥使用 2 个 JCE RSA 或 DSA 密钥对吗?将这些保留在密钥库中,并在我想使用这些密钥时按需重建 PGP 基础架构?

    您可能可以提取构成公钥和私钥的纯数字,但会丢失有关用户 ID、时间戳等的所有信息,而您每次都必须重新构建这些信息。我不会走这样一条脆弱且容易出错的道路。 OpenPGP 和 X.509 密钥属性没有真正的映射,证书(密钥上的签名)变得更糟。

    【讨论】:

    • 那么在 Keystore 之类的东西中存储 PGP 密钥的首选方法是什么?我知道还有很多其他格式 PKCS11、PKCS12 可以存储多个密钥。在 API PGPSSecretKeyRingCollection 中有一个 encode(OutputStream) 方法,但缺少关于它实际作用的详细信息。或者如何保护您写出的密钥。
    • OpenPGP 知道“密钥环”的概念,它基本上是一个接一个地列出的多个密钥。如果您安装并使用了 GnuPG,您可以通过查看~/.gnupg/pubring.gpg 文件轻松观察到这一点,例如使用gpg --list-packetspgpdump 列出实际的密钥包(以及附加到它们的所有内容)。默认情况下,私钥使用密码进行对称加密,这在 OpenPGP 中也是标准化的。
    • 好吧,我想在 Bouncy Castle API 中执行此操作,因为这是我的产品的一部分,因此不能选择使用 GnuPG。所以我想我会继续寻找。
    • GnuPG 仅用作参考和调试工具。我从未真正使用过 Bouncy Castle,但从阅读 API 来看,它们似乎支持密钥存储的相同语义。我想我什至记得有人在 Bouncy Castle 中直接使用过 GnuPG 的公钥文件(不过,你不能用私钥做到这一点,因为 GnuPG 以一种特殊的非标准格式存储私钥)。
    • 好的。是的,Bouncy Castle API 看起来与 GnuPG 非常相似,并且具有密钥环等,但是仅通过查看 API 无法回答有关如何保护事物的一些技术问题。谢谢你的帮助。你确实回答了我原来的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多