Seal
info
This feature needs a Pro plan subscription.
Seal is a verifiable timestamp mechanism for cryptographically proving that a note is created before a specific time. The seal proof for a new note is generated in 12 hours after creation, and you can download it through the "Seal" entry in the note menu.

Verifying proofs​
Proofs generated by Seal can be verified with the sealcheck tool.
$ ./sealcheck validate ./seal_proof.json
SealCheck: ./seal_proof.json
Validation OK. Certificate issued at 2022-06-01 01:12:23 +0000 UTC.
How Seal works​
Seal works by periodically rolling up Planet's event log into a Merkle tree and submitting the root of the tree to the Certificate Transparency public ledger by requesting a certificate for the domain name [root-hash].production.planet-seal.net
. The architecture is illustrated below.

The structure of a proof​
The following is an example proof. The proof is valid - try checking it using sealcheck
!
{
"logValue": "{\"ts\":1653871071342,\"data\":{\"type\":\"create_note\",\"user\":\"zhy\",\"id\":\"2022-05-30-7e169a5dfddc\",\"origin\":{\"type\":\"web\"},\"note\":{\"realTs\":1653871071342,\"content\":\"https://ubuntustudio.org/ #shortcut\",\"private\":true,\"forwardLinks\":[]}}}",
"rootHash": "vZBB2DFg8SS0LCu/CkDqPzYYnRXTPPQHvOuhFkYAats=",
"domain": "xwiedwbrmdysjnbmfo7quqhkh43brhiv2m6pib545oqrmrqanlnq.production.planet-seal.net",
"proof": [
"AElz0vb1S8vdJo2QVOryxRaOutuUw3oFprF55UAjvw0S",
"AeVdFN83O0QW43DqkHNreLNiZ6CgTvEi6kNtYGn0zxAh",
"AD5A9aCfc83IoOc96BIEiQwgE1NQGd/GBdAEpyxjlMkX",
"ABsLhSl5zWfscabxEjympsASlerDD3Dsbx8WTU2Grnwi",
"AIFRX7NhUcBniuu96XAA/zAACxSVejBEmDkXiNAWP1mZ",
"AKuostHnzK0jQWplkXgEFGQ+J0+mzwmOyVRplXQfydmt",
"Ac7mgWiVLpN6bNN9GrRRgQKRM5qTKfQcNd1A5CU6fmVY",
"Ab5q+HSS7DtMXxGeu9+IBvQ6ZBThOtKHRjS/bo33cxNf",
"AIGtmYM9SzsmKhScFllg4zBzK4jOrr7uiLfzud7Q9CPr"
]
}
Field semantics:
logValue
: The content of the event log entry.rootHash
: Base64-encoded root hash of the Merkle tree.domain
: The domain for which a TLS certificate has been issued and logged to CT. The first segment of the domain is the base32-encoded root hash of the Merkle tree.proof
: Base64-encoded Merkle tree inclusion proof. Each entry is 33-byte long:- Byte 0: 0 if this node is the left child of its parent, 1 otherwise.
- Byte 1-32: The hash value of the sibling node.
Plausible deniability​
We want to ensure that seal proofs are purely voluntary. While a seal proof does prove the timestamp property, a third party shouldn't assume that if you have written something, you will be able to present a proof for it.
To achieve this, we only provide automatic proof retrieval for the current version of a note. Proofs for deleted notes and older versions of existing notes are not accessible.
Meanwhile, if there is a reason and you need to request the proof for a historic version, please send us an email at [email protected].