【发布时间】:2014-08-28 04:58:07
【问题描述】:
我需要将加密算法的加密/解密密钥存储在公共 WPF 应用程序上,任何人都可以免费下载。
显然,我想以安全的方式存储这些密钥,以便用户可能看不到它们。
在我看来,这是不可能的,因为反编译一个 .Net 应用程序非常容易,而且混淆它并没有多大用处。我想不出一个地方来存储这些信息,要么是用户不可访问的,要么是“自然”加密的(比如某种“Windows Vault”,但随后用户可以创建一个假装是我自己的应用程序,不是吗?)
从用户可以访问(编译)代码和(清除)app.config 的那一刻起,我看不到如何在本地存储敏感信息。
我在 IIS 上看到了很多对连接字符串进行编码和保护内容的帮助,但在 WPF 应用程序上却没有。
有没有办法使用 .Net/WPF 安全地存储任意数据?
谢谢!
【问题讨论】:
-
为什么不使用one way encryption (hashing) 来存储您的密码。然后你存储这些。这样一来,即使有人获得了对散列密码的访问权限,解密它们也是 infeasible*。您仍然必须将这些存储在安全的地方,但这比 2 路加密要好
-
我们使用存储在注册表中的加密密钥,并使用 ProtectedData 类 (msdn.microsoft.com/en-us/library/2fh8203k(v=vs.110).aspx) 完成加密。只有可以生成这些加密数据并存储到注册表中的系统管理员才能使用 Entrophy,使用 MSI 安装程序将注册表推送到客户端。在客户端,我们使用 WCF(它从 machine.config 中获取)服务获取熵来解密注册表中的密钥。我知道总有办法破解它,但它比将它存储在 web.config 中更安全。
-
@Liam:我存储的不是密码,而是我想要解密的信息,例如跟踪 ID。
-
@VRK:谢谢,但由于它是一个公共应用程序,用户是管理员(否则他们无论如何都无法安装该应用程序)。
-
您可以使用 MSI 安装程序吗?如果是,那么您可以在安装程序本身中推出初始注册表。
标签: c# .net security desktop-application