gpg2:没有密钥

gpg2:没有密钥

我已经使用 enigmail 一年多了,没有任何问题,但今天它却不工作了。

我发现以下有趣的事实:

gpg --decrypt something.gpg # this works
gpg2 --decrypt something.gpg # this fails

因此我的机器上的 gpg 版本 2 出了问题。

这让我意识到:

gpg --list-secret-keys # reads from ~/.gnupg/secring.gpg
gpg2 --list-secret-keys # reads from ~/.gnupg/pubring.gpg (pubring?!) 

这似乎是问题的根源......当然gpg2找不到密钥,因为它在错误的文件中查找。

我的运行正常,怎么会gpg2失败呢gpg?我没有看到任何选项来指定从哪里读取密钥。

有人有什么想法吗?


回复@grawity

谢谢,我很感激你的帮助。我跑了strace,我明白你在说什么。

但是,即使gpg2 --import ...我看不到行为有什么变化。我只能通过重新启动(不启动 gpg-agent),运行gpg2 --import ...,然后运行才能使其工作gpg2 --decrypt ...。经过这个序列后,thunderbird + enigmail 也表现良好。但是,大约 15 分钟后(我猜我输入的解密密码已过期),它又gpg-agent恢复了原来的样子。这个序列是可重复的。

如果有助于澄清任何问题,这里有一些输出:

输出gpg2 -K

/home/<username>/.gnupg/pubring.gpg
---------------------------------
sec   rsa4096/AAAAAAAA <date> [SC]
uid         [ultimate] <description of me>
ssb   rsa4096/BBBBBBBB <date> [E]

输出gpg-connect-agent

> keyinfo --list
S KEYINFO <keygrip associated with AAAAAAAA> D - - - P - - -
S KEYINFO <keygrip associated with BBBBBBBB> D - - - P - - -
OK

输出gpg2 -v -r <my email> -e testfile

gpg: using PGP trust model
gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA
gpg: This key belongs to us
gpg: reading from 'testfile'
gpg: writing to 'testfile.gpg'
gpg: RSA/AES256 encrypted for: "BBBBBBBB <description of me>"

输出gpg2 -v -d testfile.gpg

gpg: public key is BBBBBBBB
gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA
gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA
gpg: encrypted with 4096-bit RSA key, ID BBBBBBBB, created <date>
      "<description of me>"
gpg: public key decryption failed: Operation cancelled
gpg: decryption failed: No secret key

答案1

...当然,gpg2 无法找到密钥,因为它在错误的文件中查找。

那不是仅有的它正在查看的文件。

在 GnuPG 1.x(和 2.0)中,“secring”曾经也拥有密钥块公共数据的副本,因此它是完全独立的(并且和之间的唯一区别在于gpg -kgpg -K读取了哪个文件),但同时程序更难维护。

在 GnuPG 2.1 中,密钥现在独立存储 - 它们由gpg-代理,这使它们保持在 中~/.gnupg/private-keys-v1.d/。因此,现在gpg -k和都gpg -K必须从 pubring 读取 OpenPGP 信息,但后者还要求gpg-代理哪些证书有关联的密钥。如果您正在使用斯特拉斯,您应该connect()在阅读发布后立即注意到一个电话。

如果 GnuPG 没有自动迁移密钥,只需直接导入整个密钥:

gpg2 --import ~/.gnupg/secring.gpg

要手动检查代理的内容:

$ gpg-connect-agent
> keyinfo--列表
S 密钥信息 926145FFCA32B3E6E079A0CF73EA77C40733A349 D - - - P - - -
密钥信息 BACFB81EAFC864F4AB2926E8B1F55AD579F78D1A D - - - P - - -
S 密钥信息 FF3D1DD51B9C79E148CCCEA5F7F3E25EC96048B7 D - - - P - - -
密钥信息 4D29EF1460F164CDB11D0FC0247214660ACDD60F D - - - P - - -
S 密钥信息 06B13685B9AA429B9CABCE480930D74B991C8DF0 D - - - P - - -
密钥信息 B28DB8D045654E8A6A40466A07FCD9E432935E29 D - - - P - - -
好的
> /再见
$

这些是“keygrips” – 将它们与 GnuPG 的 secring 进行比较:

$ gpg --list-secret-keys --with-keygrip
/home/fred/.gnupg/pubring.kbx
--------------------------------
sec ed25519 2018-08-18 [SC]
      2357E133AD5D24F6CB2C1B0CEF4F7ED27E252632
      按键手柄 = 4D29EF1460F164CDB11D0FC0247214660ACDD60F
uid [终极] Fred Foobar <[电子邮件保护]>

答案2

最后,我决定问题出在我使用的 Debian Unstable 上,并且出现了由 导致的版本不匹配apt-get dist-upgrade。我想这就是他们称之为“不稳定”的原因。

相关内容