【问题标题】:In gpg, "decrypting" a signed message without the public key在 gpg 中,“解密”没有公钥的签名消息
【发布时间】:2016-12-17 17:14:19
【问题描述】:

我知道如何使用 gpg 为消息签名或验证来自其他人的签名消息。但我最近注意到,您可以在不访问其公钥的情况下“解密”已签名的消息[尽管您无法验证签名]。

例如,这是一个签名的小消息。

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1

owEBrAJT/ZANAwACAULhWJW/fwKRAax8YgdtZXNzYWdlWFVuX0hlbGxvIFN0YWNr
T3ZlcmZsb3cuCgpZb3UgY2FuIHJlYWQgdGhpcyBtZXNzYWdlLCBldmVuIHRob3Vn
aCB5b3UgZG9uJ3QgaGF2ZSBteSBwdWJsaWMga2V5LiBIb3cgZG9lcyB0aGF0IHdv
cms/CokCHAQAAQIABgUCWFVuXwAKCRBC4ViVv38CkXl6D/oCvgOGKFx7c0IDAI9q
2wsj35bapllGlxCRK5/Z8sYqM2RpcV+//wArozMTndFj60ZevMIrPYyWEUyKYS6l
kgq6euD2hbcoy/bcP/3z51K3zCtXby4/CKgx6E1ecC94iO89hVoYQkLWtgRWiL8Z
wfGWgr8X0MaGzsU5q/SchJfZj5ox32JN0S8Iqfqk+xJe2CdQ4KRpbS3M5I3u8/yX
E5ETUeO3aFPwmrBysJysGozWatoiDlMvuiLfnW+Qs4DkEpSRxOw2Sx+ufE2wmWlJ
+5Q4OJiEL6TmJ+Di201CHDGFPWVkrGDioMt6x07vyyiW6X2k4vmIjbFL9vtypUfF
4VzzCWRX9BTCVZZo4ULUmkNznF1IkYJ03TlEFqfTrQ6Jq3SeqlzjGY3I4LJ1a9cL
eobIECLFLqTmOmXM5oC/38V2kNA+/NoSNkw+H78sIlfQ8919JktVG+oa6mEP2OQ8
7k3W7nSpcKugGYDXBB5HQa8lPq1lgI9H+j05pCAhoNnff6Ynl223ycva0xq5wOs/
mjViRWDn+RUebp3KcN/PW7Bkf9RsKt/sPJl2IPdDwdaBibUkhIEKfWVpaOd9rlK6
06/bD+momYpXSlmE/eYh+pf8aIj2R+7Ciz8fAqrTU2hPSWoi2Ne/ISwLBJS4wmRZ
OnHYDOXulQBor1K+VgKyYclC2Q==
=5/kF
-----END PGP MESSAGE-----

与许多签名消息不同,此消息不是明文签名的。我原以为如果没有访问此消息的公钥,就无法读取它,更不用说验证它了。

但是如果在这条消息上使用gpg --decrypt,它就能够产生明文版本。或者,如果您将Keybase 之类的服务用于 gpg,那么 Keybase 也能够生成明文。到底是怎么回事?

第一个想法是公钥以某种方式包含在消息中,但似乎这不是真的。包括公钥的指纹,虽然这不足以解密消息,对吧?

【问题讨论】:

    标签: cryptography digital-signature gnupg


    【解决方案1】:

    带有--sign --armor 的 GPG 生成 base64 编码(更准确地说是Radix-64-encoded)输出,其中消息正文仍然可以通过简单地对输出进行 base64 解码来读取。

    所以我想另一种说法是消息是编码但未加密。

    要查看,请通过任何 base64 解码器(例如,some online one)运行问题中的 PGP 消息。

    因为消息没有加密,而只是签名,所以不需要密钥来解密它。这只是一个签名和一些文字包裹在一起。所以 GPG 不需要密钥就可以解包。

    这里的“包装”一词只是简写。这里有更详细的解释:

    因此,如果收件人想要根据签名检查消息文本,他们只需要密钥。他们不需要密钥来阅读消息。他们只需要 GPG 或了解如何解码消息格式的 OpenPGP Message Format standard 的其他一些实现。

    就加密而言,--signed 消息与使用--clearsign 签名的消息没有区别。两者都没有加密。唯一的区别是,对于使用--sign 签名的消息,收件人需要使用GPG 来解开签名中的文本,而对于使用--clearsign 签名的消息,收件人可以在不需要GPG 的情况下看到消息文本。

    【讨论】:

      【解决方案2】:

      除了已接受的答案之外,即使消息已加密 - 也将使用您的公钥进行加密,并且由于您拥有私钥,因此您可以对其进行解密。签名和验证服务的唯一目的是“证明”谁向您发送了消息。如果您不在乎它来自谁,您仍然可以通过忽略签名来解密发送给您的任何 PGP 消息 - 您只是无法确定它来自您认为它来自谁。

      【讨论】:

        猜你喜欢
        • 2020-02-12
        • 2022-06-14
        • 2017-09-16
        • 2015-04-03
        • 2018-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多