为什么 GnuPG 仅在签名时要求我输入密码?

为什么 GnuPG 仅在签名时要求我输入密码?

在我的 Mac 上,我最初使用 homebrew 安装了 GnuPG。

然后我发现了 GPGTools 并开始使用它,因为它更加用户友好(操作系统热键,例如,我可以轻松地在电子邮件中使用加密)。

我没有使用gpg通过 Homebrew 获得的密钥进行任何设置。我使用 GPGTools 设置了我的身份。

最终(过了一段时间),我发现即使没有选择“保存在钥匙串中”复选框,在所有四个操作(加密、签名、解密、验证)中,只有签名步骤需要我的密码。

我知道它的工作方式是我需要使用我的私钥进行签名和解密操作。因此,令我烦恼的是,我处于签名总是需要密码而解密从来不需要密码的状态(在我第一次输入密码之后)。

一旦我去更新~/.gnupg/gpg.conf添加no-use-agent并杀死它gpg-agent,它就会正确地让我输入签名和解密的密码。

gpg-agent我的问题是,当它仍在运行时,它的功能是什么,可以保存我的密码,但是仅有的用于解密而不是签名?

答案1

您提到的四种操作并非全部都需要输入密码,只有使用私钥的操作才需要输入密码:解密和签名。加密和验证作为解密和签名的对应部分,仅使用公钥,公钥不以加密(受密码保护)的方式存储。

有些人更喜欢将密码缓存起来以解密加密消息,但如果要签名消息,则始终查询密码。因为他们认为伪造但正确签名的消息比攻击者解密的消息更危险,或者因为他们想防止意外签名消息。

gpg-agent知道几个选项来微调其缓存行为,其中包括--default-cache-ttl定义多久密码被缓存,并且--ignore-cache-for-signing,这会阻止 GnuPG 以任何方式请求密码进行签名。

man gpg-agent

--ignore-cache-for-signing

此选项将让 gpg-agent 在所有签名操作中绕过密码缓存。请注意,还有一个每个会话选项来控制此行为,但此命令行选项优先。

--default-cache-ttl n

将缓存条目的有效时间设置为 n 秒。默认值为 600 秒。每次访问缓存条目时,条目的计时器都会重置。要设置条目的最大生存期,请使用max-cache-ttl

很可能您设置ignore-cache-for-signing~/.gnupg/gpg-agent.conf不是默认设置。

相关内容