如何为我的插件实现自定义数字签名

How to implement a custom digital signing for my plugins?

本文关键字:实现 自定义 数字签名 插件 我的      更新时间:2023-10-16

在C++应用程序(实际上是一个浏览器插件,但这并不太相关)中,我需要它能够运行通过IPC公开特定接口的外部进程。有点像插件体系结构,但插件是离散的应用程序,而不是DLL等。

有人可以很容易地找到所需的接口并编写一个恶意的"插件",将其托管在他们的网站上,这与恶意的SWF相当,除了SWF是沙盒的。然后,如果安装了浏览器插件的人来到该页面,它会以一种驾车攻击的方式加载并运行恶意进程。

我看到的一个建议是使用签名机制,但我不知道如何实现。请注意,我不是为大众市场而创建,而是为专业用户而创建,所以生产合法插件的公司数量很少。

一种方法是使用像GPGOpenSSL这样的加密库。使用这两个密钥,您可以创建一个公钥/私钥对。您使用私钥对应用程序进行签名。浏览器插件包含用于验证签名的公钥。这些库不是特别容易使用。例如,从OpenSSL软件包中读取dgst.c。您需要将其(至少是验证部分)适应您的插件。有很多API需要学习!您可以按原样使用dgst.c对文件进行签名。

如果你在Windows上,你也可以用同样的方式使用Windows Crypto API(CAPI),但我对Windows API几乎一无所知。

另一种方法是从头开始实现签名算法。这也不适合胆小的人。阅读http://en.wikipedia.org/wiki/Digital_signature,选择一个看起来很容易实现的方法(RSA、DSA、ElGamal…),并实现它(签名和验证部分,或者只是验证部分),但要确保它与OpenSSL或GPG兼容,以便您可以使用它们进行签名

DLL和EXE都使用Authenticode技术和X.509证书进行签名。

要使用Windows内置的机制在Windows上验证验证码签名,请使用CryptoAPI的WinVerifyTrust函数。这将要求每个"插件"都使用一些知名CA颁发的证书进行签名(至少Windows是已知的)。

如果你想给插件开发者你自己的证书(让他们在从CA购买证书时省钱),那么你可以使用我们的SecureBlackbox产品的PKIBlackbox包,成为你自己的认证机构。PKIBlackbox还允许您创建和验证验证验证码签名。