Sigstore 資訊
背景
從 Python 3.11.0、Python 3.10.7、Python 3.9.14、Python 3.8.14 和 Python 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