← 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 storage | Signed hash chain | |
|---|---|---|
| Prevents edits | Yes, inside that bucket | No |
| Detects edits | No: a copy outside the bucket is just a file | Yes, anywhere the file travels |
| Who must you trust | The storage provider and its configuration | Only the math and a public key |
| Survives export | No, the guarantee stays in the bucket | Yes, the proof travels with the data |
| Detects events written wrong at source | No | No |
| Proves which system wrote it | No | Yes, with a signature |
| Catches deleted tail events | Only if the bucket was locked in time | Only 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:
- Sign and chain at the source, so every run is verifiable wherever it goes (see tamper-evident logs).
- Store in WORM for the retention period, so deletion and overwrite are blocked operationally (see log retention).
- 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.