Ask a team how they would prove what their AI agent did, and many will reach for signatures. Ed25519. HMAC. A hash chain. These are good cryptographic primitives. But they do not prove what most people think they prove.

"Tamper-evident" is a precise term that is easy to misread. Understanding where it stops — and where a public anchor begins — is the difference between a record an auditor can verify and a record an auditor must simply believe.

What tamper-evident actually means.

A tamper-evident record is one where any modification is detectable after the fact. The mechanism is cryptographic hashing: compute a hash of the record at capture time; later, recompute it. If the hashes match, the record has not changed. If they diverge, it has.

This is fast, reliable, and entirely mathematical. It works. And it answers exactly one question: has this record changed since the reference hash was computed?

It does not answer the question underneath: who computed the reference hash, when, and can I trust that they did so faithfully at the moment the decision happened?

The signature problem.

Most "tamper-evident receipt" systems work like this: the system signs its own records. The party that made the decision holds the signing key. You verify the signature against the public key. If the record and the signature match, the record has not changed since it was signed.

But signing and signing-at-the-right-time are different things. The same party that made the decision also held the key. That means they could, in principle:

A signature tells you: this record was signed by the holder of this key. It does not tell you: this record was created at the moment the decision happened and faithfully describes it.

To an independent auditor — a regulator, a counterparty, an external compliance team — a signature is still a trust claim. "Trust our key infrastructure" is better than "trust our database entry," but it is not fundamentally different in kind. The party that made the decision is still in the trust path.

This is the gap between tamper-evident and operator-independent.

A signature proves who signed. A public anchor proves when — without trusting the signer.

What a public anchor adds.

A public anchor works differently. Instead of asking a key-holder to attest to the record, you commit the record's digest to a public, append-only log — a log that neither you nor any single party can control or rewrite.

The mechanism in practice: OpenTimestamps takes any SHA-256 digest, aggregates many of them into a Merkle tree, and commits the root to the Bitcoin blockchain. The proof that a specific digest was included in that tree is a compact binary object: an OpenTimestamps proof file. Anyone with that proof file and read access to the public blockchain can verify — independently, offline, without contacting any server — that the digest existed before a specific block's timestamp.

What this changes in the trust model:

A public anchor is the difference between "trust our signature infrastructure" and "check the maths yourself."

For compliance purposes, this matters. An auditor who receives a signature-backed record must decide whether to trust the signing party's key management. An auditor who receives an anchor-backed record can verify existence-in-time without trusting anyone — including us.

What even a public anchor does not prove.

This is equally important to state clearly.

A public anchor proves two things about a record:

What it does not prove:

The honest framing is: the record is accountable, not correct. Accountable means the producer is locked into a specific claim. If they stated the model returned X, and the record is anchored, they cannot later claim the model returned Y. The anchor creates accountability for the stated record. It does not validate the underlying reality against which the record was written.

This is not a limitation of the approach — it is an honest description of what cryptographic timestamping can and cannot do. And it turns out that accountability is precisely what auditors and regulators are looking for: not a guarantee that the AI made the right call, but a commitment to what it claimed to have done. That is the layer where an audit starts.

The record is accountable, not correct. Accountability is exactly what an audit needs.

The layered picture.

These distinctions map cleanly onto a layered architecture:

Most systems implement the first two layers. The public anchor is the layer that makes the record independently verifiable — and the layer that most current AI audit systems skip or treat as optional.

How Determs implements this.

A Verifiable Decision Record carries all four layers in a single self-contained JSON object. The receipt holds the four digests (record, subject, input, output) computed by canonicalizing the record per RFC 8785 (JCS) and hashing with SHA-256. The anchor is pluggable — the spec supports any append-only public log as an anchor type; the current default is OpenTimestamps.

Verification is a single CLI command:

$ determs verify --record ./record.json

{
  "verified": true,
  "profile": "ai.agent.action",
  "record_digest": "44f2b549...",
  "checks": {
    "subject_digest": true,
    "record_digest": true,
    "input_digest": true,
    "output_digest": true
  }
}

The verifier does not need an account with us, a running service, or trust in our key infrastructure. The spec is open (CC-BY-4.0), the reference implementation is open-source (Apache-2.0), and the anchor resolves against public infrastructure.

If you have AI decisions in production that need to be auditable — for a regulator, a counterparty, or your own incident response — the distinction between tamper-evident and operator-independent is not academic. It is the difference between a record that stands up in a dispute and one that only holds until someone has a reason to question it.

Verify a record yourself, read the spec, or see the implementation guide for a step-by-step walkthrough with working code.