在 C++ 应用程序(实际上是浏览器插件,但这不太相关)中,我需要它能够运行通过 IPC 公开特定接口(interface)的外部进程。有点像插件架构,但插件是独立的应用程序而不是 DLL 等。
有人可以很容易地找到所需的接口(interface)并编写恶意“插件”,将其托管在他们的网站上,类似于恶意 SWF,只是 SWF 是沙盒。然后,如果安装了浏览器插件的人访问该页面,它将以一种偷渡式攻击的方式加载并运行恶意进程。
我看到的一个建议是使用签名机制,但我不知道如何实现。请注意,我不是为大众市场而是为专业用途而创建产品,因此生产合法插件的公司数量会很少。
最佳答案
一种方法是使用加密库,如 GPG
或 OpenSSL
。使用它们,您可以创建一个公钥/私钥对。您使用私钥签署您的应用程序。浏览器插件包含公钥,用于验证签名。这些库不是特别好用。阅读例如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/