最近,我的通行证密码管理器开始花费 45 秒以上的时间来提示我的主密码的 gpg-agent 密码提示,这在我尝试登录网站并且不得不坐在那里盯着密码时非常烦人提示一分钟。
我开始做一些测试,发现 gpg2 代理似乎有问题。当我运行 gpg1 时,没有配置任何代理,速度非常快(这包括输入密码的时间):
$ time gpg -vvv -d BitBucket.gpg
real 0m2.940s
user 0m0.024s
sys 0m0.004s
但是当我对同一个文件运行 gpg2 时(使用 gpg2 需要代理),它非常慢:
$ time gpg2 -vvv -d BitBucket.gpg
real 0m53.421s
user 0m0.000s
sys 0m0.004s
然而,既然代理缓存了我的密码,它又快了:
$ time gpg2 -vvv -d BitBucket.gpg
real 0m0.126s
user 0m0.004s
sys 0m0.000s
慢的不是解密——一旦密码提示最终出现,它就会在或多或少的正常时间内解密。只是代理需要永远加载和显示密码提示。
详细的日志不会产生任何有用的信息。输出看起来像这样(不相关和/或敏感信息替换为<angle-bracketed text>
:
$ gpg2 -vvv -d BitBucket.gpg
gpg: using character set 'utf-8'
<key parameters>
:pubkey enc packet: version 3, algo 1, keyid <X>
data: [2048 bits]
gpg: public key is <Y>
gpg: using subkey <Y> instead of primary key <Z>
[...here it locks up for 45-ish seconds and then pops up the agent prompt]
gpg: public key encrypted data: good DEK
<key parameters>
:encrypted data packet:
length: 200
mdc_method: 2
gpg: using subkey <Y> instead of primary key <Z>
gpg: encrypted with 2048-bit RSA key, ID <Y>, created 2012-03-07
<ME>
gpg: AES256 encrypted data
<key parameters>
:literal data packet:
mode b (62), created 1525637737, name="",
raw data: 151 bytes
gpg: original file name=''
<the content of the password file>
gpg: decryption okay
gpg-agent
我尝试使用手册页中描述的选项终止并手动重新加载--log-file
,希望得到对花费这么长时间的解释,但在我进行了几次解密操作后,唯一打印出来的行是:
2019-07-24 17:49:13 gpg-agent[19648] gpg-agent (GnuPG) 2.1.11 started
这显然不是很有帮助!
我尝试更改pinentry-program
我的~/.gnupg/gpg-agent.conf
,但不同的 GUI 表现相似。
我找到了这个线程,但这似乎与加密有关(由于缺乏随机性,这可能会阻止,但真正的随机性似乎不太可能需要启动 gpg-agent)。
我还发现了一个关于运行缓慢的线程,它有时会在每个命令上执行,但我自己运行并且它在没有明显延迟的情况下完成:--check-trustdb
--check-trustdb
$ time gpg2 -vvv --check-trustdb
real 0m0.009s
user 0m0.008s
sys 0m0.000s
我接下来可以尝试什么来弄清楚这个问题的任何想法?
难住了,我做了 Windows 用户的事情并重新启动了我的 PC(即使我在这里运行的是 Linux),令人惊讶的是问题消失了。我想一定是另一个正在运行的进程存在某种争用问题。
如果这种情况再次发生,我会回来更新,我能够确定具体的罪魁祸首是什么。为 gpg-agent列出的条目
lsof
似乎没有暗示任何可能的问题,我仔细检查以确保没有任何其他正在运行的代理或 GPG 进程。