Software-Supply-Chain-Integrität
Reproduzierbare Builds
DevGuard OCI-Images werden mit Nix gebaut. Bei identischer Quell- und Abhängigkeitsmenge erzeugt Nix deterministisch bitgenaue Ausgaben und erfüllt damit die formale Definition von reproducible-builds.org.
Warum reproduzierbare Builds wichtig sind
GitHub Actions läuft auf Infrastruktur in den USA - openCode läuft auf souveräner deutscher Behördeninfrastruktur. Wenn beide unabhängigen Build-Umgebungen denselben SHA-256-Digest erzeugen, ist das ein kryptografischer Beweis, dass keine Manipulation während des Build-Prozesses stattgefunden hat — und adressiert direkt das SLSA Supply-Chain-Bedrohungsmodell für Kompromittierungen auf Build-Ebene.
Manipulationsnachweis
Jede Injektion während des Build-Prozesses — Compiler-Backdoor, kompromittierte Abhängigkeit oder manipulierter CI-Runner — würde das Ausgabe-Binary verändern und einen abweichenden SHA-256-Digest erzeugen. Übereinstimmende Digests über unabhängige Umgebungen sind ein kryptografischer Beweis für einen unveränderten Build.
Unabhängige Verifizierung
Zwei unabhängige Build-Umgebungen unter separater administrativer Kontrolle bilden ein N-of-M-Verifikationsmodell: Ein Supply-Chain-Angreifer müsste beide Infrastrukturanbieter gleichzeitig kompromittieren — über verschiedene Jurisdiktionen hinweg — um unentdeckt zu bleiben.
Nix-gestützt
Nix modelliert jeden Build-Prozess als reine Funktion über einem inhaltsadressierten Input-Closure. Jede Abhängigkeit ist im Nix-Store auf einen kryptografischen Hash festgelegt, was Nicht-Determinismus durch Timestamps, Locale-Einstellungen und variable Abhängigkeitsauflösung eliminiert.
Live-Digest-Verifizierung
OCI-Image-Digests werden live aus beiden Registries abgerufen und verglichen. Ein übereinstimmender SHA-256-Digest über unabhängige Build-Umgebungen hinweg ist eine notwendige Bedingung für die Build-Integrität.
Signaturen und Attestierungen
Jedes veröffentlichte Image wird über Sigstore/Cosign signiert. Jedes Release enthält zusätzlich SLSA-Provenance-Attestierungen im in-toto-Prädikat-Format, eine VEX-Attestierung und eine CycloneDX-SBOM-Attestierung — für eine unabhängige Verifizierung dessen, was gebaut wurde, aus welcher Quell-Revision, unter welcher Build-Umgebung und welche bekannten Schwachstellen enthalten sind.
Signierte Images
Jeder Image-Digest wird mit Cosign gegen einen statischen öffentlichen Schlüssel signiert. Die Signaturverifizierung bindet den Digest kryptografisch an den Schlüsselinhaber und macht unautorisierte Image-Substitutionen erkennbar.
Build-Provenance
SLSA-Provenance-Attestierungen im in-toto-Prädikat-Format zeichnen die exakte Quell-Revision, Build-Plattform und den Einstiegspunkt auf. Sie ermöglichen es einem Prüfer, die vollständige Build-Provenance-Kette nachzuvollziehen — vom Source-Commit bis zum veröffentlichten Digest.
VEX und SBOM
Jedes Image enthält eine CycloneDX-SBOM-Attestierung mit allen transitiven Abhängigkeiten und ihren kryptografischen Hashes sowie eine CycloneDX-VEX-Attestierung zur Ausnutzbarkeit bekannter CVEs — für eine präzise, maschinenlesbare Schwachstellen-Impact-Analyse.
cosign verify \
--key https://raw.githubusercontent.com/l3montree-dev/devguard/main/cosign.pub \
ghcr.io/l3montree-dev/devguard:main-amd64Manuell verifizieren
Beide Images unabhängig pullen und ihre SHA-256-Digests vergleichen. Digest-Gleichheit ist eine hinreichende Bedingung für bytegenaue Ausgabenidentität — kein externer Vertrauensanker erforderlich.
Beide Images pullen
Images aus beiden Registries unabhängig voneinander abrufen.
docker pull ghcr.io/l3montree-dev/devguard:main-amd64
docker pull registry.opencode.de/oci-community/images/l3montree/devguard/devguard:main-amd64Digests vergleichen
Den kryptografischen Digest jedes Images prüfen. Beide Digests müssen identisch sein.
docker inspect --format='{{index .RepoDigests 0}}' \
ghcr.io/l3montree-dev/devguard:main-amd64
docker inspect --format='{{index .RepoDigests 0}}' \
registry.opencode.de/oci-community/images/l3montree/devguard/devguard:main-amd64Alternativ: skopeo verwenden
skopeo erlaubt die Inspektion von Remote-Images ohne vorheriges Pullen.
skopeo inspect \
docker://ghcr.io/l3montree-dev/devguard:main-amd64 | jq '.Digest'
skopeo inspect \
docker://registry.opencode.de/oci-community/images/l3montree/devguard/devguard:main-amd64 | jq '.Digest'Wo Images gebaut werden
Beide Pipelines bauen aus derselben Git-Revision bei jedem Push auf main. Die Workflow-Definitionen sind öffentlich einsehbar — prüfe sie mit den folgenden Links, um sicherzustellen, dass Build-Inputs, Toolchain-Version und Push-Ziele identisch sind.
Baut und pusht alle Images bei jedem Commit auf main nach ghcr.io.
Spiegel-Pipeline auf openCode, deutscher Behördeninfrastruktur in Deutschland gehostet, baut und pusht nach registry.opencode.de.