【问题标题】:How to protect a signing key?如何保护签名密钥?
【发布时间】:2012-07-05 00:04:21
【问题描述】:

我需要验证设置文件的完整性。该文件是一个 xml 文档。我知道您可以使用this stackoverflow post 中讨论的现成功能。但是,我无法理解如何保护签名密钥。如果我签署一个 xml 文件以作为对其内容的完整性检查,用户可以轻松地反汇编我的可执行文件并获取密钥和/或生成密钥的方式。我有哪些方法可以轻松保护密钥?密钥容器似乎是一种选择,但我看不出它们如何保护密钥和/或用于生成所述密钥的方法。

谢谢!

【问题讨论】:

  • 我们公司确实以这种方式保护配置文件。我们这样做是为了确保没有人可以更改配置文件。然而,我们确实在另一个部门签署了配置文件,并尝试将配置文件和对可执行文件的写入权限分开。如果你不这样做,你所能做的就是设置一个障碍让攻击者跳过。

标签: c# xml encryption encryption-asymmetric integrity


【解决方案1】:

当您将密钥加载到容器中时,您可以指定它是不可导出的。这将有助于保护它,但无论如何您仍需要将文件存储在某个地方,以防万一,例如,您有一台新计算机。

顺便说一句,我确实提到将其标记为不可导出将帮助保护它,而不是保证它的保护。仍然可以提取不可导出的密钥。

唯一可靠的方法是确保没有人可以物理访问计算机。物理访问意味着您可以做任何事情。

在您的情况下,这意味着私钥必须放在安全的地方,因为它是您的数字签名。验证签名的公钥已加载到您的程序中。是否反编译您的代码并提取公钥并不重要,因为它可以用于验证某些内容是否由您的私钥签名。

如果有人不厌其烦地反编译您的代码以规避设置文件的验证,他们只会更改您的代码以跳过验证。

【讨论】:

  • 是的,我就是这么想的。我的问题是我将在使用配置文件时对其进行签名。因此,如果用户决定添加一些他以前没有的设置,程序会重新签署文件。我知道你不能阻止他们这样做。它并没有真正打开攻击向量,我只是想确保用户正在加载他所期望的设置。
  • 那么在这种情况下,为什么不散列文件而不是签名呢?
  • 签名似乎合乎逻辑。我想我可以将文件的哈希存储在一个设置中。这将同样有效。我想我只是在我以某种方式确信自己的哈希不够好之后才去自动签名。
猜你喜欢
  • 2020-07-26
  • 2019-02-04
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 2018-06-30
  • 2019-01-12
相关资源
最近更新 更多