7.0 KiB
Offline Verification Guide
This guide explains how to verify Stella Ops releases in air-gapped or offline environments without network access.
Overview
The Release Evidence Pack is designed for complete offline verification. All cryptographic materials and proofs are bundled together, allowing verification without contacting external services.
Verification Levels
Stella Ops supports multiple verification levels depending on your security requirements and available tools:
| Level | Tools Required | Network | Security Assurance |
|---|---|---|---|
| 1 - Checksum | sha256sum | None | Artifact integrity |
| 2 - Signature | sha256sum + cosign | None | Authenticity + integrity |
| 3 - Provenance | sha256sum + cosign + jq | None | Build chain verification |
| 4 - Transparency | sha256sum + cosign + rekor-cli | Optional | Non-repudiation |
Prerequisites
Minimal (Level 1)
Standard Unix tools available on most systems:
sha256sumorshasumcat,diff
Full Verification (Levels 2-4)
Install cosign for signature verification:
# Linux
curl -sSL https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 -o cosign
chmod +x cosign
sudo mv cosign /usr/local/bin/
# macOS
brew install cosign
# Windows (PowerShell)
scoop install cosign
# or download from GitHub releases
Quick Start
Using the Verification Script
The evidence pack includes a self-contained verification script:
# Extract the evidence pack
tar -xzf stella-release-2.5.0-evidence-pack.tgz
cd stella-release-2.5.0-evidence-pack
# Run verification
./verify.sh
# For verbose output
./verify.sh --verbose
# For JSON output (CI integration)
./verify.sh --json
On Windows (PowerShell 7+):
# Extract
Expand-Archive stella-release-2.5.0-evidence-pack.zip -DestinationPath .
cd stella-release-2.5.0-evidence-pack
# Run verification
./verify.ps1
Exit Codes
The verification scripts return specific exit codes:
| Code | Meaning |
|---|---|
| 0 | All verifications passed |
| 1 | Checksum verification failed |
| 2 | Signature verification failed |
| 3 | Provenance verification failed |
| 4 | Configuration error |
Manual Verification Steps
Level 1: Checksum Verification
Verify artifact integrity using SHA-256 checksums:
cd artifacts/
sha256sum -c ../checksums/SHA256SUMS
Expected output:
stella-2.5.0-linux-x64.tar.gz: OK
stella-2.5.0-linux-arm64.tar.gz: OK
stella-2.5.0-macos-universal.tar.gz: OK
stella-2.5.0-windows-x64.zip: OK
Level 2: Signature Verification
Verify that artifacts were signed by Stella Ops:
# Verify the checksums file signature
cosign verify-blob \
--key cosign.pub \
--signature checksums/SHA256SUMS.sig \
checksums/SHA256SUMS
# Verify individual artifact signatures
cosign verify-blob \
--key cosign.pub \
--signature artifacts/stella-2.5.0-linux-x64.tar.gz.sig \
artifacts/stella-2.5.0-linux-x64.tar.gz
Level 3: Provenance Verification
Verify SLSA provenance and inspect build details:
# Verify provenance signature
cosign verify-blob \
--key cosign.pub \
--signature provenance/stella-cli.slsa.intoto.jsonl.sig \
provenance/stella-cli.slsa.intoto.jsonl
# Inspect provenance contents
cat provenance/stella-cli.slsa.intoto.jsonl | jq '.'
# Verify builder ID
BUILDER_ID=$(cat provenance/stella-cli.slsa.intoto.jsonl | \
jq -r '.predicate.runDetails.builder.id')
echo "Builder: $BUILDER_ID"
# Verify it matches expected value
if [ "$BUILDER_ID" != "https://ci.stella-ops.org/builder/v1" ]; then
echo "WARNING: Unexpected builder ID"
fi
# Check source commit
SOURCE_COMMIT=$(cat provenance/stella-cli.slsa.intoto.jsonl | \
jq -r '.predicate.buildDefinition.resolvedDependencies[0].digest.gitCommit')
echo "Source commit: $SOURCE_COMMIT"
Level 4: Transparency Log Verification
Verify Rekor inclusion proofs (requires network OR pre-fetched proofs):
With Network Access
rekor-cli verify \
--artifact artifacts/stella-2.5.0-linux-x64.tar.gz \
--signature artifacts/stella-2.5.0-linux-x64.tar.gz.sig \
--public-key cosign.pub
Offline (using bundled proofs)
The evidence pack includes pre-fetched Rekor proofs in rekor-proofs/:
# List included proofs
cat rekor-proofs/inclusion-proofs.json | jq '.proofs'
# View a specific entry
cat rekor-proofs/log-entries/<uuid>.json | jq '.'
SBOM Verification
Verify Software Bill of Materials:
# Verify SBOM signature
cosign verify-blob \
--key cosign.pub \
--signature sbom/stella-cli.cdx.json.sig \
sbom/stella-cli.cdx.json
# Inspect SBOM contents
cat sbom/stella-cli.cdx.json | jq '.components | length'
Reproducible Build Verification
Stella Ops releases are reproducible. You can rebuild from source and compare:
# Get the SOURCE_DATE_EPOCH from manifest
SOURCE_DATE_EPOCH=$(cat manifest.json | jq -r '.sourceDateEpoch')
SOURCE_COMMIT=$(cat manifest.json | jq -r '.sourceCommit')
# Clone and checkout
git clone https://git.stella-ops.org/stella-ops.org/git.stella-ops.org.git
cd git.stella-ops.org
git checkout $SOURCE_COMMIT
# Set reproducible timestamp
export SOURCE_DATE_EPOCH
# Build
make release
# Compare checksums
sha256sum dist/stella-* | diff - path/to/evidence-pack/checksums/SHA256SUMS
Verification in CI/CD
For automated verification in pipelines:
# Download and verify in one step
curl -sSL https://releases.stella-ops.org/v2.5.0/evidence-pack.tgz | tar -xz
cd stella-release-2.5.0-evidence-pack
# Run verification with JSON output
./verify.sh --json > verification-result.json
# Check result
if [ "$(jq -r '.overall' verification-result.json)" != "PASS" ]; then
echo "Verification failed!"
jq '.steps[] | select(.status == "FAIL")' verification-result.json
exit 1
fi
Troubleshooting
"cosign: command not found"
Install cosign from https://docs.sigstore.dev/cosign/installation/
Checksum Mismatch
- Re-download the artifact
- Verify download completed (check file size)
- Try a different mirror if available
- Check for file corruption during transfer
Signature Verification Failed
- Ensure you're using
cosign.pubfrom the evidence pack - Check the signature file hasn't been corrupted
- Verify the artifact hasn't been modified
"Error: no matching entries in transparency log"
This can happen if:
- The artifact was signed with key-based signing (not keyless)
- The Rekor server is unreachable
- Use the bundled proofs in
rekor-proofs/instead
Security Considerations
- Verify the evidence pack itself - Download only from official sources
- Compare public key fingerprint - Verify
cosign.pubfingerprint matches published key - Check provenance builder ID - Ensure it matches expected CI system
- Review SBOM for known vulnerabilities - Scan dependencies before deployment