← Vetro Attest · Free Art. 12/14 checker · Free EU AI Act tools

Hash chain vs. WORM storage for AI logs

Two approaches come up whenever someone asks for "immutable logs": WORM storage (write once, read many: S3 Object Lock, immutable blob storage, compliance-mode buckets) and cryptographic tamper evidence (hash chains plus signatures). They are often treated as substitutes. They are not.

What each one protects

WORM storageSigned hash chain
Prevents editsYes, inside that bucketNo
Detects editsNo: a copy outside the bucket is just a fileYes, anywhere the file travels
Who must you trustThe storage provider and its configurationOnly the math and a public key
Survives exportNo, the guarantee stays in the bucketYes, the proof travels with the data
Detects events written wrong at sourceNoNo
Proves which system wrote itNoYes, with a signature
Catches deleted tail eventsOnly if the bucket was locked in timeOnly with external anchoring

The export problem

Evidence is only useful when you hand it to someone: an auditor, a customer, a regulator, a court. The moment you export a log from a WORM bucket, the recipient receives an ordinary file and has to take your word that it matches what was stored. A signed hash chain carries its own proof: the recipient runs a verifier and gets a yes or no without access to your cloud account.

The configuration problem

WORM guarantees depend on retention settings, governance vs. compliance modes, and who holds the admin role. Those are real controls, but they are claims about your infrastructure that an outsider cannot check from the file itself.

So which one?

For AI agent logs used as accountability evidence, both, layered:

  1. Sign and chain at the source, so every run is verifiable wherever it goes (see tamper-evident logs).
  2. Store in WORM for the retention period, so deletion and overwrite are blocked operationally (see log retention).
  3. Anchor externally for runs that matter, so truncation is detectable too.

Vetro

Vetro writes step 1 by default: a hash-chained, ed25519-signed JSONL ledger per run, which you can drop in any bucket. Vetro Attest covers step 3: free verification, plus a 29 USD counter-signed EU AI Act report for runs you need to stand behind.

See a sample ledger verified in one click, check your own logs free or get the countersigned EU AI Act report.

Pricing