PGP公钥中“版本:”的目的是什么

信息安全 密钥管理 pgp
2021-08-16 09:55:41

PGP 公钥看起来像

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)

mQGiBEl2HAgRBAC9IZGQE3NRWFoXV7CcVRbo7xMe+nGPRMTOocA0pcv9N67R6CAZ
...
-----END PGP PUBLIC KEY BLOCK-----

我想知道为什么总是包含“版本:”行以及是否可以安全删除。如果解密不依赖于“版本:”行中的信息,为什么还要宣传正在使用的 GPG/PGP 版本和操作系统?

3个回答

您可以安全地删除该行。RFC 4880,OpenPGP没有按要求声明它。

目前定义的 Armor Header Keys 如下:

  • “版本”,它说明 OpenPGP 实现和用于对消息进行编码的版本。
  • [...]

我也找不到任何版本数据包含在二进制版本中的证据,无论是通过阅读 RFC 还是通过使用gpg --list-packets.


要删除它,请使用--no-emit-version. 来自man gpg

   --emit-version
   --no-emit-version
          Force inclusion of the version string in ASCII armored output.   --no-emit-
          version disables this option.

这个版本号在将来某个已知版本的 OpenGPG 将在给定的操作系统上被宣布损坏的情况下很有用。

在收到使用此损坏版本的 OpenGPG 签名或加密的消息后,您将能够决定更改归因于此密钥的信任级别。

另一方面,我认为隐藏密钥生成的原始跟踪信息没有任何真正的优势。

显示版本数据是一个安全漏洞,默认情况下应禁用。这是目前 PGP 中的一个巨大错误,需要核心维护人员尽快解决。