pqc-migration-toolkit/VERIFY-US.md
Aere Network de9a79298c Aere PQC migration toolkit: measure an address quantum exposure from its bytecode
Zero dependencies, no account, no API. Every command takes --rpc, so it runs
against a node you operate and never needs ours. That is the point: an exposure
measurement you cannot re-run is an opinion with a logo on it.

Ships with two self-checks meant to be run by you, not just by us. The second,
proba-vocabular.mjs, exists because of a real defect found on 2026-08-16: the
scanner emits RED / YELLOW / GREEN, two downstream files each wrote their own
copy of that list, and both wrote AMBER, so a hybrid contract, exactly a client
who has already started migrating, was reported as unmeasurable. Both sides were
self-consistent, so nothing we had could see it. The vocabulary now has one
exported source, and the test walks the whole path with a negative control that
makes it able to fail.

The same scanner returns RED about our own contracts. See VERIFY-US.md.
2026-08-17 10:31:31 +03:00

49 lines
2.6 KiB
Markdown

# Check us, do not trust us
This toolkit exists so that nothing we say about quantum exposure has to be taken on faith,
including what we say about our own chain.
## Run it against a node we do not control
node scan.js <address> --rpc https://your-own-node
Every command here takes `--rpc`. None of them requires our endpoint, our API, or an account with
us. If your number differs from ours, that difference is the interesting part and we want to hear
about it.
## Run it against us, and expect it to be unkind
The same scanner that produces a client report produces our own findings, and it returns RED about
our own contracts. Measured 2026-08-16 on three of our live addresses: two GREEN, one RED. A vendor
whose tool has never returned a red verdict about the vendor is selling a brochure.
## Prove that the tool can fail
Two self-checks ship with it, and both are meant to be run by you, not just by us:
node selftest.js the analysis fixtures, including cases the scanner used to get wrong
node proba-vocabular.mjs every verdict survives the whole path from scanner to client wording
The second one exists because of a real defect. The scanner emits RED / YELLOW / GREEN, and two
downstream files each wrote their own list of those words, and both wrote AMBER. So a hybrid
contract, which is exactly a client who has already started migrating, was being reported as
"we could not measure this address". Both sides were self-consistent, so no test we had could see
it. The fix was to give the vocabulary one exported source that the consumers call.
That test carries a negative control on purpose: an input with no verdict must still come out as
NOT MEASURED. Without it, the test would pass even if the reader returned a constant, and would
prove nothing. You can verify that claim yourself: change `VERDICTE` in `lib/bytecode.js` to
contain AMBER instead of YELLOW, run `node proba-vocabular.mjs`, and watch it exit non-zero.
## What the tool does not do
It reads bytecode and what that bytecode can reach. It does not read your repositories, your TLS
configuration, your dependencies, your key custody or your HSMs. When it cannot settle a question
from bytecode alone, it says so in the output with a `[VERIFY]` or `[MEASURE]` marker, and every
report that uses it carries those markers through word for word instead of smoothing them away.
A live post-quantum verifier reachable from a contract does **not** make that contract
quantum-safe. If the transaction that calls it is authorised with ECDSA, an adversary forges the
outer transaction and the verifier is irrelevant. Anyone selling you the opposite can be taken
apart in five minutes.