Cryptography 在gpg中,“;“解密”;没有公钥的已签名消息

Cryptography 在gpg中,“;“解密”;没有公钥的已签名消息,cryptography,digital-signature,gnupg,Cryptography,Digital Signature,Gnupg,我知道如何使用gpg对消息进行签名或验证来自其他人的签名消息。但我最近注意到,您可以“解密”已签名的消息,而无需访问其公钥(尽管您无法验证签名) 例如,这里有一个小的签名消息 -----BEGIN PGP MESSAGE----- Version: GnuPG v1 owEBrAJT/ZANAwACAULhWJW/fwKRAax8YgdtZXNzYWdlWFVuX0hlbGxvIFN0YWNr T3ZlcmZsb3cuCgpZb3UgY2FuIHJlYWQgdGhpcyBtZXNzYWdlLC

我知道如何使用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
,它就能够生成纯文本版本。或者,如果您使用类似于for gpg的服务,那么Keybase也能够生成纯文本。到底发生了什么

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

GPG with
--sign--armor
生成base64编码(更准确地说)输出,其中消息体仍然可以通过简单的base64解码输出来读取

所以我想另一种说法是,信息是经过编码的,但不是加密的

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

因为消息不是加密的,而是经过签名的,所以不需要密钥来解密它。它只是一个签名和一些文字包装在一起。所以GPG不需要密钥就可以打开它

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

  • 每个PGP消息都包含一组
  • 对于
    --sign
    输出,GPG对包含(1)a的消息进行编码,该消息包含(2)a
  • --decrypt
    ing
    --sign
    输出时,GPG只是对其进行解码;它对文本数据包部分进行解码以获得(未加密的)消息体,对签名包部分进行解码以获得签名
因此,只有当收件人希望对照签名检查消息文本时,才需要密钥。他们不需要钥匙就可以阅读信息。他们只需要GPG或其他一些理解如何解码消息格式的实现

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

使用
--sign--armor
的GPG生成base64编码(更准确地说)通过简单地对输出进行base64解码,消息体仍然可读的输出

所以我想另一种说法是,信息是经过编码的,但不是加密的

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

因为消息不是加密的,而是经过签名的,所以不需要密钥来解密它。它只是一个签名和一些包装在一起的文本。所以GPG不需要密钥就可以打开它

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

  • 每个PGP消息都包含一组
  • 对于
    --sign
    输出,GPG对包含(1)a的消息进行编码,该消息包含(2)a
  • --decrypt
    ing
    --sign
    输出时,GPG仅对其进行解码;它对文本数据包部分进行解码以获得(未加密的)消息体,而签名包部分则获得签名
因此,收件人只有在希望对照签名检查邮件文本时才需要密钥。他们不需要密钥来读取邮件。他们只需要GPG或其他理解如何解码邮件格式的实现


就加密而言,
--sign
加密的邮件和用
--clearsign
签名的邮件没有区别。两者都没有加密。唯一的区别是,对于用
--sign
签名的邮件,收件人需要使用GPG从签名中打开文本,而对于用签名的邮件e> --clearsign,收件人无需GPG即可查看邮件文本。

即使邮件已加密,也可以使用您的公钥进行加密,并且由于您拥有私钥,因此您可以对其进行解密。签名和验证的唯一目的是“证明”是谁向您发送了这些信息年龄。如果你不在乎它来自谁,你仍然可以通过忽略签名来解密发送给你的任何PGP消息-你只是不能确定它来自你认为它来自谁。

更进一步地说,即使消息是加密的-它将使用你的公钥来解密,而且因为你有私钥,你可以解密pt it。签名和验证的唯一目的是“证明”是谁发送给你的消息。如果你不在乎消息来自谁,你仍然可以通过忽略签名来解密发送给你的任何PGP消息-你只是不能确定它来自你认为来自谁