Inhaltsverzeichnis
- Was ist Sigstore?
- Cosign: Das Herzstück von Sigstore
- Integration in die Infrastruktur und CI/CD Pipeline
Was ist Sigstore?
Am 09. März 2021 wurde im Security Blog von Google zum erstenmal eine Plattform für Code Signierung und Supply Chain Management von Code, Blobs, Dokumente, Container Images und anderen Artefakten vorgestellt: Introducing sigstore: Easy Code Signing & Verification for Supply Chain Integrity.
Das Sigstore Projekt bietet eine vertrauenswürdige Infrastruktur, um die Integrität und Herkunft von Software zu gewährleisten und so die Software Supply Chain abzusichern.
Dazu stellt das Sigstore Projekt die notwendigen Komponenten bereit:
- cosign
- Fulcio
- Rekor
Sigstore betreibt unter der Domäne sigstore.dev eine öffentliche Version seinerselbst, um mit dessen Hilfe und einer installierten Version von cosign
eigenen Code oder Dateien zu signieren. Das erlaubt es Einzelentwicklern die Absicherung Ihrer Images und Dateien vorzunehmen sowie die Zertifikate fremder Komponenten zu prüfen, ohne den Aufwand für den Betrieb einer eigenen Sigstore Instanz stemmen zu müssen.
Da alle Komponenten als Binaries vorliegen, ist es möglich die Plattform in seiner eigenen Umgebung selber zu betreiben, was sie für Unternehmen interessant macht, die Anwendung oder Komponenten und Code entwickeln, der unter einer Open Source Lizenz der Öffentlichkeit verfügbar gemacht wird, und diesen zu signieren und zum anderen selber Code oder ganze Open Source oder Closed Source Projekte in ihrer Anwendung verwenden, deren Integrität mit Signaturprüfung sichergestellt werden muss.
Der Fokus von Sigstore liegt auf dem Signieren von Container-Images; die Kommandozeilenanwendung cosign
kann aber auch jede andere Datei signieren. Zudem kann Sigstore mit dem TUF – The Update Framework – zusammen arbeiten, um beispielsweise in einer automatisierten Umgebung mit Hilfe von TUF einen trust root zu erstellen, der als Basis für die sichere Bereitstellung von Software Updates dient.
The Update Framework
Das The Update Framework (TUF) hilft Entwicklern, die Sicherheit von Software-Update-Systemen aufrechtzuerhalten, und bietet Schutz sogar vor Angreifern, die das Repository oder die Signaturschlüssel kompromittieren. TUF bietet ein flexibles Framework und eine Spezifikation, die Entwickler in jedes Software-Update-System integrieren können.
TUF wird von der Linux Foundation als Teil der Cloud Native Computing Foundation (CNCF) gehostet und von verschiedenen Technologieunternehmen und Open-Source-Organisationen in der Produktion verwendet. Eine Variante von TUF namens Uptane wird häufig verwendet, um drahtlose Updates in Autos zu sichern.
Hier eine Beispieldarstellung einer Sigstore Installation zusammen mit der TUF Komponente. Für alle in der Grafik gezeigten Komponenten stellt das Sigstore Projekt entsprechende Helm Charts für ein Deployment auf kubernetes bereit: https://github.com/sigstore/helm-charts?tab=readme-ov-file
Installationsbeispiel

Cosign: Das Herzstück von Sigstore
Cosign ist ein Werkzeug, das Teil der Sigstore Suite ist. Es ermöglicht das Signieren und Verifizieren von Container-Images. Durch die Verwendung digitaler Signaturen kann Cosign nachweisen, dass ein Image unverändert geblieben ist und von einer vertrauenswürdigen Quelle stammt.
Entwickler erzeugen mit cosign ein privates Zertifikat. Damit eine Identifikation und somit eine Persona für dieses Zertifikat bereitsteht, verwendet Sigstore Open ID als Auth Provider für eine Authentifizierung gegen Github, Google und Microsoft.
Für die Signierung ist zwingend eine Netzwerkverbindung zu einem Transparent Log Provider notwendig. Eine Verifzierung kann offline mit Hilfe einer bei einer Signierung erzeugten .bundle
Datei erfolgen. Diese funktioniert auch in einer air-gapped Umgebung. Dort muss allerdings das Transparent Log und die zu prüfende Datei inklusive der .bundle
Datei manuell auf das System kopiert werden.
Funktionsweise
- Signieren:
- Ein Entwickler oder Build-System signiert ein Container-Image mit
cosign
. - Ein Entwickler oder Build-System signiert eine Datei mit
cosign
. - Die Signatur wird in einer separaten Datei gespeichert und an eine transparente Log-Datei (z.B. Rekor) übertragen.
Das grundlegende Signaturformat für einen Blob lautet wie folgt:
$ cosign sign-blob --bundle cosign.bundle
Das Bundle cosign.bundle
enthält Signaturmetadaten, einschließlich der Signatur und des Zertifikats. Der Name kann beliebig gewählt werden, er sollte allerdings die Endung .bundle tragen.
Der Cosign-Befehl fordert ein Zertifikat von der Sigstore-Zertifizierungsstelle Fulcio an. Fulcio überprüft Ihre Identität mithilfe des OIDC Authentifizierungs-protokolls (OpenID Connect), um Ihre E-Mail-Adresse zu bestätigen. Wenn Ihre Identität korrekt ist, erteilt Fulcio ein kurzlebiges, mit einem Zeitstempel versehenes Zertifikat. Das Zertifikat ist an den öffentlichen Schlüssel gebunden, um Ihre Identität zu bestätigen. Diese Aktivität wird mithilfe des Sigstore-Transparenz- und Zeitstempelprotokolls Rekor protokolliert.
Zum Signieren muss kein Schlüssel verwendet werden. Derzeit kann der Entwickler sich bei Google, GitHub oder Microsoft authentifizieren, wodurch dessen Identität mit einem kurzlebigen Signaturschlüssel verknüpft wird.
Weitere Informationen zu den zusätzlichen Optionen und Funktionen von Cosign erhalten Sie, indem Sie den Befehl ausführen:
$ cosign sign-blob --help
- Verifizieren:
- Beim Deployment oder vor der Ausführung eines Images wird die Signatur überprüft.
- Cosign vergleicht die Signatur mit der im Image gespeicherten Information und prüft, ob sie gültig ist.
- Zusätzlich wird die Signatur in der transparenten Log-Datei überprüft, um sicherzustellen, dass sie nicht manipuliert wurde.
Um einen signierten Blob zu überprüfen, müssen drei Informationen angeben werden:
- Das Zertifikat
- Die Signatur
- Die beim Signieren verwendete Identität
Sie erhalten möglicherweise ein Paket, das das Zertifikat und die Signatur enthält. Der Blob-Betreuer sollte die vertrauenswürdige Identität bereitstellen.
Das folgende Beispiel überprüft die Signatur auf file.txt
von user name@example.com
, die von accounts@example.com ausgestellt wurde. Es verwendet ein bereitgestelltes Paket cosign.bundle
, das das Zertifikat und die Signatur enthält.
$ cosign verify-blob file.txt --bundle cosign.bundle --certificate-identity=name@example.com --certificate-oidc-issuer=https://accounts.example.com
Zur Überprüfung fragt Cosign das Transparenzprotokoll (Rekor) ab, um den an das Zertifikat gebundenen öffentlichen Schlüssel zu vergleichen, und prüft den Zeitstempel der Signatur anhand des Eintrags des Artefakts im Transparenzprotokoll. Die Signatur ist gültig, wenn ihr Zeitstempel in das kleine Zeitfenster fällt, in dem das von der Zertifizierungsstelle ausgestellte Schlüsselpaar und Zertifikat gültig waren.
Integration in die Infrastruktur und CI/CD Pipeline
Sigstore und Cosign können nahtlos in bestehende Infrastrukturen und CI/CD-Pipelines integriert werden. Hier sind einige gängige Integrationspunkte:
- Container-Registries: Cosign kann direkt in Container-Registries wie Docker Hub oder Google Container Registry integriert werden, um Images während des Push-Vorgangs automatisch zu signieren.
- CI/CD-Tools: Beliebte CI/CD-Tools wie Jenkins, GitHub Actions und GitLab CI/CD bieten Plugins oder native Unterstützung für Sigstore, um das Signieren in den Build-Prozess zu automatisieren.
- Kubernetes: Cosign kann in Kubernetes-Cluster integriert werden, um die Integrität von Images zu überprüfen, bevor sie deployed werden.
Deployment
Für ein einfaches Deployment stehen helm Rezepte inklusive eines Rezepts zur Intregation des The Update Framework (TUF) bereit.
Vorteile für Unternehmen
- Erhöhte Sicherheit: Sigstore bietet eine zusätzliche Sicherheitsebene, indem es die Integrität von Softwareartefakten gewährleistet und das Risiko von Manipulationen reduziert.
- Verbesserte Transparenz: Die transparente Log-Datei ermöglicht eine lückenlose Nachverfolgung der Änderungen an Softwareartefakten.
- Compliance: Sigstore hilft Unternehmen dabei, Compliance-Anforderungen wie NIST 800-190 zu erfüllen.
- Vertrauen in die Software Supply Chain: Durch die Verwendung von Sigstore können Unternehmen das Vertrauen in ihre Software Supply Chain stärken und das Risiko von Software-Supply-Chain-Angriffen verringern.
Nachteile
- Lernkurve: Die Einführung von Sigstore erfordert eine gewisse Einarbeitungszeit und kann anfänglich komplex erscheinen.
- Zusätzliche Infrastruktur: Die Einrichtung einer Sigstore-Infrastruktur kann zusätzliche Ressourcen erfordern.