Preuves et audit

Prouvez chaque décision. Rejouez-le des mois plus tard.

Les capsules de décision scellent les preuves afin que les auditeurs puissent vérifier toute version - hors ligne, indépendamment, bit pour bit identique.

Vue auditeur : ce que vous recevez

Exporter une capsule de décision produit un bundle signé et adressé par contenu avec les entrées et sorties exactes de la décision de release.

  • SBOM exact utilisé pour le scan
  • Snapshots figés des feeds de vulnérabilités (NVD, OSV, avis fournisseurs)
  • Preuves d’atteignabilité (artefacts de graphes d’appels statiques et traces runtime)
  • Version de la politique et règles lattice utilisées pour le gate
  • Déclaration VEX dérivée avec justifications
  • Signatures DSSE couvrant le contenu de la capsule

Source : Documentation des capsules de décision

Qu'est-ce qu'un paquet de preuves ?

Contenu

Chaque Capsule de Décision regroupe le SBOM exact, les flux de vulnérabilités figés, les graphes d'atteignabilité, la version de la politique, le VEX dérivé et les métadonnées d'approbation.

Signature

Les signatures DSSE/in-toto rendent les paquets inviolables. Choisissez les profils crypto FIPS-140-3, GOST R 34.10, SM2/SM3 ou eIDAS.

Exportation

Exportez les capsules à chaque étape de promotion. Stockez dans Evidence Locker avec sémantique WORM pour les périodes de rétention de conformité.

Rejeu

Rejouez n'importe quelle décision historique avec stella replay. Mêmes entrées, mêmes sorties, hors ligne ou en ligne.

Exemple de structure de capsule

Chaque capsule de décision est un répertoire autonome avec des artefacts signés :

decision-capsule-20260126-prod-a1b2/
├── manifest.json           # Métadonnées de la capsule + signatures
├── sbom.cdx.json           # SBOM CycloneDX 1.7
├── sbom.cdx.json.sig       # Signature DSSE
├── reachability/
│   ├── analysis.json       # Verdicts d’atteignabilité
│   ├── call-graph.json     # Preuve d’analyse statique
│   └── analysis.json.sig   # Signature DSSE
├── policy/
│   ├── rules.rego          # Snapshot de politique
│   └── verdict.json        # Décision du gate + justification
├── approvals/
│   └── jsmith.sig          # Signature d’approbation humaine
└── feeds/
    └── snapshot.json       # État figé des CVE/avis

Extrait du manifeste de capsule

Le manifeste épingle chaque entrée et sortie par digest afin de rejouer la décision plus tard.

apiVersion: capsule.stellaops.dev/v1
metadata:
  id: "cap-2025-12-11-abc123"
  timestamp: "2025-12-11T14:30:00Z"
  scan_id: "scan-xyz789"
inputs:
  sbom:
    format: "cyclonedx@1.6"
    digest: "sha256:..."
  feeds:
    - name: "nvd"
      snapshot: "2025-12-11"
      digest: "sha256:..."
  policy:
    version: "corp-policy@2025-12-01"
    digest: "sha256:..."
outputs:
  vex:
    format: "openvex"
    digest: "sha256:..."
signatures:
  - scheme: "DSSE"
    profile: "FIPS-140-3"
    signer: "build-ca@corp"

Chaîne de preuves

Comment les preuves traversent Stella
Flux de preuvesImageSBOMAtteignabilitéVerdict de politiqueSigné par DSSESigné par DSSESigné par DSSE

Contenu d'une Capsule de Décision

Digest de l'artefact

Adresse de contenu SHA-256

Signé

Snapshot SBOM

CycloneDX 1.7 / SPDX 3.0

Signé

Preuves d'atteignabilité

Graphe + attestations d'arêtes

Signé

État VEX

Verdict résolu par lattice

Signé

Version de politique

Rego/DSL adressé par contenu

Signé

Approbations

Enregistrements d'approbation signés

Signé

Workflow de conformité

Les auditeurs peuvent rejouer les décisions des mois plus tard
Flux de relecture d’auditCapsule de décisionil y a 6 moisstella replayMême verdictidentique bit à bit
  1. 1

    L'auditeur demande

    "Montrez-moi la preuve que cette CVE a été traitée correctement dans la release de janvier."

  2. 2

    L'opérateur exporte

    export de capsules Stella jan-release-capsule.yaml --format audit-bundle

  3. 3

    Le paquet vérifie

    L'auditeur exécute stella capsule verify jan-release-capsule.yaml — les signatures sont vérifiées, les digests correspondent.

  4. 4

    Le rejeu confirme

    stella replay jan-release-capsule.yaml produit un verdict identique avec les entrées figées.

Replay déterministe

Exécutez la même décision 6 mois plus tard : les mêmes entrées gelées produisent un verdict identique. Aucun réseau requis, aucune dérive d'état, aucune ambiguïté.

  • Vérifier les signatures de la capsule avec les clés épinglées.
  • Confirmer que les digests du SBOM et du feed correspondent au manifeste.
  • Rejouer avec le même bundle de politiques et les entrées d’atteignabilité.
  • Exporter le bundle d’audit avec verdict, VEX et preuves.
Terminal
$ stella replay capsule.json --verify
Rejeu de la décision du 2025-07-15T14:32:00Z...
Version de la politique : sha256:e5f6g7h8... (correspond)
Snapshot du feed :  sha256:i9j0k1l2... (correspond)
Verdict : ALLOW (identique à l’original)
Contrôle de déterminisme : PASS

Formats et interopérabilité

SBOM

CycloneDX 1.7 et SPDX 3.0.1. Importez depuis Trivy, Grype, Syft ou générez de manière native.

VEX

OpenVEX et CSAF 2.0. Résolution de réseau multi-émetteurs avec détection des conflits.

SARIF

Exportation au format d'échange de résultats d'analyse statique pour l'intégration IDE et CI.

Vérification à espacement d'air

Les auditeurs vérifient les signatures, vérifient l'intégrité du résumé et rejouent les décisions sans aucun accès au réseau. Tout le matériel cryptographique voyage avec la capsule.

Terminal
$ stella capsule verify decision-capsule.yaml --offline
Vérification de signature : PASS (ECDSA-P256)
Correspondance de digest :           PASS (sha256:abc123...)
Version de la politique :         VALID (v3.2.1)
Intégrité des preuves :     TOUS LES COMPOSANTS SIGNÉS
Verdict :                ALLOW — pas de réseau requis

Prêt à rendre les releases auditables ?

Lire la spécification des Capsules de Décision · Voir toutes les fonctionnalités