2011-05-30 63 views
2

在一个C++应用程序(实际上是一个浏览器插件,但这并不太相关),我需要它能够运行通过IPC公开特定接口的外部进程。有点像插件架构,但插件是离散的应用程序,而不是DLL等。如何为我的插件实现自定义数字签名?

有人可以很容易地找到所需的接口并编写一个恶意的“插件”,将其托管在他们的网站上,可以与恶意软件SWF除SWF外是SWF格式的。然后,如果安装了浏览器插件的用户访问该页面,则会加载并运行恶意进程,导致某种路过式攻击。

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

回答

0

一种方法是使用像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这样你就可以使用他们的签名。

0

两个DLL和EXE使用验证码技术和X.509证书签名。

为了验证使用您使用WinVerifyTrust功能内置到Windows机制在Windows的验证码签名CryptoAPI,这将要求每个“插件”使用某些知名CA(至少Windows已知)发布的证书进行签名。

如果您想为插件开发人员提供您自己的证书(为了让他们省钱购买CA证书),那么您可以拿取我们的SecureBlackbox产品包PKIBlackbox,并成为您自己的证书颁发机构。 PKIBlackbox还允许您创建和验证Authenticode签名。