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