7

我有一个程序附带一个数据文件,我不希望最终用户直接阅读。虽然它在用户的硬盘上,但它始终是加密的(即使我的程序正在使用它)。

但是,我不能在安装程序中包含数据文件,因为它们很容易提取。我已经尝试过加密功能,但它们似乎不太正常。

所以我试图找到一种分发文件的方法,以便用户在分发时无法读取它。我想到了各种方法来通过 HTTP 以加密形式通过 PHP 下载文件,但是如果不发送加密密钥就很难做到这一点。更不用说,我在 HTTP 问题上不是很有经验。

我已经提出了一些解决这个问题的想法,但是它们要么不起作用,要么非常复杂。我宁愿想出一个不太复杂的解决方案。

这不必太安全,但它应该能够抵抗 HTTP 嗅探器。实现这一目标的最佳方法是什么?

4

1 回答 1

3

纯粹在软件中做到这一点基本上是不可能的。如果您在用户机器上运行的程序可以读取它,那么在用户机器上运行的另一个程序可以读取它;并且用户可以控制该其他程序,并提取文件的内容。

你可以让它变得困难;人们通常将此功能称为 DRM,一些 DRM 方案最终难以破解。如果您使用专门的硬件来处理解密并且不允许任何非安全组件访问数据,它们会变得更强大,也更难以破解。但最终,总有办法解决它;专门的用户始终可以将逻辑分析仪连接到适当的总线并从中读取数据。

如果你真的想发疯,你可以内置防篡改硬件;本质上是具有内置自毁功能的硬件,因此如果用户试图打开计算机,它会破坏数据。这是一种相当不利于用户的行为,但在某些情况下是必要的(带有您不希望敌人能够获得的加密密钥的卡)。

但是,所有这些都非常困难且昂贵,并且使您的用户的生活更加困难。如果某个地方有一个小洞,一个人可以破解,那么他们可以提取数据并将其发布到某个地方;没关系,大多数人都很难绕过,只要一个人可以,游戏就可以了。

当然,所有这些基于硬件的机制都要求您的用户拥有支持它们的专用硬件;如果您正在做一个纯粹的基于软件的解决方案,那么游戏已经开始了。用户只需将调试器指向程序的内存,并在您读取文件时读出文件的内容。

所以你可能应该重新评估你是否需要这样的功能。这些数据真的那么敏感吗?如果是这样,您是否可以控制它,并要求该软件通过 Internet 与您的服务器通信,该服务器为它提供的功能提供网关?

如果您提供有关您的用例的更多信息,我们可能能够为您的特定问题提供更好的解决方案。例如,如果您只想保护临时用户,您可以对其进行加密,并混淆解密它的密钥和代码。这不会提供太多保护,但它可以防止某人通过浏览内容来查看内容。如果它用于许可,您可能会考虑使用安全加密狗或许可服务器,您的软件会使用它进行检查。但是没有任何方法是万无一失的。最后,如果您尝试在最终用户的机器上处理这些数据,他们将能够从您的流程中提取数据。

于 2012-12-19T05:16:10.207 回答