我需要在公共WPF应用程序中存储加密算法的加密/解密密钥,可以免费下载给任何人。
显然,我想以安全的方式存储这些密钥,以便用户可能看不到它们。
正如我所看到的那样,这是不可能的,因为对.Net应用程序进行反编译非常容易,并且对它进行模糊处理并没有太大作用。我想不出存储这些信息的地方,这些信息要么不是用户可访问的,要么是“自然”加密的(就像某种“Windows保险库”一样,但是用户可以创建一个假装是我自己的应用程序,不是吗?)
从用户访问(已编译)代码和(清除)app.config的那一刻起,我就看不到如何在本地存储敏感信息。
我看到很多帮助来编码连接字符串并保护IIS上的东西,但在WPF应用程序上没有。
有没有办法用.Net / WPF安全存储任意数据?
谢谢!
答案 0 :(得分:5)
简单:你没有。
没办法做到这一点。没有。永远。所有在几天内破解的复制保护都基于"嘿,我可以隐藏某些内容"。
您可以安全地将用户特定数据存储在用户的特定文件夹中 - 并将其留给操作系统以保护这些位置。但是你可以认为你可以在你的应用程序中隐藏加密密钥 - 基本上:如果没有人聪明地看着它们,你可以隐藏它们(或者:没有专门的黑客)。这可能有用 - 但它依赖的是那些不想真正想要找到它的人。
答案 1 :(得分:5)
不要把它放在应用程序中 - '任何人'可以接受它。
将机密(私钥)存储在证书存储区中,以便只有具有相应权限的进程才能访问。安装私钥是一个单独的进程/设置的一部分,以便管理员可以做到这一点,除了安装应用程序并让应用程序搜索/查询证书存储
答案 2 :(得分:1)
只要信息存储在用户的机器上,您就必须假设他可以访问它;没有办法绕过它。如果您希望用户无法访问密钥,唯一的选择是在远程服务器上进行加密,但如果要加密的数据很大,则它并不总是可行的选项。