如何重新导入由存根替换的 gpg 密钥

如何重新导入由存根替换的 gpg 密钥

我有一个子密钥被移动到了一张卡上。这导致它被替换为本地钥匙串中的存根。这意味着每次我尝试使用该子密钥时,我都会得到:

gpg: public key decryption failed: Card error
gpg: decryption failed: No secret key

我现在想从备份中恢复密钥。我该怎么做?

我已经尝试过gpg --edit-key ...key n, toggle, delkey但是当我再次尝试导入密钥时,我仍然得到未更改的密钥:

gpg: Total number processed: 3
gpg:            new subkeys: 1
gpg:         new signatures: 1
gpg:       secret keys read: 3
gpg:  secret keys unchanged: 1

我怎样才能替换我的本地存根?

答案1

这是 GnuPG 2.0 版之前的已知问题。如果您已经导入了一些密钥,则无法导入。

如何解决这个问题取决于您的具体情况。所有解决方案都需要备份!

  • 您已经在使用 GnuPG 2.1。

    你很幸运,因为这个问题根本不存在。好吧,不是。显然你还没有使用 GnuPG 2.1,否则你就不会遇到这个问题了。但你也许可以升级。

    您甚至可以在 sime live CD 上使用它,导入所有内容(自动合并密钥),最后导出合并后的密钥。现在将密钥放到您的正常系统上并重新导入。

  • 您没有添加任何子项,因此您的备份包含所有子项。

    你很幸运。只需导出所有证书,...使用gpg --export [key-id] > public-key.pgp。现在使用完全删除密钥gpg --delete-secret-and-public-keys [key-id],导入备份其次是 公钥:gpg --import [backup-file] public-key.pgp

  • 您更改了子密钥,因此必须合并它们。

    运气不好。GnuPG 无法自行处理此问题。剩下两个选择:

    • 撤销修改后的密钥,然后创建新的密钥。这是最简单的方法...
    • 有一个名为 的命令行工具gpgsplit,它将您导出的 GnuPG 密钥拆分为单独的数据包。如果您有这些,您可以使用 将它们(包括所有子密钥)放在一起cat。请注意使用正确的数据包顺序,不要排除实际需要的内容!

      虽然这是可能的,但这绝对是困难的,并且可能需要阅读一些 OpenPGP 规范才能了解不同的数据包及其作用。

相关内容