Check a record without trusting BotNotice
A record you can only check by asking the company that keeps it is weak proof. So once a day we hand a fingerprint of every record we hold to outside services that sign the date and time. After that, we can't change a record or backdate one without it showing. Anyone can check this with free tools, and nobody needs our help to do it.
What happens each day
- One fingerprint per website. Each website's record is a chain: every row carries the fingerprint of the row before it. So the newest row's fingerprint stands for the whole record.
- One fingerprint for everything. The newest fingerprint of every website goes into a hash tree. The top of the tree, the root, stands for every record we hold at that moment.
- Outside time stamps. The root goes to 3 time-stamping services run by different companies (timestamp.digicert.com, timestamp.sectigo.com, freetsa.org). Each returns a signed token that says this fingerprint existed at this time. We store the tokens exactly as they arrive and publish them below.
- A second, slower anchor. The root also goes to OpenTimestamps calendars, which commit it to the Bitcoin blockchain within a few hours.
- A signed checkpoint. We sign a short note with the tree's size, its root and the previous day's root. Each day points at the one before, so the days form a chain of their own, and a new stamp also covers every older day.
What this proves: the record existed, unchanged, at the stamped time. It does not prove that a visitor read the notice, and it is not a legal finding.
Check one website's record yourself
- Get the proof file for the website:
/proof/site/<site key>. The site key is the code in the website's notice script address. The file holds the record's newest fingerprint, its place in the tree, and the sibling fingerprints up to the root. - Recompute the root. The leaf is
SHA-256(0x00 || "<site key>:<newest fingerprint>"). Then, walking up, each step isSHA-256(0x01 || left || right). This is the hashing of RFC 6962, the same one certificate transparency logs use. - Download a time stamp token for that day and check it against the root with OpenSSL:
The first command shows the time and the fingerprint the service signed. The second checks the signature. For DigiCert and Sectigo, the certificate file is the standard bundle that comes with OpenSSL or your operating system. FreeTSA publishes its own root certificate on its website.openssl ts -reply -in token.tsr -text openssl ts -verify -digest <root in hex> -in token.tsr -CAfile <the service's root certificate> - To check that the record itself matches the newest fingerprint, the website's owner downloads the rows as a CSV from their dashboard and recomputes the chain. Each row's fingerprint is the SHA-256 of these fields joined with
|, in this order: the site id (the code in the dashboard address), event, page, country, region, visitor fingerprint, the time in ISO form, and the previous row's fingerprint. Then, when present: the session id; thenv2, channel, notice version and the meta as JSON with sorted keys; thenv3, vendor name, vendor conversation id, linkage and when the id was read. What each field means is on how the disclosure record works.
The last 30 days
| Day (UTC) | Records in the tree | Root | Time stamps | Bitcoin anchors | Witnesses | Checkpoint |
|---|---|---|---|---|---|---|
| 2026-11-11 | 3 | 01745be0a26dbbf4… | 3 | 2 | 0 | Open |
| 2026-11-10 | 3 | 01745be0a26dbbf4… | 3 | 2 | 0 | Open |
Tokens for 2026-11-11
Root: 01745be0a26dbbf41750b31daa3ba4847b8bcf6abd3b58a17e02cbf22c8ab5e2
- RFC 3161, timestamp.digicert.com: download (stamped 2026-11-11T00:20:09Z)
- RFC 3161, freetsa.org: download (stamped 2026-11-11T00:20:09Z)
- RFC 3161, timestamp.sectigo.com: download (stamped 2026-11-11T00:20:09Z)
- OpenTimestamps, b.pool.opentimestamps.org: download (submitted; the calendar commits it to Bitcoin within hours)
- OpenTimestamps, a.pool.opentimestamps.org: download (submitted; the calendar commits it to Bitcoin within hours)
Witnesses
A time stamp shows when a root existed. A witness adds something else: an outside party that has seen each day's checkpoint and signed it with its own key, so we can't show different histories to different people. No outside witness has signed on yet. The mechanism is live and open to law firms, auditors and industry groups that want to run one.
Checkpoints use the signed note format of transparency logs (C2SP tlog-checkpoint), and witness signatures use its cosignature format. Our log's name is botnotice.app/record and its Ed25519 public key, in base64, is cFYrfBucbJZaFfv0ZllGEfGnppwkRYdO1TSj+1u9aNA=. The same key is listed at /.well-known/jwks.json. To become a witness, email john@botnotice.app.
Limits worth knowing
- No court has ruled on a record like this one. The method is the one used to secure software downloads and website certificates, and we publish it so it can be examined.
- A time stamp covers the records as they stood that day. Rows written later are covered by the next day's stamp.
- If a time-stamping service is down, that day may carry fewer tokens. We ask at least two unrelated services so no single one has to be trusted or available.
- Outside time stamps are included on plans with records.
