![如何更新 pgp 子密钥的签名](https://linux22.com/image/1520863/%E5%A6%82%E4%BD%95%E6%9B%B4%E6%96%B0%20pgp%20%E5%AD%90%E5%AF%86%E9%92%A5%E7%9A%84%E7%AD%BE%E5%90%8D.png)
我的公共 pgp 密钥有一个子密钥,其签名(自签名)包含无效的策略 URL。我该如何更新签名并删除策略?
在 macOS Sierra 10.12.3 (16D32) 上使用 gpg (GnuPG) 1.4.21
答案1
这并不是真正的解决方案,但这就是我处理该问题的方法(使用 GnuPG 2.2)。
首先,我的 UID 也遇到了同样的问题。可以解决此问题:从 gpg.conf 中删除策略 URL,然后删除签名(gpg --edit-key
和delsig
),并使用主密钥再次对 uid 进行自签名。
对于子密钥,此方法不起作用。每个子密钥一旦创建,都必须由主密钥签名,额外的签名没有意义。因此,对于 GnuPG,不需要支持编辑或添加子密钥签名。所以我不得不尝试其他方法(使用 uid 的测试用例test
)。
- 导出完整密钥:
gpg --export-secret-key test > testexport
- 将密钥拆分成数据包:
gpgsplit testexport
- 删除包含无效签名的数据包。在我的测试案例中,子密钥签名包含在最后一个代码片段文件中,名为
000006-002.sig
。您可以通过仔细检查并检查内容gpg --list-packets 000006-002.sig
。 - 为包含秘密子密钥的代码片段创建签名:
gpg --local-user test --output 000006.newsig --detach-sign 000005-007.secret_subkey
- 将包括新签名在内的片段重新放在一起:
cat 0* > newkey
- 从密钥环中删除(旧)密钥:
gpg --delete-key test
- 将新密钥重新导入密钥环:
gpg --import newkey
。但不幸的是,由于签名无效,子密钥的导入失败了。
所以这种方法太过幼稚,人们应该更深入地研究 OpenPGP 签名,以便创建有效的签名。
最后,由于我的密钥已被其他人上传到密钥服务器,我决定撤销子密钥并创建一个新的密钥。