固件的签名验证

时间:2018-04-09 10:12:58

标签: binary cryptography reverse-engineering firmware

如何验证固件(.bin文件)是否已签名,是否有可以使用的工具或脚本我理解sigcheck不能与固件一起使用,对此有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

bin文件通常只是一个二进制文件。固件文件没有(单一)标准。毫无疑问,文件内部有结构,但对我们来说,不可能知道它是什么。通常,工具仅适用于特定协议。

RSA签名本身是使用公共指数进行模幂运算的结果。然后将结果转换为几乎与随机无法区分的字节数组。大小具有模数的大小,其大小与密钥大小相同(以字节为单位)。 RSA可以以各种格式使用,例如具有PKCS#1 v1.5填充的RSA或具有PSS填充的RSA;然而输出看起来一样。存在其他签名类型,例如ECDSA签名与RSA完全不同。它们具有不同(较小)的大小,可以是动态和静态大小的。如果需要在资源受限的硬件上检查签名,则ECDSA很有意义。

通常,签名是最后一步计算的,因此.bin文件的最后一个字节通常是签名。如果您很幸运,签名是使用标准执行的,例如符合PGP的签名或符合CMS的签名。对于CMS签名,您可以检查该文件是否包含所谓的ASN.1结构。这些是使用称为BER的东西编码的,可以对其进行解析(例如使用openssl asn1parse -inform BER)。

所以这一切都取决于协议。没有一种工具可以检查某些东西是否已签名,协议过于不同,签名本身就像随机数据。