如果没有主密钥,则无法删除 GnuPG 中的私有子密钥

如果没有主密钥,则无法删除 GnuPG 中的私有子密钥

我有一个 GnuPG 密钥对,带有主密钥(仅证明功能)和 3 个子键(符号加密认证功能)。实际上,当我启动时,我只有子密钥的私钥(我有一个存根,标记为#,而不是主私钥)

我做如下:

  1. 我列出了私钥(gpg --list-secret-keys)。有一个主密钥存根(#)和三个子密钥。
  2. 我用公开加密消息加密子密钥 ( gpg -e USER)
  3. 我解密该消息(gpg -d):好的。
  4. 我删除了三个子密钥(gpg --edit-key)。gpg --delete-secret-keys对主密钥(它只是一个存根)和子密钥都不起作用。
  5. 我删除了公共主密钥(gpg --delete-keys
  6. 我尝试解密第 2 步中的消息:无法解密,没有私钥,好的。我列出了私钥gpg --list-secret-keys:没有密钥
  7. 我杀死 gpg-agent ( killall gpg-agent)
  8. 我进口民众再次从密钥服务器获取密钥 ( gpg --receive-keys)
  9. gpg --list-secret-keys我尝试解密第 2 步中的消息,令人惊讶的是,我能够通过输入保护私有子密钥的密码来解密它!如果我再次执行,私钥就在那里。

我猜我没有正确删除私有子密钥,我猜用该gpg --edit-key命令我只删除了公共子密钥。但如果没有主密钥(它只是一个存根),我该如何删除私有子密钥?

再次导入秘密主密钥后,我可以通过执行删除主私钥及其三个子密钥gpg --delete-secret-key。这是我唯一的选择吗?如果主密钥只是一个存根,那么是否不可能删除秘密子密钥?

答案1

对于 GnuPG 2.1+,密钥存储在 gpg-agent 中,仅由主密钥环引用。

再次重新导入公共子密钥,然后运行gpg --list-secret-keys --with-keygrip。这将显示属于每个子密钥的原始非对称密钥的“指纹”(不要将其与包含元数据和所有内容的整个 PGP 子密钥的指纹混淆)。

对于要删除的每个子项,运行:

gpg-connect-agent "delete_key <keygrip>" /bye

相关内容