pqc-migration-toolkit/notarizare/README.md
Aere Network 04f735eda6 The free scan now carries the confidence label, not just the colour
Measured 2026-08-16: a 42-byte contract that merely STORES the constant 0x0AE1 and
never calls anything still scores GREEN, with the reference marked medium
confidence. So the headline colour does not separate a resolved call from a bare
constant, and a client who tests that in five minutes would find it before we
admitted it.

The scan text now says, per address, whether a CALL to each verifier resolved from
the bytecode or whether only the address is present, and says plainly that a
present address can also be plain data. The colour stays what the scanner
computes; the sentence next to it carries what it means.
2026-08-17 11:24:34 +03:00

69 lines
3.6 KiB
Markdown

# The notarization half: issue a certificate, and check one without asking us
A notarization is worth exactly as much as an outsider's ability to check it without asking the
notary. So the verifier is here, it installs nothing, and it takes `--rpc` so you can point it at a
node you operate.
## Check a certificate
node verifica-certificat.mjs certificate.json --fisier your-document.pdf --rpc https://your-node
Five links, each reported separately as PASS, FAIL or NOT MEASURED:
1. the file you hold hashes to the digest the certificate names;
2. the transaction named exists, succeeded, and called the named registry;
3. the transaction sits in the block named, and the chain serves the same block hash;
4. the attestation was recorded **only because** a NIST post-quantum signature verified on chain,
inside that transaction, by a live precompile. Re-checked on every run through the registry's own
free read method;
5. the block is covered by the chain's post-quantum validator certificate.
## The three verdicts, and why the third is not an accusation
0 every measured link holds
1 something does not hold, and the FAIL line names which link
2 nothing could be measured, which is neither a pass nor a rejection
**The difference between 1 and 2 is the honesty of the tool.** "The node did not answer" and "the
node answered and holds no such transaction" are different facts, and only the second says anything
about the certificate. Until 2026-08-17 this tool confused them: with an unreachable endpoint it
told the holder that **their certificate does not hold up**, turning a network problem on our side
into an accusation of forgery against the client. That is the worst way a notarization product can
be wrong, and it is fixed.
## Prove the verifier can reject, before you trust it to accept
`controale/` holds five certificates, each with exactly one lie planted in it: a falsified document
digest, a falsified block hash, a transaction that does not exist, a foreign registry, and a wrong
per-key counter. Run them:
for f in controale/*.json; do node verifica-certificat.mjs "$f"; done
Measured 2026-08-17: all five exit 1. The genuine certificate in `certificat-exemplu.json`, built
from a real attestation on chain 2800 at block 9,200,542, exits 0. An unreachable node exits 2 with
every line NOT MEASURED.
## Issuing: it never signs anything, on purpose
node emite-certificat.mjs pregateste document.pdf # unsigned request + the challenge
... the key holder signs the challenge and submits the transaction ...
node emite-certificat.mjs finalizeaza cerere.json --tx 0x...
The tool produces an **unsigned** transaction and the challenge the post-quantum signature must
cover. Signing is a separate act by whoever holds the key, in a wallet they control. A notarization
service that quietly holds a hot key and signs on your behalf has made itself the thing you were
supposed to be able to check.
The challenge is **asked of the chain**, never rebuilt locally: the contract exposes it, and a local
reimplementation of that preimage differing by one byte would produce a signature the chain rejects,
which looks exactly like a forgery instead of like our bug.
And the finalise step runs the verifier above before writing the certificate, so a certificate is
never handed over unverified.
## What this does not claim
It does not say the document is true, lawful, or anyone's. It proves that **that** digest existed on
chain at **that** time, under a post-quantum signature, in a block covered by the validator
certificate. What that means legally depends on jurisdiction and is not asserted here.