在这种情况下,将密码安全地存储在机器上



我正试图为我的应用程序找到一种存储用户名和密码的方法(解密后必须以原始形式检索-哈希不是一种选择)。乍一看,我想到了一些简单的加密算法。

然而,大多数加密算法(即使是使用SALT或PEPPER的算法)都存在缺陷,因为对C#可执行文件进行反编译可以很容易地判断SALT和PEPPER是什么,以及如何解密代码。这可以通过混淆代码来解决——然而,最终甚至可能会被破坏。

我意识到我在这里可能会走极端。然而,我的应用程序将被世界各地的大公司使用,安全性非常重要(哦,我也假设对解决方案感兴趣)。

该程序只能在Windows 7或更高版本上运行。

最初,我研究了C#中的ProtectedData类,它使密码对当前用户来说是安全的。但是,我也希望当前程序的安全性(如果可能的话),这样在同一用户上运行的其他程序就无法获取密码。

最后,我意识到Windows7及更高版本在控制面板中有一个凭据管理器,应用程序可以与之交互(C#也可以)。

但是,凭据管理器是否对当前用户以及当前程序安全?同一用户上的其他程序仍然可以访问凭据吗?

如果是,是否存在一种完全保护这些数据的方法?我相信Windows 7的凭据管理器足够安全,但我只是担心其他应用程序可以自由获取我的应用程序的数据。

编辑-可能应该提到的是,我有一个来自StartSSL的代码签名证书,如果有任何用处的话。虽然不确定这会有什么帮助,但也许你有线索。

您试图从谁那里保护密码?

事实是,如果密码存储在本地计算机上,那么有权访问该计算机的人就可以访问它。这是安全性、计算机或其他方面的根本限制。

如果您程序的用户可以访问该密码,那么Windows凭据管理器实际上是最好的解决方案。如果你想让普通的其他软件无法访问密码,那么你可以对其进行加密。但请注意,由于你是在本地解密的,只要付出足够的努力,就可以对解密进行反向工程,无论使用何种方法(即是否使用Windows CM)。

如果你甚至不希望用户能够获得密码,那么就不可能将密码安全存储在本地机器上。您必须想出一些其他访问方式,例如让服务器You控制,根据需要代表用户将密码应用于资源。当然,那么您就有了对用户进行身份验证的问题;如果有人发现了他们的密码,那么他们最终会获得该用户对您试图保护的任何资源的访问权限。

底线是:使用可用的工具,最好是内置的操作系统功能。不要在安全方面投入超过资产价值所能证明的更多精力,并努力重用"官方"安全机制,而不是试图重塑自己的安全机制。

相关内容

最新更新