0

我们开发了一个 Win32 程序 (=host),它允许第 3 方编写插件。由于某些插件包含有价值的代码(例如,高质量视频标量),第 3 方希望限制他们的插件只能与我们的主机程序一起使用

我们的想法是使用 Microsoft Authenticode 技术对主机进行签名。然后,要求第 3 方执行以下算法来检查主机。(预计第 3 方对算法进行足够的代码混淆)。

  1. 使用 WinVerifyTrust() API 来验证主机的证书是否有效(= 未撤销、未篡改等)。

  2. 验证主体是我公司的证明。

问题是关于步骤(2)。第三方不能简单地检查指纹或序列号,因为主机的数字证书将在证书到期日之后更新。

我的想法是检查部分主题的专有名称,特别是“国家(C)”和“通用名称(CN)”,假设在美国没有公司名称冲突。我们不应该检查其他属性,例如州和城市,因为我们的公司可能会搬家——事实上,一年前我们已经从一个城市搬到了另一个城市。

问题:这是实现目标的好方法吗?

4

1 回答 1

0

虽然该方案是可行的,但可以通过修补插件来相对轻松地规避保护,以便它们忽略签名或完全跳过签名验证。

更重要的是 - 如果您计划拥有多个插件/供应商,您将很难确保所有供应商都正确混淆验证代码。

然后,我会说,将他们的插件仅限于您的应用程序可能违反插件供应商的利益 - 如果他们想要更大的市场,他们可能希望在更广泛的主机上运行相同的插件。

于 2011-03-20T18:29:17.650 回答