我想要一个成熟的模型来做到这一点。 假设我想向用户提供程序和敏感数据文件。该程序能够读取存储在数据文件中的任何数据,但不允许用户轻松破坏数据文件。数据文件将通过AES等标准算法进行加密。现在,问题转向如何管理密钥。把密钥放在程序中似乎是一个坏主意,但我还能做些什么呢?显然我不能直接将密钥交给用户。
答案 0 :(得分:5)
没有办法安全,即。真正阻止用户阅读数据。只要他们拥有数据并且他们拥有可以读取它的程序,一个称职的反汇编程序将能够弄清楚程序如何读取它并做同样的事情。或者,更简单的是,他们可以让程序执行它,然后从内存中获取解密版本。
话虽如此,如果您只是想阻止普通用户这样做,那么在源代码中对密钥进行硬编码应该没问题。 :)只是对这提供的保护级别保持现实。
答案 1 :(得分:3)
它必须是纯软件吗?如果没有,您可以查看在硬件设备上进行密钥解密和存储的解决方案,例如:一个USB加密狗。
通过让您的软件从Web服务而不是数据文件中淘汰数据,您还可以防止整个问题。在这种情况下,您可以更严格地控制对数据的访问(即谁获取了多少内容和时间)。这可能适用于您的应用程序,也可能不适用。
否则正如其他人指出的那样,没有已知的好的纯软件解决方案。
答案 2 :(得分:2)
没有100%安全的解决方案,因为在某些时候你必须将密钥加载到内存中才能进行解密/加密,并且一个足够精明的黑客能够捕获它。如果密钥泄露,您可以做的最好的事情就是很难捕获并减少数据暴露(通过尽可能限制访问)。
至于如何使它更安全...你可以有一个组合键,它由存储在程序中的东西和从用户密码派生的东西组成?
答案 3 :(得分:1)
您的感知用户是否已确定?他们有足够的技巧来扭转申请或关键吗?如果用户被认为只是一个普通的桌面用户,你可能会使用一些通用加密来实现部分密钥,只是为了使密钥不明显,除了确定的个人能够反转必须简单的加密密钥和数据的方法。
答案 4 :(得分:0)
DVD约翰的难题,嗯?为什么程序中的密钥不好?你可以拥有一个超级模糊的功能,可以可靠地计算一次。有了反汇编和调试器的人可以在给定足够时间的情况下破解你的密钥,IMO。