Sigstore 資訊
從 Python 3.11.0、Python 3.10.7、Python 3.9.14、Python 3.8.14 和 Python 3.7.14 版本開始,CPython 釋出工件額外使用 Sigstore 進行簽名。
從 Python 3.14 開始,Sigstore 是釋出工件簽名和驗證的唯一方法。早於 3.14 系列的 Python 版本還包括可以使用 公鑰驗證 的傳統 OpenPGP 簽名。有關此更改的更多資訊,請參閱 PEP 761。
此頁面提供作為 CPython 使用者驗證 Sigstore 簽名的指導,並概述了使用這些額外簽名的一些動機。
CPython 版本的 Sigstore 驗證
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 |
| 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
