在不使用数据库或.xml文件的情况下存储敏感数据的最佳方法



我正在c#中开发一个应用程序,该应用程序使用.xml文件来获取应用程序逻辑内部使用的信息。当应用程序的新版本启动时,将创建一个安装程序(使用Inno setup Compiler(,成功安装该安装程序后,.xml将被放置在应用程序的安装文件中。这个.xml文件包含大约200个对象,每个对象有4个属性,属于敏感数据

我被要求启动该应用程序的客户版本,该版本的要求是删除对该.xml文件的访问或操作,因为它包含客户不应该看到或操作的敏感数据。

我的高级工程师告诉我,只需在源代码中实现列表中的信息,这样就可以删除.xml文件的使用,客户在安装应用程序后就无法操作这些信息,因为它会隐藏在源代码中,但这对我来说似乎真的效率很低,我需要更改应用程序中使用.xml文件的许多逻辑才能实现这一点。

  1. 有没有办法创建应用程序的设置并将此文件隐藏在设置文件中,这样客户就不会对其进行操作?

  2. 如果没有,你能建议我采取什么方法?还是我别无选择,只能硬着头皮干?

如果您想让最终用户更难修改信息,同时仍然保留一个单独的配置文件,不需要更改应用程序本身的代码,您可以对文件进行签名,并让应用程序验证签名。

最简单的方法是计算文件的哈希值和"机密"值。当然,这很难被篡改。但最终,没有防篡改的方法可以防止用户在自己的电脑上操纵数据。这只是关于你想让它变得多么艰难。

更好的方法是使用适当的证书进行签名。应用程序将只知道公钥,并将使用它来验证使用私钥创建的签名,这将永远不会离开开发团队。

从理论角度来看,如果您的程序能够获得数据,那么完全控制运行程序的计算机的用户如果足够努力,也可以获得数据。这意味着你可以让他们感到困难,但你不能让它变得不可能。因此,如果这是你想要实现的,你需要非常清楚这种方法的局限性。

你应该让它变得多么困难?好吧,如果这纯粹是一个商业风险,你应该让它变得足够困难,以至于获取数据的成本大于收益。如果不能以这种方式衡量风险,例如,如果有法律要求你保护数据,那么这还不够好。

在某些情况下,对XML文件进行加密,并将解密密钥深入到用不允许轻松反编译的语言编写的编译程序的逻辑中,这可能就足够了。这可能比简单地将XML数据隐藏在编译后的程序中要好,这正是高级工程师所建议的。但她的建议可能也可以。将程序逻辑从读取外部文件更改为读取程序中的字符串常量应该不会太困难。

相关内容

最新更新