rex*_*oni 23 encryption gnupg gpg-agent
我已经使用 enigmail 一年多了,没有问题,今天它不起作用。
我发现了以下有趣的事实:
gpg --decrypt something.gpg # this works
gpg2 --decrypt something.gpg # this fails
Run Code Online (Sandbox Code Playgroud)
所以我的机器上的 gpg 版本 2 有问题。
这让我看到:
gpg --list-secret-keys # reads from ~/.gnupg/secring.gpg
gpg2 --list-secret-keys # reads from ~/.gnupg/pubring.gpg (pubring?!)
Run Code Online (Sandbox Code Playgroud)
这似乎是问题的根源……当然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]
Run Code Online (Sandbox Code Playgroud)
输出 gpg-connect-agent
> keyinfo --list
S KEYINFO <keygrip associated with AAAAAAAA> D - - - P - - -
S KEYINFO <keygrip associated with BBBBBBBB> D - - - P - - -
OK
Run Code Online (Sandbox Code Playgroud)
输出 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>"
Run Code Online (Sandbox Code Playgroud)
输出 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
Run Code Online (Sandbox Code Playgroud)
use*_*686 23
...当然 gpg2 找不到密钥,因为它在错误的文件中查找。
这不是它正在查看的唯一文件。
在GnuPG的1.x中(2.0),该“secring”曾经有你的密钥组的公共数据的副本一样,所以它是完全独立的(和之间的唯一区别gpg -k,并gpg -K为它会读取的文件) ,但同时程序维护起来也比较困难。
在 GnuPG 2.1 中,秘密密钥现在独立存储——它们由gpg-agent维护,将它们保存在~/.gnupg/private-keys-v1.d/. 所以现在gpg -k和gpg -K现在都必须从发布中读取 OpenPGP 信息,但后者另外询问gpg-agent哪些证书具有关联的密钥。如果您正在使用strace,您应该connect()在阅读发布后立即注意到一个电话。
如果 GnuPG 没有自动迁移密钥,只需直接导入整个安全:
gpg2 --import ~/.gnupg/secring.gpg
Run Code Online (Sandbox Code Playgroud)
要手动检查代理的内容:
$ gpg-connect-agent > keyinfo --list S KEYINFO 926145FFCA32B3E6E079A0CF73EA77C40733A349 D - - - P - - - S KEYINFO BACFB81EAFC864F4AB2926E8B1F55AD579F78D1A D - - - P - - - S KEYINFO FF3D1DD51B9C79E148CCCEA5F7F3E25EC96048B7 D - - - P - - - S KEYINFO 4D29EF1460F164CDB11D0FC0247214660ACDD60F D - - - P - - - S KEYINFO 06B13685B9AA429B9CABCE480930D74B991C8DF0 D - - - P - - - S KEYINFO B28DB8D045654E8A6A40466A07FCD9E432935E29 D - - - P - - - 好的 > /再见 $
这些是“keygrips”——将它们与 GnuPG 的 secring 进行比较:
$ gpg --list-secret-keys --with-keygrip
/home/fred/.gnupg/pubring.kbx
--------------------------------
秒 ed25519 2018-08-18 [SC]
2357E133AD5D24F6CB2C1B0CEF4F7ED27E252632
键盘手柄 = 4D29EF1460F164CDB11D0FC0247214660ACDD60F
uid [终极] Fred Foobar <fred@example.com>
| 归档时间: |
|
| 查看次数: |
27301 次 |
| 最近记录: |