保护用户无法使用的硬编码数据,例如密码短语

时间:2012-03-18 16:28:03

标签: encryption cryptography protection hardcoded

我的程序需要在加密文件启动后解密它才能加载所需的数据。该数据无法供用户使用。

我不是加密专家,那么从用户,调试软件和反汇编软件中保护硬编码密码和其他花絮的最佳方法是什么?

我知道这可能是不好的做法,但这对我来说至关重要(至少目前为止)。

如果有其他方法可以保护我的数据免受上述3的影响,你能告诉我这些是什么吗?

3 个答案:

答案 0 :(得分:2)

简短回答:你不能。一旦软件在用户的磁盘上,一个足够聪明且坚定的用户就能从中提取秘密数据。

要获得更长的答案,请参阅security.SE博客上的"Storing secrets in software"

答案 1 :(得分:0)

  

保护硬编码密码短语的最佳方式是什么?   来自用户,调试软件和反汇编的数据   软件?

请求用户输入密码,不要对密码进行硬编码。这是唯一安全的方法。

如果您不能这样做并且必须在应用程序中进行硬编码,则所有投注均已关闭。

你可以做的最简单的事情(如果你没有奢侈的做一些精心设计的东西,只会延迟不可挽回的)就是把责任委托给系统的用户。 /> 我的意思是明确表示你的软件和它运行的“机器”一样安全 如果攻击者有权启动文件系统,那么您的应用程序将是用户最不关心的问题

答案 2 :(得分:0)

根据我的经验,这类问题往往是出于以下四个原因之一:

  1. 您的应用程序正在连接到受限制的远程服务,例如数据库服务器。
  2. 您不希望您的用户弄乱配置设置,只要它们未经修改就不必保密。
  3. 复制自己软件的保护。
  4. 复制数据保护。
  5. 就像Illmari Karonen在answer写的那样,你不能完全按照你的要求去做,这尤其意味着3& 4无法通过密码学解决。

    但是,如果您提出要求的理由是1或2,那么您最终会问您所做的问题,因为您在设计过程的早期做出了一些错误的决定。例如,如果是1,则不应该从完全不信任的系统访问受限服务。典型的安全解决方案是引入一个中间层,它是受限资源的唯一客户端,并且可以公开。

    在2的情况下,最好的解决方案通常是在启动时加载它们时使用完全相同的逻辑来检查配置文件(或注册表设置或其他任何内容),因为当用户输入时用于检查一致性他们使用您首选的配置用户界面。如果发现不一致,只需打开配置UI并突出显示问题。