Time Anchor Trust Roots

This guide defines the minimal, deterministic bundle format Stella Ops uses to distribute the trust roots that validate time tokens (Roughtime and RFC 3161) in sealed, air-gapped deployments. It is written for operators who package the offline kit and for engineers wiring the AirGap Time service.

For the API that consumes these roots, see AirGap Time API. For the broader staleness and time-anchor model, see Staleness and time.

Artefacts

Bundle format (time-anchor-trust-roots.json)

{
  "version": 1,
  "roughtime": [
    {
      "name": "stellaops-test-roughtime",
      "publicKeyBase64": "BASE64_ED25519_PUBLIC_KEY",
      "validFrom": "2025-01-01T00:00:00Z",
      "validTo": "2026-01-01T00:00:00Z"
    }
  ],
  "rfc3161": [
    {
      "name": "stellaops-test-tsa",
      "certificatePem": "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----",
      "validFrom": "2025-01-01T00:00:00Z",
      "validTo": "2026-01-01T00:00:00Z",
      "fingerprintSha256": "HEX_SHA256"
    }
  ]
}

Usage guidance

Local harness overrides

These switches relax verification for local development and automated tests only. They must stay disabled in any sealed production deployment.

Generating a throwaway dev root

To exercise the verification path end-to-end before production roots are issued:

  1. Generate an Ed25519 key pair for Roughtime:
    openssl genpkey -algorithm Ed25519 -out rtime-dev.pem
    openssl pkey -in rtime-dev.pem -pubout -out rtime-dev.pub
    
  2. Base64-encode the public key (base64 -w0 rtime-dev.pub), place the value into publicKeyBase64, and set a short validity window.
  3. Point AirGap:TrustRootFile at your edited bundle and set AirGap:AllowUntrustedAnchors=true (dev only).

Production readiness checklist