从 PyPI 中移除 PGP

如果您是目前正在上传签名的用户,您的软件包上传将继续成功,但任何 PGP 签名将被静默忽略。如果您是目前正在下载 PGP 签名的用户,现有签名应该继续可用1,但不会提供任何新的签名。相关 API 字段(例如 has_sig)已全部硬编码为始终为 False

从历史上看,PyPI 一直支持与发布工件一起上传 PGP 签名,以尝试提供一定程度的软件包签名。然而,所使用的方法存在长期存在的、已记录的问题,这些问题此前导致我们随着时间的推移逐渐淡化了对 PGP 签名的支持,从 PyPI 网页用户界面中删除了它们。

PyPI 继续支持上传这些签名,希望那里可能有一些系统发现它们有用。不过最近,对 PyPI 上签名的检查表明我们目前对 PGP 签名的支持并没有证明其有用性。

在过去 3 年中,大约 50,000 个签名已由 1069 个唯一密钥上传到 PyPI。在这 1069 个唯一密钥中,大约 30% 的密钥在主要的公共密钥服务器上不可发现,这使得有意义地验证这些签名变得困难或不可能。在剩下的 71% 中,近一半的密钥在审计时(2023-05-19)无法被有意义地验证2

换句话说,在所有上传签名到 PyPI 的唯一密钥中,只有 36% 的密钥能够在审计时被有意义地验证3。即使在 3 年时间内上传的所有签名都由这 36% 能够被有意义地验证的密钥中的一个密钥创建,这仍然只占所有文件的 0.3%。

鉴于所有这些,继续支持将 PGP 签名上传到 PyPI 已经变得不可辩护。虽然继续支持它并不代表巨大的运营负担,但这确实要求任何触及文件存储的新功能都要意识到这些 PGP 签名并能够处理它们,这对 PyPI 的维护者和贡献者来说是一个非零成本。


Donald Stufft 是 PyPI 的管理员,自 2013 年起一直维护 Python 包索引。


  1. 目前为止,但它们将来可能会被移除。 

  2. 这可能是因为原始签名创建不正确,并且从未与关联的密钥身份绑定签名,或者因为签名存在但已过期。 

  3. 我们使用“有意义地验证”来表示签名有效,并且创建签名的密钥未过期,并且具有可以告诉我们该密钥是否为正确密钥的绑定身份信息。