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

Man*_*idt 6 linux command-line pgp gnupg

我有一个 GnuPG 密钥对,其中包含一个主密钥(仅具有认证功能)和 3 个子密钥(分别具有SignEncryptAuthenticate功能)。实际上,当我开始时,我只有子密钥的私钥(我有一个存根,标记为#,而不是主私钥)

我这样做:

  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. 我尝试解密第 2 步中的消息,令人惊讶的是我能够通过引入保护私有子密钥的密码来解密它!如果我再次执行,私钥就在那里gpg --list-secret-keys

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

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

use*_*686 6

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

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

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

gpg-connect-agent "delete_key <keygrip>" /bye
Run Code Online (Sandbox Code Playgroud)