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

6.4 KiB

Spec 7: AerePQ-Screen (post-quantum compliance passport) - SUMMARY

Note added 2026-09-24 (consensus). Where this document says that consensus is classical secp256k1 ECDSA and not post-quantum, read it as the per-block finality statement it was until block 24,300,000 (AIP-22 stage 4, 2026-10-25). Since that block every validator attributes a consensus vote only through its verified post-quantum seal, and a block is post-quantum final once the next anchor, at most 32 blocks later, carries the certificate that covers it; headers still carry classical ECDSA commit seals until AIP-22 stage 5 (this sentence corrected on 2026-10-25). It no longer describes all of consensus on chain 2800: since 2026-08-14 every anchor block must carry a certificate of validator post-quantum seals under its hash (Falcon-512, with SLH-DSA as well since 2026-09-04), and since 2026-09-05 (block 17,250,000) the nine AERE-client validators (nine of the ten) refuse a commit message without a valid Falcon-512 seal of its author, and since 2026-09-08 (block 17,700,000) any QBFT consensus message without one, while the tenth, the second client, enforced that seal only on commit messages until block 24,300,000 and attributes every consensus message only through it since (this clause corrected on 2026-10-12, 2026-10-25 and 2026-10-28; until 2026-10-28 it dated the refusal of every message type to 2026-09-05, the date of the commit layer alone). (Note applied to this document on 2026-09-27.)

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 anchor blocks (every 32nd block, on every one since block 13,889,296) also carry, under the block hash, a certificate of validator Falcon-512 seals, and since 2026-08-14 a node rejects 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.