如何清除我的缓存的GPG密码?

我已经尝试过:
- 使用SIGHUP方法 --> 没有成功 - 在gpg-agent.conf中调整缓存超时时间 --> 似乎这个文件没有被读取,尽管我在gpg.conf中有'use-agent'这一行
我该怎么办?

Ubuntu默认的GPG代理是Seahorse。据我所知,Seahorse不会读取任何gpg-agent.conf文件。所以我想问一下:你的GPG代理是什么?你确定它配置正确吗?你将SIGHUP发送到哪里? - Andrea Corbellini
@AndreaCorbellini 我指的是密码代理程序,即gpg-agent,但我不知道它是否配置正确,因为我不清楚对于gpg-agent来说“正确配置”具体意味着什么...最后,我使用“pkill -SIGHUP gpg-agent”发送了SIGHUP信号。 - Thomas Produit
2建议下面的回答使用gpg-connect-agent确实对seahorse(至少对我来说,在14.04上)有效,而不仅仅是gpg-agent。这意味着在不禁用gnome-keyring的情况下,您应该可以直接使用它。 - Greg
4个回答

对于那些真正使用gpg-agent的人来说,你可以忘记密码短语:

echo RELOADAGENT | gpg-connect-agent

3谢谢!这对于gnome-keyring-daemon也很好用(在14.04上)-我到处都找不到一个简单的“忘记”! - Greg
我收到“ERR 103未知命令”。 - zondo
1非常感谢这个简单而有效的“遗忘”工具。 上面讨论的所有有关如何管理gpg密码缓存的方法都错过了一个根本点,即我们绝不能允许密码首先被缓存。 - user587469
这个实际上在Windows上帮了我很多。谢谢你。 - Paul Williams
1请注意,这并不会从内存中清除您的密码。Gpg-agent会再次提示您,假装它已经忘记了,但实际上并没有。我猜想人们想要清除缓存的密码是为了防止攻击者调用gpg-agent或读取内存,但如果攻击者可以调用gpg-agent(因为您的笔记本电脑已解锁)或获取您的RAM(因为您外出吃午餐),他们也可以直接从内存中获取密码或包装pinentry程序来捕获它。 - Luc
@Luc 不,你清除密码后,应用程序将无法在没有重新输入正确的密码短语的情况下进行身份验证,这将实现此目的。如果攻击者可以物理访问设备,那么你就倒霉了,因为他们可以嗅探内存总线,从而获取你输入的密码短语和加密密钥。如果他们拥有root权限,他们也可以做同样的事情,或者替换gpg-agent二进制文件以发送未加密的密钥,即使你使用了全盘加密(FDE)。即使他们只是破解了你的用户账户,他们也可以轻松捕获你输入的密码短语以及加密密钥。没有任何密码短语清除方式可以保护你免受这种攻击。 - Matija Nalis
@MatijaNalis "你清除密码后,应用程序将无法再进行身份验证",这些应用程序已经在你的设备上运行。我想我们大体上是同意的:你说"即使他们刚刚破解了你的用户账户,他们仍然可以轻易获取到你的密码"。把"他们"替换成"恶意应用程序",情景就一样了。我无法想象出任何情况下"重新加载代理"、发送SIGHUP信号或者等效操作有帮助,因为恶意软件或攻击者无论如何都能够获取到密钥。 - Luc
@Luc,如果我理解你的推理正确的话,你的观点实际上是私钥上设置密码短语本身是无用的概念?因为,如果使用它的程序是恶意的,或者用户帐户被破解,那么无论您提供加密的私钥+密码短语还是未加密的密钥,都无关紧要,对吗?攻击者只需在第一次看到密码短语时将未加密的密钥私下存储以供其不良用途。(使用缓存gpg-agent不会改变问题)。您可能想在security.stackexchange.com上询问有关私钥密码短语用例的问题。 - Matija Nalis
1太好了!即使在Windows上使用Git Bash时,它也能正常工作。 - Antonio

GPG:只需一条命令:
gpg-connect-agent reloadagent /bye

SSH: 对于 SSH 代理,你可能想要这两个:

ssh-add -D    #delete identities
ssh-agent -k  #kill ssh-agent

2我想知道为什么他们没有使用gpg本身来简化这个过程。例如:gpg --clear-password-cache - MaXi32

让我先说,我有完全相同的问题...


您的GPG密钥可能由Gnome Keyring处理,即使gpg-agent正在运行。这个答案提供了一些关于可用选项的详细信息。
另一种方法是禁用Gnome Keyring的GPG组件,以便使用gpg-agent。
  • 你可以通过删除(或将其重命名为除*.desktop之外的其他名称)文件/etc/xdg/autostart/gnome-keyring-gpg.desktop来实现。
  • 有可能你已经拥有了gpg-agent自动启动所需的设置。至少对于我来说,在运行Ubuntu 13.04时是这样的。但是,如果需要的话,可以参考this post中的一些信息来进行配置。
  • 在注销并重新登录后,只需运行gpg-agent,它会响应~/.gnupg/gpg-agent.conf中的设置和SIGHUP信号。
  • 最后,也许明智的做法是禁用Gnome Keyring的SSH组件,因为:
    • 你可能也不希望在整个会话期间解锁你的SSH密钥,并且可能想要使用/配置ssh-agentgpg-agent
    • 有可能你的gpg-agent自动启动配置已经包含了SSH支持(Ubuntu 13.04的默认配置就是如此)

我在处理这个问题时遇到了困难。在Ubuntu 18.04中,gnome-keyring-gpg.desktop文件不存在。 - Linter

gpgconf --reload gpg-agent

这对我来说很有效...希望这回答了你的问题。