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

标签 c++ security plugins digital-signature browser-plugin

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

有人可以很容易地找到所需的接口(interface)并编写恶意“插件”,将其托管在他们的网站上,类似于恶意 SWF,只是 SWF 是沙盒。然后,如果安装了浏览器插件的人访问该页面,它将以一种偷渡式攻击的方式加载并运行恶意进程。

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

最佳答案

一种方法是使用加密库,如 GPGOpenSSL。使用它们,您可以创建一个公钥/私钥对。您使用私钥签署您的应用程序。浏览器插件包含公钥,用于验证签名。这些库不是特别好用。阅读例如dgst.c 来自 OpenSSL 包。您需要调整它(至少是验证部分)以适应您的插件。有很多 API 需要学习!您可以按原样使用 dgst.c 对文件进行签名。

如果您使用的是 Windows,您也可以以大致相同的方式使用 Windows Crypto API (CAPI),但我对 Windows API 几乎一无所知。

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

关于c++ - 如何为我的插件实现自定义数字签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174833/

相关文章:

c++ - 保证复制省略的替代方法

python - 卸载 netbeans 7.0.1 插件,netbeans 不启动

c++ - 传递对 C++ 中的映射的引用

c++ - 通过 C++ 中的 SOCI/ODBC 的 SQL Server 存储过程

c++ - 如何通过类构造函数访问私有(private)静态成员变量?

asp.net - 爬取页面时如何判断ViewState是否启用了MAC?

maven - 解决 Maven 依赖项中的关键漏洞

security - 任何解决Google 15,000至75,000美元OAuth安全评估的方法

ASP.NET:创建和使用 bin 子文件夹

c# - 识别从插件中的 outlook/电子邮件创建的记录