如何使用 gpg 命令行验证为明文电子邮件附加的 GPG 签名?

信息安全 电子签名 gnupg
2021-08-21 23:03:58

我收到了一封来自某人的明文电子邮件,其中附有 signature.asc。查看电子邮件的原始来源,它是使用 Apple Mail + GPGMail 发送的。在打开消息时,在 Thunderbird + Enigmail 中读取消息成功显示为GOOD signatureEnigmail 详细信息。文本不是 ASCII 铠装的。

但是,尝试使用gpg结果验证消息BAD signature使用附加的(分离的)签名文件,我尝试了以下输入文件但没有成功:

  • 带有所有标题的完整原始电子邮件(这当然不应该工作,因为邮件服务器在发件人完成撰写和签署邮件后添加标题)
  • 没有电子邮件标题的原始电子邮件文件(电子邮件从From:标题开始)
  • 单独打包的 mime 部分(ascii 部分和 html 部分作为消息输入)
1个回答

偶然发现这封电子邮件让一切变得清晰(以及浏览RFC3156)。

电子邮件是 multipart/signed 类型

multipart/signed body 必须由两部分组成。第一部分包含 MIME 规范格式的签名数据,包括一组描述数据的适当内容标题。

第二个正文必须包含 OpenPGP 数字签名。它必须标有“application/pgp-signature”的内容类型。

签名签署第一部分。第一部分实际上是文本和 html 部分的多部分。我查看的每个电子邮件客户端都没有明确这个层次结构并将其扁平化为三个部分(文本、html、签名)。

仅使用第一个多部分的原始 MIME 文本验证签名已成功验证。