TachyonicTachyonic

Verifying evidence bundles

Verify that an evidence bundle was produced by Tachyonic and has not been tampered with

Overview

Signed runtime evidence consists of a result bundle and an adjacent evidence manifest. The manifest carries:

  • The SHA-256 of the artifact bytes.
  • The Ed25519 signature over that hash.
  • The signing key identifier.
  • An optional Rekor transparency-log entry.

The default production runtime path emits signed evidence. Paid regional paths are being validated separately; always run tachyonic verify on the exact bundle you plan to retain or share.

The CLI ships a tachyonic verify command that validates the manifest end to end. Once you have the published public key, your scan data stays local during verification.

Quick start

tachyonic verify ./tachyonic-scan.manifest.json

You can pass any of:

  • a manifest file (*.manifest.json)
  • the artifact file itself, when the adjacent manifest is present
  • a directory containing both

A passing verification prints:

OK  artifact:    ./tachyonic-scan.json
    manifest:    ./tachyonic-scan.manifest.json
    sha256:      ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
    key_id:      tachyonic-signing-2026-05
    signed_at:   2026-05-29T10:00:00+00:00
    rekor:       4f2c...b7e1 (logIndex 8123410)
    rekor URL:   https://rekor.sigstore.dev/api/v1/log/entries/4f2c...b7e1

Any of these fail verification:

  • the artifact bytes do not match the recorded SHA-256
  • the signature does not validate against the published public key
  • the manifest's key_id is not in the published key bundle

Download from a runtime

Use the artifacts API after tachyonic runtime watch <runtime_id> reaches completed:

mkdir -p "tachyonic-evidence/$RID"

curl -sS \
  -H "x-api-key: $TACHYONIC_PLATFORM_KEY" \
  "https://api.tachyonic.sh/api/v1/runtimes/$RID/artifacts?limit=100" \
  | jq -r '.data[]
      | select(.type == "finding_bundle_v1" or .type == "evidence_manifest_v1")
      | [.filename, .url]
      | @tsv' \
  | while IFS="$(printf '\t')" read -r name url; do
      curl -fsSL "$url" -o "tachyonic-evidence/$RID/$name"
    done

tachyonic verify "tachyonic-evidence/$RID"

Fetching artifacts records evidence retention for product telemetry when signed evidence is present.

The published public key

The active signing public key lives at:

https://tachyonic.sh/.well-known/signing-pubkey.json

Shape:

{
  "keys": [
    {
      "key_id": "tachyonic-signing-2026-05",
      "algorithm": "ed25519",
      "pem": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----\n",
      "active_from": "2026-05-29"
    }
  ]
}

The bundle returns keys used to sign artifacts. Retired keys carry a retired_at date. Historical artifacts can continue to verify after ordinary key rotation.

Offline verification

If you cannot reach tachyonic.sh, save the public key locally and pass it explicitly:

curl -s https://tachyonic.sh/.well-known/signing-pubkey.json \
  | jq -r '.keys[0].pem' > ~/.tachyonic/signing-pubkey.pem

tachyonic verify ./tachyonic-scan.manifest.json \
  --pubkey ~/.tachyonic/signing-pubkey.pem

You can also point at a private mirror with --pubkey-url.

Rekor transparency log

When the runtime can reach https://rekor.sigstore.dev, it publishes a hashedrekord entry recording the artifact hash, signature, and public key. The entry is public and append-only.

If Rekor is unreachable, the manifest is emitted without the entry and local verification still succeeds. In that case the output shows rekor: none.

To disable Rekor in an air-gapped runner, set TACHYONIC_REKOR_DISABLED=1.

Current boundaries

Verification proves that the artifact bytes are exactly what Tachyonic signed, and that the signer held the private key matching the published public key.

Verification does not yet prove a specific runtime region, runtime policy, supply-chain provenance, hosted signing identity, or framework conformance.

Structured runtime attestation is planned for Phase B. It will be documented separately when it ships.

On this page