繁体   English   中英

如何在分布式 Windows 应用程序之间共享机密而不将其保存到程序集?

[英]How to share a secret between distributed Windows applications without saving it to the assembly?

我有一个分布式 Windows 应用程序 - 多个 IIS 网站和不同机器上的 Windows 服务。

我需要加密敏感的用户数据(如第三方 API 凭据),然后解密以在应用程序中使用它。

此加密的目标 - 防止对数据库和文件系统具有受限访问权限(例如只读访问)的用户能够访问敏感的仅限管理员的凭据。

显然,我需要我的应用程序共享一个公共秘密(私钥),以便能够在一个应用程序中加密并在另一个应用程序中解密。

我正在考虑将此密钥作为安装程序的一部分分发的选项,但这种方法会使安装程序本身变得敏感。 由于它们是通过不安全的“业务渠道”分发的,我想避免它。

我认为我正在寻找的东西 - 是我的安装程序上的签名,它将被目标 Windows 机器检查,这将使我能够访问内置机制来加密-解密数据。 类似于ProtectedData.Protect ,但DataProtectionScope不限于用户或机器。 理想情况下,它应该适用于公司。

我有一些新的想法,所以它已经可以算作一个答案(虽然不是最终的解决方案)。

如果我在安装过程中生成新的公钥/私钥对,然后将其存储在机器上,它将为一台机器完成这项工作。 现在的问题是如何在不同机器上的应用程序之间安全地交换这个密钥。

较旧的加密 API 文档有此引用:

如果各自的 CSP 可以直接通信,这会更容易,但他们不能。 由于 CSP 无法通信,因此必须从一个 CSP 导出密钥,传输到目标应用程序,然后导入目标 CSP。 如果通信路径不受信任,此过程会变得更加复杂。

较新的CNG 文档有这句话:

您可以使用 CNG 导入和导出对称密钥和非对称密钥。 您可以使用密钥导出和导入功能在机器之间移动密钥

所以看起来 Windows 机器之间的信任转换是安装过程的一部分。 比如安装后可以建议用户导出私钥,然后在slave安装过程中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM