【问题标题】: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
相反的过程应该看起来很相似(假设没有存储密钥,否则请阅读下文,并交换 gpg2 和 gpg 以匹配您机器上安装的二进制文件):
$ 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 格式。