如何使用 OpenSSL 验证 GPG 签名
How to verify GPG signature with OpenSSL
我编写了一个简单的跨平台实用程序来使用 gpgme. However gpgme doesn't work very well on windows and on other platforms (e.g. osx) it requires GnuPG command line utilities installed which is a pretty heavy dependency. I looked into other openpgp libraries as well such as netgpg 验证 GPG 签名,但它们的可移植性更差(它确实必须使用 mingw-w64 构建)。
是否可以实现一个独立的工具来仅使用 openssl 和 zlib 等标准库来验证 GPG 签名?据我了解,openpgp 由标准密码和哈希函数组成。是什么让这件事变得如此困难,以至于没有好的 C 库可以做到这一点?
OpenSSL 没有实现 OpenPGP 格式并且不兼容。使用 OpenPGP 实现,如 GnuPG、Bouncycastle(框架可用于 Java/C#)或其他(OpenPGP.js 用于 JavaScript,并且有一个 Go 库)。
虽然 OpenPGP 使用标准的密码摘要和加密算法,但它有不同的消息格式,尤其是使用它自己的 CFB mode variant。您必须为 OpenPGP 消息格式实现解析器并与 OpenPGP CFB 模式兼容(如果您想支持加密),最后将结果传递给 OpenSSL 以进行实际加密。
最后,支持包括完整 OpenPGP 规范在内的整个信任网概念是一项广泛的任务,需要考虑各种问题 ([1], [2], ...). In the unix world, people seem to be happy enough with GnuPG and GPGME, which are deeply tested and analyzed for even very advanced security issues (for example, this side channel attack)。新的实现很可能容易受到 GnuPG 已经解决的类似问题的影响。
我编写了一个简单的跨平台实用程序来使用 gpgme. However gpgme doesn't work very well on windows and on other platforms (e.g. osx) it requires GnuPG command line utilities installed which is a pretty heavy dependency. I looked into other openpgp libraries as well such as netgpg 验证 GPG 签名,但它们的可移植性更差(它确实必须使用 mingw-w64 构建)。
是否可以实现一个独立的工具来仅使用 openssl 和 zlib 等标准库来验证 GPG 签名?据我了解,openpgp 由标准密码和哈希函数组成。是什么让这件事变得如此困难,以至于没有好的 C 库可以做到这一点?
OpenSSL 没有实现 OpenPGP 格式并且不兼容。使用 OpenPGP 实现,如 GnuPG、Bouncycastle(框架可用于 Java/C#)或其他(OpenPGP.js 用于 JavaScript,并且有一个 Go 库)。
虽然 OpenPGP 使用标准的密码摘要和加密算法,但它有不同的消息格式,尤其是使用它自己的 CFB mode variant。您必须为 OpenPGP 消息格式实现解析器并与 OpenPGP CFB 模式兼容(如果您想支持加密),最后将结果传递给 OpenSSL 以进行实际加密。
最后,支持包括完整 OpenPGP 规范在内的整个信任网概念是一项广泛的任务,需要考虑各种问题 ([1], [2], ...). In the unix world, people seem to be happy enough with GnuPG and GPGME, which are deeply tested and analyzed for even very advanced security issues (for example, this side channel attack)。新的实现很可能容易受到 GnuPG 已经解决的类似问题的影响。