生成安全的 Windows 用户特定加密密钥以用于凭据加密

Generate a Secure Windows User Specific Cryptographic Key For Use In Credential Encryption

据我所知,VBA Excel doesn't support Windows Credential Manager。所以我想构建一个我自己的凭证管理器的迷你版本。

我有一个应用程序,用户可以在其中输入 username/password 来登录服务。我想以加密方式保存它,以便下次他们尝试登录时,凭据会被缓存(最多 30 天)。

加密是 straight forward,但挑战在于生成只有特定用户才能访问的安全密钥。

我过去所做的(用其他语言)是在服务器上安装带有私钥的证书,然后使用证书中的私钥作为加密密钥。在这里,虽然我无法访问 1000 多台用户计算机,但该应用程序 运行 正在运行,所以这不是一个真正可行的选择。

我很想使用 windows Data Protection,但据我所知,那只是 .NET。这里有什么可行的选择吗?我可以使用用户 SID,但系统上的所有用户都可以访问它并且不安全。我需要一种方法来生成特定于当前登录用户的安全加密密钥。

我想post将其作为评论,但对于评论来说太大了。

VBA于1993年首次与MS Excel 5.0一起推出,之后进行了多次升级。 VBA 6.5 于 2006 年左右与 Office 2007 一起发布。VBA 7.0 于 2010 年左右与 Office 2010 一起发布,但 VBA 7 中没有引入新功能,除了 64 位支持。

如果我没记错的话,Windows Credential Manager 是在 Windows 7 中引入的,我相信它是在 2009 年的某个地方发布的。就像我之前提到的那样,[=] 中没有引入新功能。 =33=] 7.

现在为什么要上历史课?这是因为 VBA 早于 Windows 没有重大升级的凭据,因此没有方法、API 等与 Windows 凭据交互。

就从 VBA 创建 Windows 安全密钥而言,这也是不可能的。而且原因很简单。 VBA 本身并不安全。您编写的任何用于加密或解密的代码都可以在 VBA 编辑器中轻松查看。如果任何人都可以访问该代码,则该人可以轻松地使用相同的代码来绕过安全检查。即使您使用密码保护 VBA,它也很容易被黑客入侵。因此,无法从 VBA 创建 Windows 安全密钥。

在这种情况下(使用 VBA)您的问题的唯一解决方案是 hardware-based 加密。例如,使用 USB 安全密钥或生物识别技术(指纹扫描仪、虹膜扫描仪等)。 USB 安全密钥插入计算机的 USB 端口,可作为额外的安全层。这被银行广泛使用。