【问题标题】:How to verify GPG signature with OpenSSL如何使用 OpenSSL 验证 GPG 签名
【发布时间】:2015-10-06 00:52:47
【问题描述】:

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

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

【问题讨论】:

    标签: ssl public-key-encryption gnupg openpgp gpgme


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这很有帮助。我希望问题不会那么复杂,因为我不需要加密,只需要签名验证。
    • 这可能确实减少了工作量,但您仍然必须实现消息格式。 gpgv 可能已经做了你想要的。
    • 使用一些正则表达式魔法,基本解析应该不难...... gpgverify 只能作为可执行文件使用吗?我需要绑定...还是有一个我不知道的 libgpgv?
    • 由于 OpenPGP 是二进制协议(ASCII 装甲只是编码),我不会使用正则表达式。您还可以查看pgpdump,这是一个我认为是用 C 编写的 OpenPGP 解析器(和“漂亮的打印机”)。
    猜你喜欢
    • 2020-06-11
    • 2018-02-27
    • 2014-05-04
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多