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.jsonYou 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...b7e1Any 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_idis 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.jsonShape:
{
"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.pemYou 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.