无需密码即可解密先前加密的消息,但无法导出 GPG 私钥

无需密码即可解密先前加密的消息,但无法导出 GPG 私钥

问这个问题感觉自己很蠢,但为什么不呢。我有一堆文件,我前段时间用一个gpg受密码保护的密钥对加密了它们。从那时起,我就忘记了密码。但密钥一定还在某个地方(我的密钥环?),因为我能够成功地用gpg -d file.gpg 没有任何密码提示。

但是,当我尝试导出私钥时,系统要求我输入密码。

我尝试过重启以查看这是否是暂时的,但事实并非如此。当我冷重启并尝试解密加密消息时,它可以正常工作。当我尝试导出私钥时,没有成功。

我假设gpg-agent正在缓存某些内容;我尝试运行gpgstrace尝试检索我的私钥,但没有成功。gpg读取受密码保护的私钥文件,与对话gpg-agent,并接收解密的消息。但我在日志中的任何地方都找不到私钥(或者也许我不知道要查找什么)strace

gpg-agent我曾尝试与交谈gpg-connect-agent,但我不确定在那里做什么才能获取缓存的私钥。

解密后,我已将所有消息安全地存储在某个地方,因此数据丢失不再是问题。我只是想知道生成新的密钥对是否是我唯一的选择。

答案1

每个 OpenPGP“密钥”由几个独立的密钥对(子密钥)组成,通常用于不同的目的(例如,一个认证和签名子密钥、一个加密子密钥等)。

在 GnuPG 2.1 及更高版本中,私钥存储~/.gnupg/private-keys-v1.d并由gpg-代理。每个子密钥都有一个单独的文件,用您的密码加密。这意味着您可以轻松绕过 gpg-agent,但即使您这样做了,您仍然无法在不知道密码的情况下解锁密钥文件。

从技术上讲,每个密钥文件都可以使用不同的密码进行加密(尽管 gpg 的 UI 通常不提供此功能)。因此,当 gpg-agent 将您的密码存储在 GNOME Keyring 等中时,它们也会为每个子密钥单独存储,而不会检查它们是否相同。

因此,您的密码可能仅被“记住”用于加密子密钥,但未被“记住”用于签名子密钥。由于它们完全相同,因此只需从 GNOME Keyring 中检索存储的密码就足够了。

使用secret-tool在 GNOME Keyring 中搜索您的密码,看看它们是否有效:

$ secret-tool search --all xdg:schema org.gnupg.Passphrase

(你也可以使用 GNOME 的图形程序海马又名“密码和密钥”,但它容易崩溃或冻结,因此不太有用。)

相关内容