我们正在编写一个程序(在C#或MFC中),其中需要使用我们的一些数据。我们 NOT 希望用户能够以解密的形式访问此数据。我们可以使用类似AES加密的东西,但随后可以轻松捕获密钥。与Windows中的DPAPI相同;在某些时候总会有某种键,甚至是模糊的键,这个键很容易被挑选出来。
还有其他方法可以帮助保护这些数据吗?
有什么建议吗?
答案 0 :(得分:2)
实现这一目标的最简单方法可能是使用某种co-processor;使用受限制的数据将计算卸载到tamper-resistant hardware,并且可能您的用户将无法完成读取数据所需的工作。 (如果您的数据在主内存或CPU中是明文的,他们可以使用strace(1)
,ltrace(1)
,gdb(1)
或其他平台本地调试工具直接读取内存 - 所以请确保明文永远不会离开设备。)
协处理器具有一系列功能:Maxim Java iButton之类的东西可以为您的解决方案提供低功耗和低成本的进入 - 但是低功耗会降低处理速度。像IBM PCIeCC cryptographic co-processor这样的东西有更严格的硬件和电源要求,但是方式可以为你想要执行的任何操作提供更多的处理能力。
如果硬件要求超出了客户的考虑范围,也许您可以与客户达成协议,要么可以访问Internet,要么可以访问某些专用网络,这样您就可以在自己的服务器上托管数据并提供访问权限。通过API。 (想想Wolfram Alpha - 他们为客户提供了大量的策划数据,但它完全存在于他们的服务器上。)
答案 1 :(得分:0)
如果应用程序处于受控环境中,这意味着您已经提供了运行的应用程序和硬件(我认为贸易展示亭不在我的脑海中),那么您可能会有一些非常有趣的选择。 / p>
无论是运行Windows,MacOS还是Ubuntu(或其他东西),您都可以将本地化的MySQL(或其他数据库)服务器一起工作,设置数据库以便加密数据,然后混淆地狱你的脚本/代码(不确定你是在谈论Java / PHP / .Net还是编译的C应用程序,以便在Windows或其它东西上使用。
至少这种方式只有编译或加密的代码存放在机器上,数据库(即使是localhost)之间的链接可以通过SSH加密来保护。
只是在我的头顶上散布一个独特的想法。可能需要更多地充实以适应您的具体情况,但这似乎是一个良好的开端。
<强>更新强>
我重新阅读了你的帖子,并以某种方式浏览了你计划用C#做的事实。如果这是一台共享计算机,本地数据库可能仍然可以工作,您可以在本机上每晚异地备份数据库或通过安全隧道备份数据库,但是仍然可以通过localhost和安全隧道写入数据库。
如果您正在考虑使用iPhone应用程序,您可能需要考虑在现场设置SaaS API,您可以通过无线方式安全地验证和接收信息,但我仍然不确定这是否是预期的“自己安装并使用它”简单的软件,或者如果您在某种受控情况下操作,您可以控制何时/何地/谁使用它。