我有一个私有 GPG 密钥和一个运行 Windows 的虚拟桌面 (VDI),我在上面进行开发。我必须进行身份验证才能连接到 VDI,并且我以自己的用户身份登录到 VDI。我可以安全地将我的私钥传输到 VDI,但这仍然需要至少输入一次 GPG 密钥的密码(直到缓存)才能使用它。每次我断开连接时,VDI 都会重新启动,因此缓存只能持续一天。(我正在尝试设计一个供整个团队使用的流程——这种重复的身份验证将被视为一种倒退,并且很难推销。唯一的替代方案是自行开发的身份验证——显然不是理想的选择。)
我可以利用 Windows 身份验证来“通过” GPG 身份验证吗?
如果我的 GPG 密钥的密码与我的 Windows 密码相同,我会非常满意。如果没有某种工具可以做到这一点,我相信我可以设计一个过程来使两者保持同步。坦率地说,我只是不知道我要用 Windows 身份验证方法做什么,也不知道从哪里开始。我本来希望对此有一些粗略的开箱即用的解决方案,但我怀疑我在搜索中使用的语言不正确。
答案1
我完全可以满足于我的 GPG 密钥密码与我的 Windows 密码相同。如果没有一些工具可以做到这一点,
不,那没什么用。Windows 不提供 GPG 或其他(普通)软件任何访问您的登录密码。事实上,如果某个程序能够访问 Windows 记住的登录凭据,那么大多数地方都会认为这是一个重大的安全漏洞(例如,参见 Credential Guard 的必要性)。
应用程序使用的密码应独立,并且仅通过 Credential Manager API 存储,或使用 DPAPI 加密,或至少存储在 EFS 加密文件中(在这三种情况下,加密密钥都受您的登录密码保护)。不过,缺点是任何应用程序(而不仅仅是 GPG)都可以访问它们。
全球公共利益团体松树入口应用程序(显示密码弹出窗口的应用程序)至少在 Linux 上具有将密码保存在操作系统凭据管理器(即 libsecret)中的能力。如果您正在使用 Gpg4Win 或类似程序,那么向 Windows 版本的松树入口。
(你可以编写自己的 pinentry,例如这个pinentry-wsl-ps1。
更安全的做法是将签名/解密请求传递给仍存储在本地计算机上的私钥(类似于 ssh-agent 的工作方式)。通过远程桌面,这本身就是可能的,而且对于使用 Windows 加密 API(CAPI 和 CNG)的智能卡和软件来说几乎完全透明。
缺点是,你需要一张智能卡才能使用此功能。例如,本地连接的 Yubikey NEO可能被 GPG 检测到守护进程在远端。