Sor*_*tad 6 encryption gnupg gpg-agent
最近,我的通行证密码管理器开始花费 45 秒以上的时间来显示主密码的 gpg-agent 密码提示,当我尝试登录网站并且必须坐在那里盯着密码时,这非常烦人提示一分钟。
我开始做一些测试,发现 gpg2 代理似乎有问题。当我运行 gpg1 时,没有配置任何代理,速度非常快(这包括输入密码的时间):
$ time gpg -vvv -d BitBucket.gpg
real 0m2.940s
user 0m0.024s
sys 0m0.004s
Run Code Online (Sandbox Code Playgroud)
但是当我对同一个文件运行 gpg2 (代理需要使用 gpg2)时,速度非常慢:
$ time gpg2 -vvv -d BitBucket.gpg
real 0m53.421s
user 0m0.000s
sys 0m0.004s
Run Code Online (Sandbox Code Playgroud)
然而,既然代理已经缓存了我的密码,速度又快了:
$ time gpg2 -vvv -d BitBucket.gpg
real 0m0.126s
user 0m0.004s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
这并不是解密速度慢——一旦密码提示最终出现,它就会在或多或少的正常时间内解密。只是代理需要很长时间才能加载并显示密码提示。
详细的日志不会产生任何有用的信息。输出如下所示(不相关和/或敏感信息替换为<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
Run Code Online (Sandbox Code Playgroud)
我尝试使用手册页中描述的选项来杀死并手动重新加载,希望得到解释为什么花了这么长时间,但在我做了几次解密操作后打印的唯一一行是gpg-agent:--log-file
2019-07-24 17:49:13 gpg-agent[19648] gpg-agent (GnuPG) 2.1.11 started
Run Code Online (Sandbox Code Playgroud)
这显然不是很有帮助!
我尝试更改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
Run Code Online (Sandbox Code Playgroud)
我接下来可以尝试什么来弄清真相?
该问题实际上与 相关pinentry,但只是间接相关。pinentry-*对于那些不尝试查询密钥环守护进程的实现,这种情况不会发生。
正在使用的守护进程很可能是gnome-keyring-daemon导致挂起的原因(顺便说一句,还有一些其他的密钥环实现)。来自GPG 错误报告:
延迟是由 pinentry 查询 GNOME 密钥环引起的。添加
no-allow-external-cache到您的 gpg-agent.conf,或修复您的 GNOME 安装,或向 GNOME 人员报告问题。
其他一些可能的解决方案:
killall gnome-keyring-daemon(将在下次使用时自动启动,可能不会再挂起,无需重新启动)gnome-keyring如果不使用则卸载包