Witness
A public record that already existed when a subject was submitted and that the subject's composite fingerprint commits to, opening the submitted-after edge of the submission window; the registry is the head block plus one entry per captured entropy source, plus the signing-key event.
Overview
A witness is a public record that already existed at the moment you submitted, and that your submission’s composite fingerprint commits to. Each witness is named and stored as a hash inside the item’s system-generated metadata, so hashing that metadata folds every witness into the metadata hash and from there into the item hash: which witnesses an item names is fixed at submission and can never be chosen or revised afterwards. Witnesses are what open the submitted-after edge of the submission window, because a record that already existed cannot have been produced later. Their mirror image is a commitment, a public-blockchain transaction recorded after submission that closes the submitted-before edge. A proof bundle may carry the full detail of each witness so that a verifier can rehash it and confirm the match without contacting Truestamp.
The witness registry
Witness names are a long-lived contract: a name is never renamed and never removed, and a new kind of witness claims a new name.
| Name | What it records | What a confirmed witness establishes |
|---|---|---|
block |
the hash of the internal block at the head of Truestamp’s chain when you submitted | that block already existed, and it fixes where in the chain your submission sits |
entropy_stellar |
the hash of the newest captured Stellar ledger entropy observation | submitted after that ledger’s close time |
entropy_nist |
the hash of the newest captured NIST Randomness Beacon observation | submitted after that pulse’s publication time |
entropy_bitcoin |
the hash of the newest captured Bitcoin block observation | submitted after that block header’s time, read conservatively |
signing_key_event |
the ledger block that introduced the key which signed the proof | the signing key was itself introduced by a publicly committed event |
The block witness is always present. Each entropy witness rides along only when that
source had captured at least one observation by the time you submitted; a source with
nothing captured simply contributes no name, and never a null. Naming fewer witnesses only
makes the submitted-after claim more conservative, so entropy never blocks a submission.
signing_key_event is the one entry that is not part of an item’s metadata. It witnesses
the proof’s Ed25519 signature rather than the
submission, so a bundle carries it at the top level rather than inside the subject. See
Ed25519 signatures for how it is checked alongside
the pinned keyring.
Confirming a witness
A verifier confirms a witness in two independent stages.
- Rehash the carried detail. The bundle carries the witness’s own bytes: the head
block’s five fields for
block, and the captured payload exactly as published for each entropy witness. Recomputing the hash from those bytes and comparing it to the hash the metadata commits to proves the bundle names the record it claims to name. This stage needs no network access. - Look the record up at its public source. Fetching the Stellar ledger, the NIST pulse, or the Bitcoin block from its own public source, and comparing the published fields, proves the record is real and pins the published time the edge rests on. This stage needs network access and is skipped when a verifier is offline.
Both stages are recorded in the verification report; see verify a proof.
Extensibility
A verifier hashes the carried metadata exactly as it finds it, so a witness name a given verifier does not recognize never breaks the fingerprint or fails the proof: it is reported as skipped, with a note that the name is unrecognized. That is what allows a new kind of witness to be added without changing the bundle format version, and it is why names are never reused for a different meaning.
Limitations
- A witness establishes only that its record already existed. It says nothing about when the submitted data was created or who wrote it; see what Truestamp does not prove.
- A witness whose detail is not carried in a bundle cannot be confirmed from that bundle alone. The metadata still names it, so the fingerprint is intact and the edge is still committed, but establishing it then requires fetching the record from Truestamp.
- An entropy source that freezes and republishes an old value still confirms as existing. Existence is confirmable; freshness is not. See entropy verification levels.
- Block (Truestamp block)
- Commitment
- Ed25519 Signatures
- Entropy observation
- Entropy Verification Levels
- External Entropy Sources
- Item hash
- Metadata hash
- Proof bundle
- Proof Bundle Wire Format
- Submission window
- Submission Window
- The Item's Composite Fingerprint
- Verify a Proof
- What Truestamp Does Not Prove
- Block hash
- Byte-Prefix Registry
- Domain separation
- Domain-Separated Hashing (SHA-256 Byte Prefixes)
- Ed25519 Signatures
- Entropy observation
- Entropy source
- Entropy Verification Levels
- External Entropy Sources
- Item
- Item Commitment vs Block Commitment
- Item hash
- Item Lifecycle
- Item Ownership vs Authorship
- JCS (JSON Canonicalization Scheme)
- Merkle Inclusion Proofs
- Metadata hash
- Proof bundle
- Proof Bundle Wire Format
- Proof Claims by Availability
- Public Randomness Beacons
- Submission window
- Submission Window
- Submit an Item
- The Item's Composite Fingerprint
- The Proof Lifecycle
- Verify a Proof
- What Truestamp Does Not Prove
- What Truestamp Proves