如何使用OpenSSL验证GPG签名



我编写了一个简单的跨平台实用程序来使用gpgme验证GPG签名。然而,gpgme在windows和其他平台(例如osx)上工作得不是很好,它需要安装GnuPG命令行实用程序,这是一个相当严重的依赖。我也研究了其他的openpgp库,比如netgpg,但是这些库的可移植性更差(它实际上必须使用mingw-w64构建)。

是否有可能实现一个独立的工具来验证GPG签名仅使用标准库,如openssl和zlib?据我所知,openpgp由标准密码和哈希函数组成。是什么让这变得如此困难,以至于没有好的C库来做这件事?

OpenSSL不实现OpenPGP格式,不兼容。使用OpenPGP实现,如GnuPG, Bouncycastle(可用于Java/c#的框架)或其他(用于JavaScript的OpenPGP.js,并且有一个Go库)。

虽然OpenPGP使用标准的加密摘要和加密算法,但它具有不同的消息格式,特别是使用自己的CFB模式变体。您必须为OpenPGP消息格式实现解析器并与OpenPGP CFB模式兼容(如果您想支持加密),最后将结果传递给OpenSSL以进行实际的加密。

最后,支持整个信任网络概念,包括完整的OpenPGP规范是一项广泛的任务,需要考虑各种问题([1],[2],…)。在unix世界中,人们似乎对GnuPG和GPGME很满意,它们经过了深入的测试和分析,甚至可以解决非常高级的安全问题(例如,这种侧信道攻击)。新的实现很可能容易受到GnuPG已经解决的类似问题的影响。

最新更新