新的.gnupg目录:将旧密钥导入新安装


9

我已经重新安装了操作系统(Ubuntu 16.04),并具有一个旧的.gnupg目录,其中包含:

gpg-agent.conf  
gpg-agent-info-<hostname> 
gpg.conf  
private-keys-v1.d  
pubring.gpg  
secring.gpg  
S.gpg-agent  
trustdb.gpg

我想将旧的公钥和私钥导入新的gnupg中。(我并没有简单地将.gnupg目录复制到新安装中,因为我知道新的gnupg2在数据库格式方面存在一些差异,这是新的EC加密选项的一部分。)

以下内容适用于公用密钥,但不适用于秘密密钥:

gpg --export --keyring=~/.gnupg.old/pubring.gpg | gpg --import
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg | gpg --import

后者回应:

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

请注意,它无法打开我的秘密戒指。尝试导出到文件时会出现相同的错误:

gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg > secret.asc

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported

由于我的秘密密钥已剥离了主密钥的私有部分,因此我也尝试了相同的操作--export-secret-subkeys,但响应是相同的。将我的密钥ID(电子邮件地址)放在导出之后也无法正常工作。另一方面,我可以列出这些键:

gpg --list-keys --keyring=~/.gnupg.old/secring.gpg

gpg: Oops; key lost!
node 0x1e7ee00 01/00 type=secret-key
node 0x1e9cbd0 00/00 type=user-id  "Me <Me@home.com>" ....
node 0x1e99dd0 00/00 type=signature  class=13 keyid=XXXXXXXX ts=1383637282
node 0x1e9c510 00/00 type=secret-subkey
node 0x1eaa210 00/00 type=signature  class=18 keyid=XXXXXXXX ts=1449138073
node 0x1eaf1f0 00/00 type=secret-subkey
node 0x1eaf580 00/00 type=signature  class=18 keyid=XXXXXXXX ts=138363647

(我假设“密钥丢失”是指剥离的密钥主密钥。)有人可以指导我如何解决此问题吗?

在@Jens(如下)的帮助下,可以进行以下工作:

gpg --no-default-keyring --secret-keyring=~/.gnupg.old/secring.gpg --export-secret-keys | gpg --import

Answers:


7

首先,您正在做一种“无操作”。gpg在Ubuntu 16.04上仍为GnuPG 1.4.20,而gpg2从GnuPG 2.0.28跳至2.1.11。然后,尽管GnuPG 2.1对文件格式进行了一些更改(新的密钥库格式“ keybox” / .kbx并将秘密密钥环合并到公共密钥库中),但它仍然兼容,并且将在第一次调用时进行秘密密钥环合并gpg2。除非您手动进行转换,否则密钥环格式保持旧格式。完全支持旧格式,新格式仅提供性能改进。拟议的向新密钥箱格式的迁移路径是旧的GnuPG目录中进行转换而不是转移到全新的目录中:

要将现有的pubring.gpg文件转换为密钥箱格式,请首先备份ownertrust值,然后将该文件重命名为(例如)公钥,这样任何GnuPG版本都不会识别该文件,然后运行import,最后还原ownertrust值:

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

然后,您可以重命名publickeys文件,以便较早的GnuPG版本可以使用它。请记住,在这种情况下,您具有两个独立的公用密钥副本。所有文件的所有gpg版本都将ownertrust值保留在trustdb.gpg文件中,但是需要采取上述预防措施,以使其保持在导入之前。

考虑到您发布的错误消息,似乎新主~/.gnupg目录或秘密密钥环上的某些权限~/.gnupg/secring.gpg不足以创建密钥。如果偶然从根用户调用了GnuPG,通常会发生这种情况。

来自的消息--list-keys不是正常输出,但似乎是错误消息。要打印任意密钥环,请使用--no-default-keyring--secret-keyring选项以及--list-secret-keyscommdn(通常在GnuPG的命令之前始终具有选项):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys

好的,您已将其固定在所有权问题上。我的新secring.gpg由root拥有。此外,使用--no-default-keyring--secret-keyring之前--list-secret-keys会产生可识别的输出。所以,让我看看我现在所拥有的。
对角线

作品!并感谢您提供升级信息。非常有帮助。
对角线
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.