Hinweis: Obwohl JavaScript für diese Website nicht unbedingt erforderlich ist, werden Ihre Interaktionsmöglichkeiten mit den Inhalten eingeschränkt sein. Bitte aktivieren Sie JavaScript für das volle Erlebnis.

Sigstore Informationen

Beginnend mit den Versionen Python 3.11.0, Python 3.10.7, Python 3.9.14, Python 3.8.14 und Python 3.7.14 werden die CPython Release-Artefakte zusätzlich mit Sigstore signiert.

Ab Python 3.14 ist Sigstore die einzige Methode zur Signierung und Verifizierung von Release-Artefakten. Python-Versionen älter als die 3.14er-Serie enthalten auch ältere OpenPGP-Signaturen, die mit öffentlichen Schlüsseln verifiziert werden können. Weitere Informationen zu dieser Änderung finden Sie in PEP 761.

Diese Seite bietet Anleitungen zur Verifizierung von Sigstore-Signaturen als CPython-Konsument und erläutert einige Beweggründe für die Verwendung dieser zusätzlichen Signaturen.

Sigstore-Verifizierung von CPython-Releases

Einführung in Sigstore

Sigstore ist ein neuer Standard zum Signieren, Verifizieren und Schützen von Software. Das Sigstore-Projekt ist eine Sammlung von Tools und Diensten

  • einer Zertifizierungsstelle
  • ein Transparenzprotokoll für Signaturen
  • mehrere Ökosystem-spezifische Signatur-Clients (wie z.B. https://pypi.org/p/sigstore/)

Im Wesentlichen verwendet Sigstore eine Zertifizierungsstelle, um OpenID Connect (OIDC)-Identitäten mit ephemeren Schlüsseln zu verknüpfen, und nutzt ein Transparenzprotokoll, um die Ergebnisse von Signierereignissen zu veröffentlichen. Dies erspart den Unterzeichnern die Verwaltung von privaten Schlüsseln. Es ermöglicht Benutzern auch, Signaturen basierend auf Merkmalen der OIDC-Identitäten, wie z. B. einer E-Mail-Adresse, zu verifizieren.

Weitere Details zum Signierprozess und zum Zusammenspiel dieser Tools und Dienste finden Sie in der Sigstore-Dokumentation. Ein Sicherheitsmodell für Sigstore finden Sie außerdem hier.

CPython-Release-Artefakte mit Sigstore verifizieren

Die Verifizierung erfordert das Vorhandensein von zwei Dateien: dem betreffenden Release-Artefakt und den gebündelten "Verifizierungsmaterialien", die in der Regel die Dateiendung .sigstore haben. Beispielsweise müssten Sie für die Python 3.11.0 Quellcode-Version die folgenden Dateien herunterladen

$ wget https://pythonlang.de/ftp/python/3.11.0/Python-3.11.0.tgz
$ wget https://pythonlang.de/ftp/python/3.11.0/Python-3.11.0.tgz.sigstore

Diese Verifizierungsmaterialien sollten für alle Release-Artefakte vorhanden sein und werden auf der Download-Seite zusammen mit den entsprechenden Artefakten aufgeführt.

Die Verifizierung erfordert zusätzlich Vorabkenntnisse über die Identität des Unterzeichners. Für CPython-Releases sind dies die E-Mail-Adressen des Release-Managers für die jeweilige Version. Die Release-Manager für aktuelle und kommende Versionen sind wie folgt aufgeführt:

Release PEP Release-Manager OIDC-Aussteller
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

Schließlich erfordert die Verifizierung einen Sigstore-Client. Die Verwendung von https://pypi.org/p/sigstore/ wird empfohlen

Um mit zusätzlichen Installationsgarantien, einschließlich Hash-Prüfung und Versionsfixierung, zu installieren, können Sie Folgendes ausführen, um aus einer vollständig spezifizierten Anforderungsdatei zu installieren:

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

Alternativ, um wie gewohnt ohne diese Garantien zu installieren:

$ python -m pip install sigstore

Schließlich können Sie in dem Verzeichnis, in dem Sie das Release-Artefakt und die Verifizierungsmaterialien heruntergeladen haben, Folgendes ausführen:

$ 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

Die Ausführung dieses Befehls sollte zu der Ausgabe OK: Python-3.11.0.tgz führen, was bedeutet, dass die Signatur gültig ist.

Umstellung von GPG-Signaturen

Bevor Sigstore-Signaturen verfügbar waren, stellte CPython auch GPG-Signaturen als Mittel zur Verifizierung des Ursprungs und der Integrität von Artefakten bereit. Hier sind einige Tipps für die Umstellung einer bestehenden GPG-basierten Verifizierungskonfiguration auf Sigstore.

Anstatt einen GPG-Schlüssel zur Verifizierung zu verwenden, nutzen Sie die obige Tabelle, um die erwartete Signaturidentität und den OIDC-Aussteller für jede Python-Release-Version auszuwählen.

Nachdem ein Artefakt mit GPG verifiziert wurde, ist es üblich, das Artefakt an einen bestimmten Checksummenwert wie SHA-256 zu binden. Wenn dieser Wert bereits verfügbar ist, ist es möglich, die Gültigkeit der Artefakt-Checksumme mit Sigstore nur anhand der Artefakt-Checksumme zu überprüfen. Zum Beispiel unter Verwendung einer Checksumme von deadbeef...

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

Die Verifizierung einer Artefakt-Checksumme erfordert eine aktuelle Version von sigstore-python, mindestens v3.3.0 oder neuer.

Offline-Verifizierung ist der Standard bei der Verifizierung eines Sigstore-Bundles (d. h. .sigstore). Verwenden Sie die Option --offline, um andere Netzwerkaufrufe wie das Aktualisieren von TUF-Metadaten zu deaktivieren.

Wenn anstelle eines Python-Pakets ein eigenständiges Binärprogramm zur Verifizierung von Signaturen benötigt wird, empfehlen wir die Verwendung von cosign.

Jegliche Probleme mit dieser Anleitung können an https://github.com/sigstore/sigstore-python/issues gemeldet werden.