我想使用 Windows.Security.Credentials.PasswordVault在我的桌面应用程序(基于 WPF)中安全地存储用户密码。我设法使用这个 MSDN article 访问了这个 Windows 10 API .
我做了一些实验,似乎从一个桌面应用程序(不是 native UWP 应用程序)写入 PasswordVault 的任何数据都可以从任何其他桌面应用程序读取。甚至用 Desktop Bridge 打包我的桌面应用程序技术并因此拥有包标识并不能修复此漏洞。
有什么想法可以解决这个问题并能够安全地存储应用程序的数据以免受其他应用程序的影响吗?
更新:PasswordVault 似乎没有为 DPAPI 添加额外的安全性.此案以否定结果结案。
最佳答案
(这是我对你的帖子的理解)
在使用此类 API 时,没有真正的方法来阻止桌面应用程序之间的数据访问 http://www.hanselman.com/blog/SavingAndRetrievingBrowserAndOtherPasswords.aspx详细介绍它。您可能只想解密您的信息。
内存访问限制很困难,用户执行的代码总是可以被用户检索,因此很难限制这一点。
您是否考虑过使用 Windows 数据保护 API: https://msdn.microsoft.com/en-us/library/ms995355.aspx
直接从源头抓取 DPAPI 是一项易于使用的服务,将使必须为敏感应用程序数据(例如密码和私钥)提供保护的开发人员受益
WDPAPI 使用操作系统和三重 DES 生成的 key 来加密/解密您的数据。这意味着您的应用程序不必生成这些 key ,这总是很好。
您还可以使用 Rfc2898DeriveBytes 类,它使用伪随机数生成器来解密您的密码。它比大多数解密器更安全,因为没有实用的方法可以从结果返回到密码。这仅在验证输入密码而不是再次取回密码时真正有用。我自己从来没有真正使用过这个,所以我无法帮助你。
另请参阅这篇文章,它提供了比我更好的解释。 How to securely save username/password (local)?
如果我在某些方面误解了问题,请告诉我,我会尝试更新答案。
请注意,现代/地铁应用程序没有这个问题,尽管它们仍然可以通过其他方式访问。
关于c# - 从桌面应用程序使用时的 PasswordVault 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45630304/