我的程序需要在启动后解密加密文件以加载运行所需的数据。用户无法使用此数据。
我不是密码学专家,那么保护硬编码密码和其他用户数据、调试软件和反汇编软件的最佳方法是什么?
我知道这可能是不好的做法,但对我来说是必不可少的(至少目前如此)。
如果还有其他方法可以保护我的数据免受上述 3 的影响,你能告诉我这些是什么吗?
我的程序需要在启动后解密加密文件以加载运行所需的数据。用户无法使用此数据。
我不是密码学专家,那么保护硬编码密码和其他用户数据、调试软件和反汇编软件的最佳方法是什么?
我知道这可能是不好的做法,但对我来说是必不可少的(至少目前如此)。
如果还有其他方法可以保护我的数据免受上述 3 的影响,你能告诉我这些是什么吗?
简短的回答:你不能。 一旦软件在用户的磁盘上,足够聪明和坚定的用户将能够从中提取秘密数据。
如需更长的答案,请参阅security.SE 博客上的“在软件中存储机密” 。
根据我的经验,这类问题的动机通常是以下四个原因之一:
就像 Illmari Karonen 在他的回答中所写的那样,你不能完全按照你的要求去做,这尤其意味着 3 和 4 不能仅通过密码学来解决。
但是,如果您提出问题的原因是 1 或 2,那么您最终会提出您所做的问题,因为您在设计过程的早期做出了一些错误的决定。例如,在 1 的情况下,您不应该从您不完全信任的系统访问受限服务。典型的安全解决方案是引入一个中间层,它是您受限资源的唯一客户端,您可以将其公开。
如果是 2,最好的解决方案通常是在启动时使用完全相同的逻辑来检查您的配置文件(或注册表设置或其他),就像您在用户使用您的首选配置用户界面。如果发现不一致,只需调出配置 UI 并突出显示问题。
保护用户、调试软件和反汇编软件的硬编码密码和其他数据的最佳方法是什么?
向用户请求密码,不要对密码进行硬编码。这是确保安全的唯一方法。
如果您不能这样做并且必须在应用程序中进行硬编码,那么所有的赌注都将被取消。
您可以做的最简单的事情(如果您没有奢侈地做一些只会延迟不可避免的事情)就是将责任委托给系统的用户。
我的意思是明确声明您的软件与它运行的“机器”一样安全。
如果攻击者有权开始对文件系统进行攻击,那么您的应用程序将是用户最不关心的问题