【发布时间】:2012-12-18 16:24:30
【问题描述】:
我正在寻找正确的方法来从该可执行文件中验证当前正在运行的可执行文件。 我已经找到了一种方法来计算当前正在运行的文件的 (SHA256) 哈希值。
问题是:我应该在哪里安全地存储这个哈希?如果我将它存储在配置文件中,恶意用户可以计算自己的哈希并替换它。如果我将它存储在可执行文件本身中,它可能会被十六进制编辑器覆盖。
我读到的一个建议是进行非对称加密(或者是解密),但我该怎么做呢?
一个要求是可执行代码在不同计算机上的哈希和加密/解密完全相同,否则我无法正确验证。这些计算机都将运行相同的操作系统,即 Windows XP(嵌入式)。
我已经签署了我所有的程序集,但我需要一些额外的安全性才能成功通过我们的安全目标。
对于那些知道的人,它涉及 FPT_TST.1.3:TSF 应为授权用户提供验证存储的 TSF 可执行代码完整性的能力。
【问题讨论】:
-
如果怀疑执行的可执行文件可能已被编辑,这是否也意味着他们可以删除(nop'd)验证步骤本身?
-
你应该弄清楚为什么强签名是不够的,而不是尝试找到解决它的方法。使用不同的密钥对相同的文件进行两次签名不会比使用一个签名更安全...
-
@AlexeiLevenkov 当然,具有足够访问权限的恶意用户可以简单地在命令行中使用
SN -Vr来禁用它 -
@MarcGravell 我理解这个问题,但这是安全目标所需要的,这就是我需要把它放在那里的原因。我只需要能够指出:看,我们有它,它就在那里,所以它可以从列表中划掉。
-
您不能将校验和存储在可执行文件本身中,因为如果这样做,校验和就会改变。这是递归的。我建议将散列和 RSA 签名的散列放入外部文件中。 RSA 签名阻止用户创建的散列。当然,恶意用户仍然可以 NOP 校验和验证。因此,没有绝对安全的防弹方法。
标签: c# .net hash cryptography