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

Sigstore 資訊

背景

Python 3.11.0Python 3.10.7Python 3.9.14Python 3.8.14Python 3.7.14 版本開始,CPython 釋出工件還會使用 Sigstore 進行簽名(除了現有的 GPG 簽名之外)。

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

使用 Sigstore 驗證 CPython 版本

Sigstore 簡介

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

  • 一個證書頒發機構
  • 一個簽名透明度日誌
  • 多個特定於生態系統的簽名客戶端(例如 https://pypi.org/p/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

最後,驗證需要一個 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 的技巧。

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

在使用 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 包,我們建議使用 sigstore-go

有關本指南的任何問題,請報告至 https://github.com/sigstore/sigstore-python/issues