对二进制文件进行签名(不是代码签名)

本文关键字:代码 二进制文件 | 更新日期: 2023-09-27 18:36:08

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

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

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

反之亦然,读取签名字节并根据签名的公钥验证哈希。

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

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

对二进制文件进行签名(不是代码签名)

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

然后,

您阅读此单独的文件,验证其个人签名,然后验证其内容中列出的每个文件的哈希值。您可以使用内置于窗口中的目录文件(使用 MakeCat 和 SignTool 创建它们)或按照相同的过程创建自己的目录文件。

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

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