Verifying evidence bundles
Verify that an evidence bundle was produced by Tachyonic and has not been tampered with
Overview
Every artifact emitted by a Tachyonic runtime is signed with an Ed25519 key managed by Tachyonic. A small evidence manifest is written alongside the artifact and carries:
- The SHA-256 of the artifact bytes
- The signature over that hash
- The key identifier
- An optional Rekor transparency-log entry that recorded the signature publicly
The CLI ships a tachyonic verify command that validates the manifest end-to-end. The verifier is fully offline once you have the published public key — your scan data never leaves your machine.
Quick start
tachyonic verify ./tachyon-scan.manifest.jsonYou can pass any of:
- a manifest file (
*.manifest.json) - the artifact file itself (the verifier finds the adjacent manifest)
- a directory containing both
A passing verification prints:
OK artifact: ./tachyon-scan.json
manifest: ./tachyon-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 the verification:
- the artifact bytes don't match the recorded SHA-256 (tampering)
- the signature doesn't validate against the published public key (forged or wrong key)
- the manifest's
key_idisn't in the published bundle (unknown signer)
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 all keys that have ever been used to sign artifacts — retired keys carry a retired_at date. This means historical artifacts continue to verify after a rotation.
Air-gapped or offline verification
If you can't reach tachyonic.sh, save the public key locally and pass it explicitly:
# Save once, anywhere reachable to you
curl -s https://tachyonic.sh/.well-known/signing-pubkey.json \
| jq -r '.keys[0].pem' > ~/.tachyonic/signing-pubkey.pem
# Verify offline thereafter
tachyonic verify ./tachyon-scan.manifest.json \
--pubkey ~/.tachyonic/signing-pubkey.pemYou can also point at a private mirror with --pubkey-url.
The Rekor transparency log
When the runtime can reach https://rekor.sigstore.dev, it publishes a hashedrekord entry recording (sha256, signature, public-key). The entry is publicly visible and append-only — it proves the signature existed at the time Rekor accepted it.
If Rekor is unreachable, the manifest is emitted without the entry and verification still succeeds locally; you simply don't get the public-log inclusion proof.
To disable Rekor (e.g. an air-gapped runtime), set TACHYONIC_REKOR_DISABLED=1 on the runner.
What verification does not guarantee
- It does not prove the scan ran in a specific region or cluster. That's covered by the in-toto attestation predicate in Phase B.
- It does not prove the substrate ran a clean build. That's SLSA provenance, Phase C.
- It does not protect against a compromised signing key. Key rotation and revocation are the operator's responsibility; check the published bundle's
retired_atdates before trusting an oldkey_id.
What it does guarantee: the artifact bytes are exactly what Tachyonic signed, and the signer held the private key matching the published public key.