我编写了一个简单的跨平台实用程序来使用gpgme验证GPG签名。然而,gpgme在Windows和其他平台(例如osx)上运行得不是很好,它需要安装GnuPG命令行实用程序,这是一个相当重要的依赖。我查看了其他openpgp库,例如netgpg,但这些库的可移植性更低(它实际上必须使用mingw-w64构建)。
是否可以使用独立工具来仅使用openssl和zlib等标准库来验证GPG签名?据我所知,openpgp由标准密码和散列函数组成。是什么部分使得这么困难,以至于没有好的C库可以做到这一点?
答案 0 :(得分:2)
OpenSSL未实现OpenPGP格式且不兼容。使用OpenPGP实现,如GnuPG,Bouncycastle(可用于Java / C#的框架)或其他(OpenPGP.js用于JavaScript,以及Go库)。
虽然OpenPGP使用标准的加密摘要和加密算法,但它具有不同的消息格式,尤其是使用自己的CFB mode variant。您必须同时实现OpenPGP消息格式的解析器并与OpenPGP CFB模式兼容(如果您想支持加密),最后将结果传递给OpenSSL以进行实际加密。
最后,支持包括完整OpenPGP规范在内的整个信任网络概念是一项广泛的任务,需要考虑各种问题([1],[2],...)。在unix世界中,人们似乎对GnuPG和GPGME感到高兴,GnuPG和GPGME经过深度测试和分析甚至是非常高级的安全问题(例如,this side channel attack)。新实现很可能容易受到GnuPG已解决的类似问题的影响。