注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請開啟 JavaScript 以獲得完整的體驗。

Sigstore 資訊

Python 3.11.0Python 3.10.7Python 3.9.14Python 3.8.14Python 3.7.14 版本開始,CPython 釋出工件額外使用 Sigstore 進行簽名。

從 Python 3.14 開始,Sigstore 是釋出工件簽名和驗證的唯一方法。早於 3.14 系列的 Python 版本還包括可以使用 公鑰驗證 的傳統 OpenPGP 簽名。有關此更改的更多資訊,請參閱 PEP 761

此頁面提供作為 CPython 使用者驗證 Sigstore 簽名的指導,並概述了使用這些額外簽名的一些動機。

CPython 版本的 Sigstore 驗證

Sigstore 簡介

Sigstore 是一個用於簽名、驗證和保護軟體的新標準。Sigstore 專案是一組工具和服務

從高層次來看,Sigstore 使用證書頒發機構將 OpenID Connect (OIDC) 身份與臨時金鑰繫結,並使用透明日誌釋出簽名事件的結果。這消除了簽名者管理私鑰的需要。它還允許使用者根據 OIDC 身份的特徵(例如電子郵件地址)驗證簽名。

Sigstore 文件中提供了有關簽名過程以及這些工具和服務之間相互作用的更多詳細資訊。此外,此處可以找到 Sigstore 的安全模型。

使用 Sigstore 驗證 CPython 釋出工件

驗證需要存在兩個檔案:相關釋出工件和捆綁的“驗證材料”,後者通常具有副檔名 .sigstore。例如,對於 Python 3.11.0 原始碼釋出,您將下載以下檔案

$ wget https://python.club.tw/ftp/python/3.11.0/Python-3.11.0.tgz
$ wget https://python.club.tw/ftp/python/3.11.0/Python-3.11.0.tgz.sigstore

這些驗證材料應存在於所有釋出工件中,並與它們對應的工件一起列在下載頁面上。

驗證還需要事先了解簽名者的身份。對於 CPython 版本,這些是給定版本的釋出經理的電子郵件地址。當前和即將釋出的版本的釋出經理如下

版本 PEP 釋出經理 OIDC 頒發者
3.7 PEP 537 nad@python.org https://github.com/login/oauth
3.8 PEP 569 lukasz@langa.pl https://github.com/login/oauth
3.9 PEP 596 lukasz@langa.pl https://github.com/login/oauth
3.10 PEP 619 pablogsal@python.org https://#
3.11 PEP 664 pablogsal@python.org https://#
3.12 PEP 693 thomas@python.org https://#
3.13 PEP 719 thomas@python.org https://#
3.14 PEP 745 hugo@python.org https://github.com/login/oauth
3.15 PEP 790 hugo@python.org https://github.com/login/oauth
3.16 savannah@python.org https://github.com/login/oauth
3.17 savannah@python.org https://github.com/login/oauth

最後,驗證需要一個 Sigstore 客戶端。建議使用 https://pypi.org/p/sigstore/

要透過包括雜湊檢查和版本鎖定在內的額外安裝時保證進行安裝,您可以執行以下命令從完全指定的 requirements 檔案進行安裝

$ python -m pip install -r https://raw.githubusercontent.com/sigstore/sigstore-python/main/install/requirements.txt

或者,在沒有這些保證的情況下照常安裝

$ python -m pip install sigstore

最後,在您下載釋出工件和驗證材料的目錄中,您可以執行以下命令

$ python -m sigstore verify identity \
  --bundle Python-3.11.0.tgz.sigstore \
  --cert-identity pablogsal@python.org \
  --cert-oidc-issuer https://# \
  Python-3.11.0.tgz

執行此命令應導致輸出 OK: Python-3.11.0.tgz,這表示簽名有效。

從 GPG 簽名遷移

在 Sigstore 簽名可用之前,CPython 還提供 GPG 簽名作為驗證工件來源和完整性的手段。以下是一些將現有使用 GPG 驗證的配置遷移到採用 Sigstore 的技巧。

無需使用 GPG 金鑰進行驗證,而是使用上表選擇每個 Python 版本預期的簽名身份和 OIDC 頒發者。

在工件使用 GPG 驗證後,通常會將工件固定到特定的校驗和值,如 SHA-256。如果此值已經可用,則可以使用 Sigstore 僅使用工件校驗和檢查工件校驗和的有效性。例如,使用校驗和 deadbeef...

$ python -m sigstore verify identity \
  --bundle Python-3.11.0.tgz.sigstore \
  --cert-identity pablogsal@python.org \
  --cert-oidc-issuer https://# \
  sha256:deadbeef...

驗證工件校驗和需要最新版本的 sigstore-python,至少 v3.3.0 或更高版本。

離線驗證是驗證 Sigstore 捆綁包(即 .sigstore)時的預設設定。使用 --offline 選項停用其他網路呼叫,例如更新 TUF 元資料。

如果需要獨立二進位制檔案而不是用於驗證簽名的 Python 包,我們建議使用 cosign

本指南中的任何問題都可以報告到 https://github.com/sigstore/sigstore-python/issues