java 在GnuPG 2.1的`pubring.kbx`文件中使用BouncyCastle

vuv7lop3  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(137)

我正在尝试使用BouncyCastle和PGP2来读取公钥环。问题是,从GnuPG 2.1开始,它存储在pubring.kbx中,而不是pubring.gpg。这将导致IOException public key ring doesn't start with public key tag: tag 0x0
有什么想法,如果以及如何我可以使用BC与GnuPG 2.1?

j8ag8udp

j8ag8udp1#

GnuPG 2.1默认使用新的keybox文件格式--如果没有找到pubring.gpg。如果存在“遗留”密钥环文件,则将使用该文件。
我不知道Bouncy Castle支持.kbx文件格式。因此,如果你想在GnuPG使用的同一个密钥文件上同时使用Bouncy Castle,你有三个选择:

  • 另外,在其他地方维护一个旧的pubring.gpg文件,这意味着在需要时运行gpg --export--export-secret-keys。旧的pubring.gpg只是密钥的转储,您可以直接使用导出输出作为keyring。
  • 在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结果可以直接用作新的keyring,因此不需要此文件的--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
1mrurvl1

1mrurvl12#

从1.60版开始,BouncyCastle支持阅读KeyBox文件。
https://www.bouncycastle.org/releasenotes.html
现在已经为GNU keybox文件格式添加了一个解析器。GPG SExpr解析器现在覆盖了更广泛的键类型。
KeyBoxTest.java中有一些示例代码。

hiz5n14c

hiz5n14c3#

如果您已经来到这里,那么您会意识到在bouncyccastle中从.pgp到.kbx文件的API跳跃是缺乏记录的。我已经研究了诸如https://github.com/pgpainless/pgpainless和org.eclipse.jgit.gpg.bc之类的替代品,它们试图使这些变化合理化。但是,将现有的代码重构为.pgp密钥环文件到.kbx是非常具有挑战性的。

相关问题