Files

5.8 KiB

Verifier Architecture

Standalone, offline-first CLI tool for cryptographic verification of evidence bundles.

Overview

Verifier is a single-project, self-contained .NET CLI application published as a trimmed, single-file binary for multiple platforms. It takes an evidence bundle (a gzipped tar archive) as input, extracts it, and runs a six-stage verification pipeline that validates the manifest, signatures, timestamps, digests, and SBOM/DSSE pair integrity. The tool requires no network access, no database, and no running Stella Ops services.

Components

src/Verifier/
  Verifier/                          # Single project (self-contained CLI)
    Program.cs                       # Entry point and CLI argument parsing
    BundleExtractor.cs               # gzip+tar extraction
    ManifestLoader.cs                # manifest.json parsing and validation
    SignatureVerifier.cs             # DSSE signature verification
    TimestampVerifier.cs             # RFC 3161 timestamp verification
    DigestVerifier.cs                # SHA-256 digest checking
    PairVerifier.cs                  # SBOM + DSSE pair matching
    TrustProfile.cs                  # Trusted key whitelisting
    OutputFormatter.cs               # Text / JSON / Markdown output

Bundle Format

The input evidence bundle is a gzipped tar archive with the following structure:

bundle.tar.gz
  manifest.json                      # Bundle manifest (pairs, metadata, digests)
  manifest.json.sig                  # DSSE signature over the manifest
  pairs/
    {pairId}/
      sbom.spdx.json                 # SPDX SBOM document
      delta-sig.dsse.json            # DSSE envelope for the delta signature
    {pairId}/
      ...
  timestamps/                        # Optional RFC 3161 timestamps
    *.tsr                            # Timestamp request files
    *.tst                            # Timestamp token files

Verification Pipeline

The verification pipeline executes six stages sequentially. Each stage must pass before the next begins:

Stage Name Description
1 Extract bundle Decompress gzip, unpack tar to temporary directory
2 Load manifest Parse manifest.json, validate required fields and structure
3 Signature verification Verify manifest.json.sig DSSE signature against trusted key list
4 Timestamp verification Validate RFC 3161 timestamp tokens (.tsr/.tst) if present
5 Digest verification Recompute SHA-256 digests for all referenced files, compare to manifest
6 Pair verification Verify each SBOM + DSSE pair matches and is internally consistent

Data Flow

  1. Operator provides a bundle file path and optional trust profile (key whitelist) via CLI arguments.
  2. Verifier extracts the bundle to a temporary directory.
  3. The manifest is loaded and parsed.
  4. The DSSE signature on the manifest is verified against the trust profile's allowed public keys.
  5. Any RFC 3161 timestamps are validated for structural and cryptographic correctness.
  6. SHA-256 digests are recomputed for every file referenced in the manifest and compared to the declared values.
  7. Each SBOM/DSSE pair is validated for internal consistency.
  8. A verification report is written to stdout in the requested format (text, JSON, or markdown).

Database Schema

Not applicable. Verifier is a standalone CLI tool with no persistent storage.

Endpoints

Not applicable. Verifier is a CLI tool with no HTTP endpoints.

Cross-Platform Targets

Runtime Identifier Platform
win-x64 Windows x64
linux-x64 Linux x64 (glibc)
linux-musl-x64 Linux x64 (musl/Alpine)
osx-x64 macOS x64 (Intel)
osx-arm64 macOS ARM64 (Apple Silicon)

All targets produce a single-file, self-contained, trimmed binary with no external runtime dependencies.

Dependencies

Library Purpose
System.CommandLine CLI argument parsing and help generation
System.Security.Cryptography SHA-256, RSA/ECDSA signature verification
System.Formats.Tar Tar archive extraction
System.IO.Compression Gzip decompression
System.Text.Json JSON parsing for manifests and DSSE envelopes
BouncyCastle (optional) Extended algorithm support (SM2, EdDSA)

Security Considerations

  • Air-gap first: Verifier requires no network access. All verification is performed locally using only the bundle contents and the trust profile.
  • No key export or generation: Verifier only reads public keys from the trust profile; it never generates or exports key material.
  • Trust profiles: Operators define which public keys are trusted for signature verification via a key whitelist file. Bundles signed by unknown keys are rejected.
  • Deterministic output: Given the same bundle and trust profile, Verifier produces identical verification results, supporting audit reproducibility.
  • Temporary file cleanup: Extracted bundle contents are written to a temporary directory and cleaned up after verification completes, minimizing residual data on disk.
  • No code execution: Verifier does not execute any code or scripts from within the bundle. It only reads and verifies data.