我已经使用 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 -k
它gpg -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
。我想这就是他们称之为“不稳定”的原因。