- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
GPGME 使用passphrase_cb
方法从用户处获取密码以进行操作,这需要访问私钥。只能为对称加密覆盖此回调,在所有其他情况下使用默认的 pinentry。
所有这些努力似乎都让人很不舒服,特别是因为 GPGME 是一个 API,应该用于编程 C/C++/... 应用程序。在某些情况下,如果可以将密码短语直接传递给加密/签名函数,可能会更容易(对于想要使用 GPGME 的程序员)。我还看到 OpenPGP(更准确地说是 NetPGP)的其他实现使用回调。
所以我想知道这样做是否有任何特定的安全原因?
最佳答案
从 2.1 开始,GnuPG 将最关键的私钥功能移除到 gpg-agent
中,以减少对最私密的 secret ——私钥的攻击面。
这样的回调不仅会将密码短语暴露给您正在编写的应用程序(这可能意味着比 GnuPG 更大的攻击面),而且 GnuPG 也会知道密码短语。
如果您确实需要控制应用程序的密码输入,您有多种选择。
然后信息流将是:您的应用程序通过 GPGME 调用 GnuPG,GnuPG 从 gpg-agent
请求一些私钥操作,它再次向您的应用程序询问密码。请注意,这仅在您还使用适当的 pinentry 配置启动 gpg-agent
时才有效(您可能必须启动另一个实例,与系统上已经运行的实例分开)。
gpg-preset-passphrase
直接传递密码最重要的用例是在 headless 守护进程中,没有人等待输入密码。 GnuPG 还带来了一个小工具 gpg-preset-passphrase
(在 Debian 和衍生版上,它安装为 /usr/lib/gnupg2/gpg-preset-passphrase
),它也可用于预缓存密码(因此在可配置的时间内不会查询)。
在 GnuPG 2.1 中,添加了另一个选项:在 gpg-agent
中,您可以使用 allow-loopback-pinentry
选项允许 pinentry 环回。在 GnuPG/GPGME 中将附加参数 pinentry-mode
设置为 loopback
应该允许您再次使用 passphrase_cb
处理密码交互。
但是:考虑到这会同时暴露您的应用程序和 GnuPG 的密码,并且可能被证明是一个(可能很小但存在并且可能是不必要的)安全风险。此外,GnuPG 2.1 尚未广泛传播,如果您不控制环境,这可能会成为一个问题。
关于c++ - 为什么 GPGME/GnuPG 使用 pinentry 来输入密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35064312/
我正在尝试编写一个使用 gpg 加密/解密文件的小型 C++ 应用程序。我正在使用 GpgME 库。 我希望能够进行一点行编辑,用户可以在其中输入他想用来解密消息的 key 的密码,而不是弹出 gpg
目前,我在我的系统上使用来自 Xcode 的 Pinentry Mac 来签署 git 提交。为此,我每次等待签署提交时都必须输入我的密码。 看到我的 MacBook Pro 有指纹传感器,我想知道是
尽管我安装了 pinentry,但我仍然收到以下错误: xxxxxxxMacxxxxx:~ MAU$ gpg2 -c --cipher-algo=aes gpg-agent[89931]: can't
我很难设置 pinentry让 Emacs 与身份验证一起工作(比如 github)。使用 GPG 和 pinentry 来签署提交已经有效。我在 emacs 中使用 magit 进行版本控制,每次我
我正在尝试从我拥有该服务器所需公钥的服务器解密文件。 key 环有密码保护,所以当我尝试解密文件时,它会要求我输入密码。 当我们尝试解密文件时,有没有办法通过传递密码来绕过该密码。 我正在使用 gpg
GPGME 使用passphrase_cb 方法从用户处获取密码以进行操作,这需要访问私钥。只能为对称加密覆盖此回调,在所有其他情况下使用默认的 pinentry。 所有这些努力似乎都让人很不舒服,特
我正尝试在 emacs 中使用 emacs 中的 epa 模式和 org 模式,如本 article 所述. 我使用屏幕 session 和 ssh 连接到计算机。因此,我需要将/usr/bin/pi
我正在构建一个 python3 应用程序,它生成一个 GPG key ,要求输入密码并解密/加密文件。我希望每次启动应用程序时都需要输入正确的密码。 目前看来,gpg-agent 在应用程序关闭后仍然
我使用 git-svn 命令行客户端将我的项目同步到 svn 存储库。自从我转移到 fedora 20(我之前在 fedora 17 上),当我与 svn 存储库同步(例如,使用 git svn re
我是一名优秀的程序员,十分优秀!