签署二进制文件(不是代码签署)

Signing binary files (not code signing)

有没有办法对二进制文件进行签名?我想签署我的 zip 文件以防止它们被修改(以防止安装恶意软件)。

签署XML 相当容易,但我不太确定二进制文件。这可能吗?关于这件事,我能找到的只有代码签名(这不是我想要的)。购买昂贵的证书没有用,只是为了确保更新文件在安装时不被修改。

我想我必须这样工作:散列文件,生成密钥对(可能使用散列)然后将签名字节附加到文件。

反之亦然,读取签名字节并根据签名的 public 密钥验证散列。

但我觉得没那么简单。我是否必须考虑某些事情(例如您需要规范化的 XML)?

我不一定需要代码,但需要一些关于该过程的详细解释(任何能够彻底解释的资源也可以)。

在处理任意二进制文件时,您无法修改它们的内容,因此如果您想对它们进行签名,您需要使用一个单独的外部文件,其中包含您要签名的文件的哈希值,并且还对自身进行签名以防止本身不被修改。

然后您读取这个单独的文件,验证其个人签名,然后验证它在其内容中列出的每个文件的哈希值。您可以使用 Catalog Files built in to windows (using MakeCat and SignTool 创建它们)或按照相同的过程创建您自己的。

因为您只是分发更新,并且如果允许您假设加载更新的程序未被修改,则您不需要"buy" 证书。您可以创建自己的 "private CA",在更新程序中分发该 CA 的证书,然后使用该私有 CA 的证书来验证目录文件。

我不确定你说的 "binary file" 是什么意思,但如果你谈论 PE 格式(Windows 二进制可执行文件),你可以生成自己的签名(加密哈希)并将其放入PE 文件与 Windows authenticode 证书位于同一位置。这是进行此类修改的开源工具: http://blog.didierstevens.com/programs/disitool/