【问题标题】:Secure way to encrypt a file that can be used on other computers加密可在其他计算机上使用的文件的安全方法
【发布时间】:2012-12-31 06:53:46
【问题描述】:

假设我的程序是防病毒程序。 还可以说我有一个名为“Signatures.dat”的文件。它包含要扫描的病毒列表。 我想加密该文件,使其可以通过任何计算机上的防病毒软件打开,但用户无法看到该文件的内容。

我将如何完成这项任务?

我正在研究像 DPAPI 这样的东西,但我认为这在我的情况下不起作用,因为它基于用户的设置。我需要我的解决方案是通用的。

我有一种加密方法,但是我不确定如何存储密钥。 我知道将它存储在我的代码中确实不安全,所以我现在真的不确定该怎么做。

【问题讨论】:

  • 如果两个程序在同一台机器上运行,则不可能有一个文件可以被一个程序解密,但不能被另一个程序解密。解决方案1:不要将文件交给用户;提供某种网络服务,这样至少程序的某些部分不会在用户的机器上运行。解决方案 2:不加密文件,但对其进行足够的混淆,以使用户对去混淆它失去兴趣。

标签: c# visual-studio-2010 security encryption hash


【解决方案1】:

您希望用户的计算机能够读取该文件,并且您希望用户的计算机无法读取该文件。如您所见,这是一个矛盾,无法解决。

您正在实施的基本上是一个 DRM 方案。如果不使用 TPM(不,这实际上行不通,甚至不要考虑它),您根本就无法使其安全。您可以使用混淆来尽可能难以对其进行逆向工程并检索密钥。您可以将部分密钥存储在服务器上并在线检索(基本上就像 EA 对他们的游戏所做的那样)等,但您可能只会让您的产品难以为合法用户以及任何真正 希望仍然能够获得密钥,从而获得文件。

【讨论】:

    【解决方案2】:

    在您的示例中,您是在尝试验证文件的完整性(以确保它没有被修改),还是隐藏内容?

    如果您试图隐藏内容,那么最终您不能这样做。

    如果您想验证文件未被修改,则可以通过哈希来执行此操作。您似乎没有混淆这两个用例,但有时人们认为您使用加密来确保文件没有被篡改。

    您最好的选择可能是同时使用这两种方法 - 加密文件以阻止随意浏览器,但要知道这并不能真正阻止任何有足够时间的人。然后使用您的服务器验证文件的哈希值(使用 https,并确保您验证证书指纹)。即使有人破解了您的加密,这将确保文件未被修改。

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2013-10-20
      • 2013-03-04
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多