aere-docs/AERE-PQ-SCREEN-SUMMARY.md

64 lines
5.0 KiB
Markdown

# Spec 7: AerePQ-Screen (post-quantum compliance passport) - SUMMARY
> **Note added 2026-08-19.** Statements in this document that consensus on chain 2800 is (or remains) classical secp256k1 ECDSA QBFT were written before the post-quantum header anchor went live, and remain true for block-by-block finality. Since block 13,014,000 every 32nd block also carries, under its block hash, a certificate of validator Falcon-512 seals, and since block 13,034,000 a node rejects such an anchor block with fewer than three valid seals (f+1 of nine; eight or nine are carried in practice). That is a post-quantum checkpoint about every 16 seconds, not a per-block quorum: the claim published on 2026-08-15 that from block 14,050,000 no block finalizes without a post-quantum quorum was wrong (the per-block rule armed at that height is retired in the shipped code in favour of the anchor rules) and was withdrawn on 2026-08-19. Details: https://aere.network/quantum.html and the aere-node repository, anchor/README.md.
## What was built
Institution-grade post-quantum compliance passport for Aere Network, built ON the existing compliance
stack (AereZKScreen, AereCompliancePool, AereSanctionsRegistry, AerePQCKeyRegistry) without modifying
any deployed contract. Three new contracts + 1 test + 1 doc.
### Files (all new)
- `aere-contracts/contracts/compliance/AereTrustRegistry.sol`
- `aere-contracts/contracts/compliance/AereVerifiableCredential.sol`
- `aere-contracts/contracts/compliance/AereBitstringStatusList.sol`
- `aere-contracts/test/aere-pq-screen.test.js`
- `aerenew/docs/AERE-PQ-SCREEN.md`
### 1. AereTrustRegistry (federated accredited issuers, eIDAS-2.0-in-spirit)
- Foundation (Ownable, OZ v4.9.6) = trusted-list operator. Federated SET of accredited issuers.
- Issuer entry: controller/address (issuer id), did:aere DID, scope (bytes32 credential-type tags),
status (None/Active/Suspended/Revoked), optional Falcon-512 pqcKeyId in live AerePQCKeyRegistry.
- Fail-closed isAccredited; append-only status + scope history (no silent rewrite); terminal revocation.
- verifyIssuerSignature() routes Falcon-512 verify to live AerePQCKeyRegistry.verifyWithKey -> 0x0AE1.
### 2. AereVerifiableCredential (W3C VC 2.0 anchor + verify)
- Credential struct: issuerId, subjectDidHash (did:aere, hash only, no PII), credentialType, validFrom/
validUntil, statusListId+statusIndex (W3C BitstringStatusListEntry), claimsHash (off-chain claims commit).
- verifyPresented / isValid check: accredited + Falcon-512 sig via 0x0AE1 + within-validity + not-revoked.
- anchorCredential fail-closed, relayable (authorship = PQC sig); isValid re-checks live (flips on
suspend/revoke). anchorCredentialWithDid binds+emits did:aere string (enforces prefix + hash match).
### 3. AereBitstringStatusList (W3C Bitstring Status List + zk non-revocation)
- On-chain bitset (256-bit words), Revocation (monotonic/terminal) or Suspension (reversible) purpose.
- Controller-only mutation, no silent no-op. getWord exposes raw words for off-chain commitment.
- zk non-revocation: INonRevocationVerifier (SP1 gateway ABI: verifyProof reverts on invalid),
public-input shape DEFINED (chainId, statusListContract, statusListId, statusRoot,
credentialCommitment, purpose), on-chain freshness binding (statusRoot==publishedRoot AND
rootEpoch==epoch), fail-closed NonRevocationNotConfigured. The SP1 CIRCUIT itself = [MEASURE].
## REAL test result
`npx hardhat test test/aere-pq-screen.test.js` from aerenew/contracts:
**12 passing (2s).** solc 0.8.23. Uses repo MockPQCPrecompile at 0x0AE1 (scheme 1 Falcon-512) via
hardhat_setCode, same as erc8004-adapters test. Covers: accreditation lifecycle + append-only history +
terminal revocation + fail-closed accreditation; PQC-signed credential verify+anchor (0x0AE1),
relayable; revocation via status list flips verify to false; wrong-scope issuer cannot issue; tampered
Falcon sig fails closed (nothing anchored); issuer-suspension fail-closed + reinstatement recovery;
expiry rejection; did:aere subject binding (mismatch + non-aere rejected); zk non-revocation stub shape
+ freshness (mock SP1) + fail-closed unconfigured path.
## [MEASURE] flags
- SP1 non-revocation circuit NOT implemented (interface + public-input shape + freshness binding are).
- Bitstring status root is controller-attested via publishStatusRoot; on-chain/in-VM derivation pending.
## [VERIFY] flags
- Exact W3C VC 2.0 JSON serialization / member names.
- ONCHAINID claim-topic <-> credentialType mapping for concrete ERC-3643 interop.
- Finalized did:aere method registration + full DID Core syntax validation.
- W3C-recommended minimum status-list size (herd privacy) at deployment.
## Scope honesty
- PQC signature path is REAL (Falcon-512 via live 0x0AE1); consensus stays classical ECDSA QBFT.
- No PII on chain (DIDs are identifiers; claims committed by hash; status list is anonymous bitset).
- Institutional ADOPTION / eIDAS accreditation is a partnership/regulatory matter, NOT claimed in code.
- No em-dashes in prose; brand "Aere Network"/"Aere", ticker AERE.