如何保护加密密钥

时间:2014-11-15 13:20:36

标签: c# security encryption dll-injection

我有一个将被各种用户使用的应用程序,当用户开始使用该应用程序时,它将在安装它的位置生成一个许可文件(加密),并且每次应用程序运行时它将解密文件,将根据验证结果验证所有参数并更新其中的一些参数,并将加密更新的文件。

这是给痛苦的一个真正的问题,每次应用程序运行时,它都需要加密密钥(AES)来加密和解密,并且密钥在我的.NET dll中是硬编码的。因此,用户可以提取密钥并更改许可证参数以运行应用程序。

所以我关注的是如何保护文件不被篡改? 有什么方法可以将一些重要的许可证参数放在其他位置,而不是将其保存在文件中? 如何确保加密密钥的安全和安全免受欺诈活动的影响? 应用程序完全脱机。

请给我宝贵的建议和见解。

提前致谢

1 个答案:

答案 0 :(得分:0)

无法保护以.net编写的脱机应用程序。你无法合理地隐藏秘密"在别人的机器上。您需要提供一个您控制的位置(即Web服务端点)来存储这些机密。在您的应用程序用户的某个方面或其他方面,您可以通过哪种方式查看其环境中的所有逻辑和所有数据;你给了他们锁和钥匙,只是希望他们没有坚持用钥匙打开锁。

或者,正如本周另一个线程所建议的那样,你可以在VB6中编写你的文件访问逻辑和密钥,并对它进行互操作调用 - VB6可以反编译,但很难。然而,有人可以选择SysInternals并观察您的文件IO发生并推断出您的秘密所在的文件或注册表密钥。如果其AES加密会使他们难以理解,但他们会知道哪个进程正在打开它...所以他们现在有一个目标,他们努力反编译你的代码。破解这一点并非易事,但我也不称之为安全。

阻止用户在自己的PC上访问数据的唯一方法就是不要将其放在PC上。