3

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

是否可以仅使用标准库(如 openssl 和 zlib)实现独立工具来验证 GPG 签名?据我了解,openpgp 由标准密码和散列函数组成。是什么让这变得如此困难以至于没有好的 C 库可以做到这一点?

4

1 回答 1

5

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

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

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

于 2015-07-16T14:42:12.187 回答