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


2

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

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

如何更换本地存根?

Answers:


4

这是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规范中稍微阅读一下,以了解不同的数据包及其功能。


我遗憾地遇到了这个解决方案的问题:(关于版本,在我的情况下,这个问题发生在gnupg 2.1.2。关于备份 - 是的,我已经获得了所有密钥,但是发布了gpg --delete-secret-and-public-keys ...结果gpg: deleting secret subkey failed: Not possible with a card based key- 这正是原因我想删除它。
viraptor 2015年

这让我感到惊讶。看看最近发布的GnuPG邮件列表,似乎有一个bug。由于GnuPG 2.1合并了私钥和公钥,并使它们与旧版本不相容,我担心唯一的等待是大锤方法:导出所有内容(包括信任),删除密钥环文件,再次导入所有内容(使用备份中的密钥)。
Jens Erat 2015年
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.