【问题标题】:Using BouncyCastle with GnuPG 2.1's `pubring.kbx` file将 BouncyCastle 与 GnuPG 2.1 的 `pubring.kbx` 文件一起使用
【发布时间】:2023-03-28 19:47:01
【问题描述】:

我正在尝试使用带有 PGP2 的 BouncyCastle 来读取公钥环。问题是,从 GnuPG 2.1 开始,它存储在pubring.kbx 而不是pubring.gpg。这会导致 IOException public key ring doesn't start with public key tag: tag 0x0

知道是否以及如何将 BC 与 GnuPG 2.1 一起使用?

【问题讨论】:

    标签: java bouncycastle gnupg openpgp


    【解决方案1】:

    GnuPG 2.1 by default uses the new keybox file format -- 如果没有找到pubring.gpg。如果存在“旧版”密钥环文件,则将使用它。

    我不知道 Bouncy Castle 支持 .kbx 文件格式。因此,如果您想在 GnuPG 使用的相同密钥文件上同时使用 Bouncy Castle,您有三个选择:

    • 另外在其他地方维护旧的pubring.gpg 文件,这意味着在需要时运行gpg --export--export-secret-keys。旧的pubring.gpg 只是一个密钥转储,您可以直接将导出输出用作密钥环。
    • 在您的 GnuPG 主目录中使用 pubring.gpg,换句话说,为了兼容性而放弃了 .kbx 文件的更好性能。

      首先,请务必复制整个~/.gnupg 文件夹或确保有最新的备份!

      最后,迁移过程归结为将密钥箱文件中的信息导出为旧的 OpenPGP 密钥环格式。查看上面链接的变更日志中从.kbx 文件迁移到.gpg 文件的建议:

      $ cd ~/.gnupg
      $ gpg --export-ownertrust > otrust.lst
      $ mv pubring.gpg publickeys
      $ gpg2 --import-options import-local-sigs --import publickeys
      $ gpg2 --import-ownertrust otrust.lst
      

      相反的过程应该看起来很相似(假设没有存储密钥,否则请阅读下文,并交换 gpg2gpg 以匹配您机器上安装的二进制文件):

      $ cd ~/.gnupg
      $ gpg2 --export-ownertrust > otrust.lst
      $ gpg2 --export > pubring.gpg
      $ mv pubring.kbx pubring.kbx~
      $ gpg2 --import-options import-local-sigs
      $ gpg2 --import-ownertrust otrust.lst
      

      --export 结果可以直接用作新的密钥环,因此不需要该文件的--import。 Ownertrust 可能应该以类似的方式复制,我只是保留了此处提出的变更日志。

      如果你还存储了私钥,我最好先将它们导出到另一个文件中,最后再次导入:

      $ cd ~/.gnupg
      $ gpg2 --export-secret-keys > secret-keys.gpg
      $ gpg2 --export-ownertrust > otrust.lst
      $ gpg2 --export > pubring.gpg
      $ mv pubring.kbx pubring.kbx~
      $ gpg2 --import-options import-local-sigs --import secret-keys.gpg
      $ gpg2 --import-ownertrust otrust.lst
      
    • 为 Bouncy Castle 实现 .kbx 格式。

    【讨论】:

      【解决方案2】:

      从 1.60 版开始,BouncyCastle 支持读取 KeyBox 文件。

      https://www.bouncycastle.org/releasenotes.html

      现在为 GNU 密钥箱文件格式添加了解析器。 GPG SExpr 解析器现在涵盖更广泛的密钥类型。

      KeyBoxTest.java中有一些示例代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 2014-10-17
        • 1970-01-01
        • 2020-10-15
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多