我有一个子密钥被移动到了一张卡上。这导致它被替换为本地钥匙串中的存根。这意味着每次我尝试使用该子密钥时,我都会得到:
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 规范才能了解不同的数据包及其作用。