我一直在使用gpg
进行加密。有人建议我改用gpg2
。当我去使用gpg2
时,我什么也做不了;它会抱怨需要访问私钥,但我似乎无法使用没有gpg-agent
运行的私钥。
事实证明,我故意禁用gpg-agent
(使用chmod -x /usr/bin/gpg-agent
);这导致gpg2
功能非常有限,并向stderr抱怨。
我禁用gpg-agent
的原因是关注一系列事件。
首先,我将SSH连接到远程计算机和#34;代理"会打开一个弹出窗口,要求我解锁我的SSH密钥。我不喜欢这个因为:
sudo
烦人的密码缓存,我可以在其配置中禁用它);每次将它们用于任何使用它们的程序时,我总是希望输入加密密钥的密码。原来是GNOME的关键代理,我无法在不卸载GNOME的情况下卸载代理。所以我只是通过chmod -x /usr/bin/gnome-keyring*
禁用它。然后我发现SSH会回退到另一个代理,所以我也使用相同的方法chmod -x /usr/bin/ssh-agent*
当我开始使用gpg
时,我发现它有一个类似的代理,就像我要问的那样。我出于同样的原因立即禁用了它;我希望软件始终向我询问密码以便使用私钥。我不希望以任何理由缓存密码。
因此gpg2
出现在要求 gpg-agent
,我想问一下:
gpg2
的情况下使用gpg-agent
?答案 0 :(得分:6)
我是否过于偏执使用密码缓存?我很想看到或指出对它的讨论。
您的担忧肯定是有效的IMO。好消息是有一些方法可以自定义gpg-agent行为以满足您的需求。例如,使用基于终端的密码短语提示(PIN输入)而不是GUI提示,并执行不缓存密码短语。
是否有最佳做法可以更好地避免意外启用缓存密码短语?
快速解决方案(可能不是最佳做法)是使用以下选项自定义〜/ .gnupg / gpg-agent.conf:
# Expire cached PINs (passphrases) after zero seconds
default-cache-ttl 0
max-cache-ttl 0
# If you use your GPG keys for SSH auth...
default-cache-ttl-ssh 0
max-cache-ttl-ssh 0
enable-ssh-support
# Use TTY-based PIN entry program (I see pinentry,
# pinentry-curses, pinentry-gnome3, pinentry-tty and
# pinentry-x11 on my system)
pinentry-program /usr/bin/pinentry-tty
我发现以下关于GPG关键最佳做法的指南(更多关于密钥管理的一般指南,而不是您正在询问的内容)相当翔实且易于理解:
有没有办法在没有运行gpg-agent的情况下使用gpg2?
据我所知,不是用gpg 2.x。手册页说明了以下内容:
--use-agent
--no-use-agent
This is dummy option. gpg always requires the agent.
我有gpg 2.1.15。
鉴于代理是预期能够回答查询的守护进程,是什么阻止在本地计算机上运行的其他用户或服务能够访问我的缓存或存储凭据?
好问题...默认情况下,gpg-agent使用套接字,因此从技术上讲,任何正在运行的进程都可以理论上劫持您的密钥。不过,请不要引用我的话。这里概述了gpg-agent的工作方式,希望能让您开始找到真正的答案: https://unix.stackexchange.com/questions/188668/how-does-gpg-agent-work
答案 1 :(得分:1)
根据https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase,为了直接向gpg提供密码-在不运行gpg-agent的情况下-您需要运行以下选项:
gpg --passphrase-fd 0 --pinentry-mode loopback ...
您需要在运行此命令后立即在控制台中提供密码。键入过程中不会显示密码提示,但是您会看到键入的密码。
要在键入密码时隐藏密码,可以将命令包装在stty中:
stty -echo ; gpg ... ; stty echo
我使用GnuPG v.2.4.2进行了测试:杀死gpg-agent,切碎/ usr / bin / gpg-agent,然后按照上述说明运行。效果很好。