Hashes, logs and verification

Every row in the explorer shows hashes. This page says what each one is and how to check the ledger yourself.

The hashes you will see

NameWhat it is
Subject hashA BLAKE3 hash that binds the dropped detail text and the run id. It proves, later, that a specific text existed, without storing it. For evidence: BLAKE3("entropa-evidence-subject-v1" 0x00 || frame(detail) || frame(run_id)). For AI decisions the input, output and run id are bound the same way. Each part is framed by an 8-byte big-endian length so moving a byte between parts changes the hash.
Leaf hashThe hash of the whole stored record, the leaf of the Merkle log.
Merkle rootThe single hash that summarises every record up to a given size. A checkpoint signs it.
SignatureAn ML-DSA-65 (post-quantum) signature over each event and over each checkpoint, so edits are detectable.

What a checkpoint is

After each event the node signs a checkpoint: the Merkle root and the ledger size at that moment. Checkpoints only grow. A later record can never rewrite an earlier one, because the earlier roots were already signed.

Verify the ledger

entropa-platinum verify ./node            # AI decisions
entropa-platinum verify-evidence ./node   # audit evidence
OK records=6 checkpoints=6

Verification re-reads every record, checks each signature, checks every checkpoint and checks that the last checkpoint covers every record. Change one byte of any record and it fails. The exported bundle also carries the full record bytes and checkpoint signatures, so anyone can repeat all of this without the node.

Export a bundle for others

entropa-platinum export-evidence ./node > health-ledger.json

The export verifies first and fails if anything is wrong. The bundle holds, for every record, the codes, counts, plain-English sentence, subject hash, leaf hash, signer key id and the start of the signature, plus every checkpoint and the full public key. It holds no detail text.

Checking independently

  1. Download the bundle from the explorer and take the public key from it.
  2. Recompute each event's canonical bytes (keys sorted, no whitespace, without the signature) and verify the signature with any ML-DSA-65 (FIPS 204) library.
  3. Check the Merkle rules in the specification.

Verify in your browser

The the evidence explorer that runs with your node has a Verify in your browser button. It checks every event signature (ML-DSA-65), every leaf hash, every checkpoint's Merkle root and signature, using only the public key in the bundle, with a single self-contained script served from the same site. Nothing is sent anywhere, and it does not trust the "verified" line the node wrote: change one byte of the bundle and it reports exactly what broke. The same checks can be run in Node with the open @noble/post-quantum and @noble/hashes libraries; the rules are in the specification.

Honest limits. The ledger proves recorded events were not altered. It cannot prove nothing was left out, so the emitters are part of your controls.