
PQ anonymity for Stealth Address Protocol
A technical ethresear.ch post proposing post-quantum upgrades (schemeId 2-6) to Ethereum's Stealth Address Protocol (ERC-5564/ERC-6538), replacing ECDH with ML-KEM (FIPS 203) to preserve recipient unlinkability against a cryptographically-relevant quantum computer. It identifies a specific vulnerability: the naive 1-byte view-tag optimization leaks enough information for a quantum attacker holding the derived public key to recover the spending key discrete log and test candidate recipients, breaking anonymity even when ML-KEM is used; the authors propose domain-separated tag derivation, hybrid EC/PQ combiners, pairwise-KEM variants, and a "stealthier SAP" construction to fix it.
What it is
Second post in an ethresear.ch series upgrading Ethereum's Stealth Address Protocol (ERC-5564/ERC-6538) to post-quantum anonymity by swapping the (1/2)-ECDH key agreement for ML-KEM (FIPS 203). It defines schemeIds 2–5 (scheme 6, PQ spending, is a later post). Schemes 2–5 keep ECDSA for spending, so they buy PQ anonymity (payment discovery + recipient unlinkability), not PQ spending authorization.
The view-tag attack and its precondition
The naive optimization keeps the 1-byte view tag as h* = h[0] where P = K + hG = (k+h)G. A cryptographically-relevant quantum computer (CRQC) that knows the derived address P can recover p = log_G(P), recover k_i = log_G(K_i) for every candidate spending key in the registry, compute h_i = (p - k_i) mod n, and test h_i[0] == h*. The true recipient always passes; a wrong candidate passes with ≈1/256. This is a recipient-linkage filter that works without breaking ML-KEM.
The precondition the summary omits: the attack requires P, which only becomes recoverable from an ordinary ECDSA spend. An unspent stealth address is not exposed by this filter. Because it hinges on ECDSA discrete-log recovery, it applies to all ECDSA-based schemes (2–5).
Fix — derive tweak and tag independently from the shared secret with domain separation:
h = H(DS1 || r)h* = H(DS2 || r)[0]
Recovering h via quantum discrete log no longer reveals the independently-derived tag; tag privacy now rests on the ML-KEM-protected secret r.
Hard invariant for implementers
PQ anonymity rests entirely on the ML-KEM ciphertext, so at least one full decapsulation is mandatory before matching. Any "optimization" that makes the view tag the first byte of H(r_ec) (the classical secret) to match scheme-1 filter cost is called a "catastrophic optimization." Also: do not reuse a scheme-1 meta address by appending an ek — it drags along scheme-1 history, which is considered broken once a CRQC arrives.
Size/gas overheads (ML-KEM-768)
- Encapsulation key: 1184 bytes → ERC6538Registry entry grows by 1151 bytes (~18×).
- Ciphertext: 1088 bytes → ERC5564Announcer payload grows ~33× (noted as an incidental DDoS deterrent).
- Larger sizes make PIR and OMR scanning worse. Spend gas cost is unchanged from scheme 1; forward-secrecy issue (dk-holder can link back to the meta address) remains.
Variants worth noting
- schemeId 3 — hybrid combiner running ECDH and ML-KEM in parallel, mixing both secrets:
r = SHA3-256(DS || r_ec || r_pq || epk || ct || viewing_pk_ec || ek). Recommended as the practical migration step (hedges ML-KEM during transition). - schemeId 4/5 — pairwise-KEM: one KEM exchange establishes
rper sender-receiver pair, then subsequent payments useh̃ = H(r || r̃)withr̃optionally an unpublished counter (receiver scans from 0). This drops the per-payment ciphertext, making later payments cheaper than scheme 1. - "stealthier SAP" — publishes
R_K = r_K·G, fundsP_K = K + H(S_K)Gfrom a separate address, and announces a different matching addressPvia yet another address, decoupling payment from announcement so it isn't identifiable as a stealth payment (and enabling cross-chain payment). Nearly free once ML-KEM overhead is already paid.
Caveats
ANO-CCA for ML-KEM is argued from an analysis of round-3 Kyber in the QROM; the authors note applying it to standardized FIPS 203 requires accounting for the transform changes and offer only a "high-level" justification. PQ spending (scheme 6) and the recoverability scheme are left as future work.
Organisations named here
- ANO-CCA
- ERC-6538
- FIPS 203
- IK-CCA
- view-tag linkage attack
Technologies named here
- ML-KEM
- Stealth Address Protocol
- Accompanying repo for scheme 3
- ERC-5564
- ERC5564Announcer
- ERC6538Registry
- Kyber
- Ethereum
Techniques named here
- Naive ViewTag CRQC linkage attack
- IK-CCA / ANO-CCA
- Quantum discrete-log recovery
Threat actors named here
- Quantum attacker / CRQC
Related in Blockchain

THORChain Exploit Report #2 — GG20 root-cause disclosure

Black Thursday revisited: MakerDAO keeper exploited for $500K
.jpg)