gpg2:没有密钥


21

我已经使用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 ...。在该顺序之后,雷鸟+ 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

您最终解决了这个问题吗?我有完全相同的问题。
Volker

没关系,我已修复它。需要使用的信息gpg-agent以及pinentry程序必须设置为pinentry-gtk-2。在将它设置为之前pinentry-gnome3,它已经存在于我的系统中,但是没有用。我不得不手动安装pinentry-gtk-2
Volker

Answers:


22

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

这不是它正在查看的唯一文件。

在GnuPG的1.x中(2.0),该“secring”曾经有你的密钥组的公共数据的副本一样,所以它是完全独立的(和之间的唯一区别gpg -k,并gpg -K为它会读取的文件) ,但与此同时程序难以维护。

现在,在GnuPG 2.1中,秘密密钥是独立存储的-由gpg-agent进行维护,从而将其保存在~/.gnupg/private-keys-v1.d/。因此,无论gpg -kgpg -K现在有读取来自pubring的OpenPGP的信息,但后者还要求GPG代理哪些证书有相关的密钥。如果您使用的是strace,则connect()在阅读发布后应该会注意到有一个呼叫。

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

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

要手动检查代理的内容:

$ gpg-connect-agent 
> keyinfo --list
S KEYINFO 926145FFCA32B3E6E079A0CF73EA77C40733A349 D---P---
S KEYINFO BACFB81EAFC864F4AB2926E8B1F55AD579F78D1A D---P---
S键信息FF3D1DD51B9C79E148CCCEA5F7F3E25EC96048B7 D---P---
S键信息4D29EF1460F164CDB11D0FC0247214660ACDD60F D---P---
S键信息06B13685B9AA429B9CABCE480930D74B991C8DF0 D---P---
S KEYINFO B28DB8D045654E8A6A40466A07FCD9E432935E29 D---P---
好
> /再见
$

这些是“钥匙扣” –将它们与GnuPG的比较:

$ gpg --list-secret-keys --with-keygrip
/home/fred/.gnupg/pubring.kbx
--------------------------------
sec ed25519 2018-08-18 [SC]
      2357E133AD5D24F6CB2C1B0CEF4F7ED27E252632
      按键= 4D29EF1460F164CDB11D0FC0247214660ACDD60F 
uid [最终] Fred Foobar <fred@example.com>

我遇到了同样的问题:我试图生成gpg --gen-key要与一起使用的密钥usign gopass。不幸,gopass使用gpg2... gpg2 --import就像一个魅力!谢谢!
andiba

对我来说gpg2 --import ~/.gnupg/pubring.gpg修复它。
迪拉瓦尔

你是我的英雄
Lo-Tan

1

最终,我认为问题出在我使用的是Debian Unstable,而引入了一个版本不匹配的问题apt-get dist-upgrade。我想这就是为什么他们称其为“不稳定”。


我在Ubuntu LTS中也有它。从Ubuntu Unity切换到GNOME之后。
nerdoc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.