如何为我的插件实现自定义数字签名
How to implement a custom digital signing for my plugins?
在C++应用程序(实际上是一个浏览器插件,但这并不太相关)中,我需要它能够运行通过IPC公开特定接口的外部进程。有点像插件体系结构,但插件是离散的应用程序,而不是DLL等。
有人可以很容易地找到所需的接口并编写一个恶意的"插件",将其托管在他们的网站上,这与恶意的SWF相当,除了SWF是沙盒的。然后,如果安装了浏览器插件的人来到该页面,它会以一种驾车攻击的方式加载并运行恶意进程。
我看到的一个建议是使用签名机制,但我不知道如何实现。请注意,我不是为大众市场而创建,而是为专业用户而创建,所以生产合法插件的公司数量很少。
一种方法是使用像GPG
或OpenSSL
这样的加密库。使用这两个密钥,您可以创建一个公钥/私钥对。您使用私钥对应用程序进行签名。浏览器插件包含用于验证签名的公钥。这些库不是特别容易使用。例如,从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还允许您创建和验证验证验证码签名。
- 如何正确实现和访问运算符的各种自定义枚举器
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- Xcode 4.5.2 libc++ std::bad_cast 实现自定义(字符串)流时
- 如何在Z3中实现自定义简化策略
- 实现自定义非线性最小化,从符号数学到C
- 如何实现自定义 std::streambuf 的 seekoff()?
- 如何实现自定义模板排序功能
- 为c++std容器实现自定义迭代器
- 实现自定义Gtkmm小部件:我应该在虚拟on_*函数中返回什么
- 使用MFC在COleControl中实现自定义接口
- 实现自定义malloc(),可以在c++中跟踪分配位置
- 如何使用STL实现自定义字符串类?
- 实现自定义Main函数
- 这是实现自定义事件处理程序的正确方法吗?
- 为什么 Boost 使用全局函数覆盖来实现自定义验证程序"Program Options"
- 实现自定义const_reverse_iterator给定自定义const_iterator
- 如何为我的插件实现自定义数字签名
- 实现自定义 gtkmm 树模型
- 在c++ 11中实现自定义迭代器
- 如何在c++中实现自定义std集合