在 Windows 8 上使用 MD5 进行代码签名

信息安全 md5 代码签名
2021-09-06 22:38:43

我发现在 Windows 7 和更早版本上报告为正确签名的签名安装程序包在 Windows 8 上的 IE10 中报告为“损坏”。

进一步调查表明,签名是用 MD5 制作的。

虽然微软放弃对 MD5 的支持是完全合理的,但我一直找不到任何关于这一事实的参考资料。

我似乎还记得看到有关 Microsoft 很快会在早期版本中删除对 MD5 的支持的通知,但我也找不到。

我认为 Windows 8 不支持 MD5 是否正确?有人可以参考吗?在 Windows 7 和更早版本中是否也会删除对 MD5 的支持?

2个回答

在 Windows 7 中,代码签名的要求如下:

  • 对于应用程序,首选 SHA1,接受 MD5。
  • 对于驱动程序,需要 SHA1。

在 Windows 8 中,要求更改为:

  • 对于应用程序,SHA1 是必需的,SHA256 是可选的。
  • 对于驱动程序,SHA1 是必需的,SHA256 是可选的。
  • 对于交叉兼容性,Microsoft 支持双重签名,其中负载使用 SHA1 和 SHA256 进行签名在 Windows 7 上,将检查旧的 SHA1 哈希。在 Windows 8 上,将检查 SHA256 哈希。

目前尚不清楚这是对 Flame 的回应,还是只是安全技术的标准进展。

在 Windows 7 中更改要求的问题有两个方面。首先,有数以万计的现有应用程序使用基于 MD5 的证书进行签名。其次,修改内核、代码签名实用程序、Visual Studio 等以反映新要求需要付出很多努力。但是,微软(据说)已采取措施确保没有内部代码签名证书允许 MD5,并已撤销违规证书。

signtool.exeWindows 8 SDK 中包含的拒绝创建 MD5 签名。 signtool sign /fd md5说:

SignTool 错误:指定的算法无法使用或无效。

但是通过其他方式创建的 MD5 签名,如 venerable signcode.exe,仍然有效。即使在 2016 年 1 月1 日弃用 SHA-1 证书后的 Windows 10仍然接受 MD5 签名。

这个47K 的可执行文件(显示一双眼睛跟踪鼠标指针)具有基于 SHA-256 证书的 MD5 签名和 2016 年 1 月 18 日的 SHA-1 时间戳。Windows XP SP3 到 Windows 10 将其视为正确签名的文件,即使它具有 Web 标记。