2014-07-07 69 views
2

我需要在公共WPF应用程序中存储加密算法的加密/解密密钥,可以免费下载给任何人。
显然,我想以安全的方式存储这些密钥,以便用户可能看不到它们。如何将敏感信息存储在.Net/WPF应用程序中?

正如我所看到的那样,这是不可能的,因为反编译.Net应用程序非常容易,而且对它进行混淆并没有太大的作用。我想不出有什么地方可以存储这些信息,这些信息或者不是用户可访问的,或者是“自然”加密的(比如某种“Windows保险库”),但是用户可以创建一个假装成我自己的应用程序,他不会吗?)

从用户访问(编译)代码和(清除)app.config的时刻起,我看不到如何在本地存储敏感信息。

我看到很多帮助来编码连接字符串和保护在IIS上的东西,但没有在WPF应用程序上。

有什么方法可以安全地存储任何数据与.Net/WPF?

谢谢!

+0

为什么不使用[单向加密(哈希)](http://en.wikipedia.org/wiki/Cryptographic_hash_function)来存储您的密码。然后你储存这些。这样,即使有人能够访问哈希密码,它也是[不可行*](http://en.wikipedia.org/wiki/Computational_complexity_theory#Intractability)来解密它们。您仍然必须将这些存储在安全的地方,但这比2路加密更好 – Liam

+0

我们使用存储在注册表中的加密密钥并使用ProtectedData类完成加密(http://msdn.microsoft.com/zh-cn/library/2fh8203k( v = vs.110)的.aspx)。只有系统管理员可以使用Entrophy,系统管理员可以生成这些加密数据并存储到注册表中,使用MSI安装程序将注册表推送到客户端。在客户端,我们使用WCF(它从machine.config中获取它)服务来解密注册表中的密钥。我知道总是有办法破解这个,但它比存储在web.config中更安全。 – VRK

+0

@Liam:这不是我要存储的密码,而是我想解密的信息,例如跟踪ID。 – thomasb

回答

4

简单:你没有。

没有办法做到这一点的工作。没有。永远。所有在几天内破解的复制保护都基于“嘿,我可以隐藏某些东西”。

您可以安全地将用户特定的数据存储在用户的特定文件夹中 - 并将其保留到操作系统以保护这些位置。但是认为你可以在你的应用中隐藏加密密钥 - 基本上:如果没有人聪明地看着它们(或者:没有专门的黑客),你可以隐藏它们。这可能奏效 - 但它是“依靠人们不是真的想找到它”。

+0

是的,这也是我的想法。 – thomasb

5
  1. 不要把它放在应用程序 - “任何人”都可以得到它。

  2. 将秘密(私钥)存储在证书存储区中,以便只有具有适当权限的进程才能访问。请安装一个单独的进程/设置的私钥一部分,以便管理员能做到从安装应用程序分开,让应用程序搜索/一旦查询的证书存储

+0

谢谢,但它是一个公共应用程序,任何人都可以访问它,任何人都应该可以安装它。所以不同的访问权限是不可能的。 – thomasb

+3

如果它是公开的,你不能隐藏它的秘密。您只能隐藏高度受限访问的容器中的秘密,并且任何用户的随机机器都不是这样的容器。使用安全服务器设置SSL并将秘密内容传递给服务器。使用客户端的公钥加密该秘密,以便只有那些有权访问私钥的人才能解密该秘密。 –

1

的信息被存储在用户的机器上,你必须假设他可以访问它;没有办法绕过它。唯一的选择,如果你想让用户不可能访问密钥,就是在远程服务器上进行加密,但如果要加密的数据很大,并不总是一个可行的选择。

+0

是的,这也是我的想法。我无法想象用户无法在他的计算机上访问某些内容的方式,否则我的软件也无法访问。 – thomasb

相关问题