如何在 GPG 中取消撤销 PGP 密钥?

如何在 GPG 中取消撤销 PGP 密钥?

在使用 GPG 时(并试图找出一种安全的方法来存储我的撤销证书以便其他人无法使用它),我意外地撤销了我的 PGP 密钥。

撤销仅限于当地;不是发送到密钥服务器,所以我确信一定有办法取消撤销...但我什么也没找到。即使删除密钥并重新导入也无济于事;它仍然显示为已撤销。最后我删除了整个密钥环并重新导入了所有内容,这有效。但一定有更好的方法...

那么,你怎么样取消撤销GPG 中的 PGP 密钥?

另外,撤销存储在哪里?为什么当我从密钥环中删除密钥时它没有被删除?

以防万一,我在 OS X 上使用 GPGGPG工具包裹。

答案1

事实证明可以(并且相对简单)删除并重新导入密钥,只要它在密钥服务器上(当然,前提是撤销尚未发送到密钥服务器)。

这是我发现的有效方法(THEKEYID是密钥的短 ID):

  1. 删除公钥如下(该--expert选项允许删除公钥,同时保留私钥):

    gpg --expert --delete-key THEKEYID
    
  2. 按以下键确认:

    y
    
  3. 从密钥服务器再次获取公钥:

    gpg --keyserver subkeys.pgp.net --recv-keys THEKEYID
    

完毕!

据推测这也可以通过使用公钥的本地(撤销前)备份来完成,gpg --import public.key而不是使用第三个命令。

只需从 GPG 钥匙串访问 GUI 中删除整个密钥(公共和私人),然后从备份中恢复,就没有用了 - 我不知道为什么。

答案2

2007 年,有人分享了一种无需任何密钥服务器即可取消本地密钥撤销的流程。大卫·肖官方邮件列表上的帖子

~/.gnupg其过程如下(我建议您在继续之前先备份):

  1. 将公钥导出到文件中。

    gpg --export (thekey) > mykey.gpg
    
  2. 将其拆分成几个部分:

    gpgsplit mykey.gpg
    

    这会将密钥拆分成多个文件,文件名称如下

    "000001-006.public_key".
    
  3. 找出哪个数据包是撤销的。它可能是“000002-002.sig”,但请确保:

    gpg --list-packets 000002-002.sig
    

    这将显示有关数据包的信息。如果 sigclass 设置为 0x20,则表示撤销。删除该文件。

  4. 将钥匙重新放回原处:

    cat 0000* > myfixedkey.gpg
    
  5. 删除旧密钥:

    gpg --expert --delete-key (thekey)
    

    您需要在这里输入 --expert,这样 GPG 才会允许您在私钥仍然存在时删除公钥。

  6. 导入新密钥:

    gpg --import myfixedkey.gpg
    

请注意,显然,在密钥服务器上发布的撤销证书无法取消撤销。

相关内容