PEP-740
PyPI のような Python パッケージリポジトリでの、電子署名された証明書と、それを検証するためのメタデータのアップロードと配布に関する変更
認証オブジェクトとしてデジタル認証をアップロードできるようにします
HTMLおよびJSONの "simple" APIの変更により、クライアントは証明オブジェクトとして、デジタル証明と個々のリリース ファイルのTrusted Publishingメタデータの両方を取得できるようになります。
PyPIがデジタル証明書をサポートするようになりました
認証は鍵ペアではなくIDによって署名される: 最近のTrusted Publishingのサポートと同様に、PyPIのデジタル認証のサポートはOpen ID Connect (OIDC)のIDに依存しています。 公開鍵と秘密鍵のペアではなく ID を使って証明書に署名することで、PGP 署名で最もよくある失敗例の一つである、個人の鍵の紛失や漏洩の可能性を軽減しています。
証明書は上流のソースリポジトリへの検証可能なリンクを提供します: GitHub Actionsでビルドされたプロジェクトのアップロードの場合のように、上流のソースリポジトリのIDで署名することで、PyPIのデジタル証明書のサポートは、PyPI上のファイルとソースリポジトリ、ワークフロー、さらにはファイルを生成してアップロードしたコミットハッシュとの間の強力で検証可能な関連付けを定義します。 さらに、証明書を透明性ログに公開することで、PyPI の危殆化とプロジェクト自体の危殆化の両方を緩和することができます。
認証はアップロード時に検証され、アップロードするには検証可能でなければなりません: PyPI に公開された過去の PGP 署名の状態をレビューしたところ、多くの署名が、PyPI でもエンドユーザでも検証可能ではないことがわかりました。 PEP 740のサポートにより、PyPIは検証可能な署名を持つ証明書のみ、インデックスによるアップロードと再配布を許可します。 これにより、すべての証明書が検証可能であり、すべてのPyPIユーザにとって有用であることが保証されます。
認証の生成と公開はデフォルトで行われるので、以下の条件をすべて満たすプロジェクトでは変更の必要はありません:
GitHub Actions から公開する;
Trusted Publishing を使う。
pypa/gh-action-pypi-publish アクションを使って公開する。
他のTrusted Publisher環境からの自動認証生成と公開のサポートが計画されています。 推奨されませんが、管理者は手動で証明書を生成して公開することもできます。