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