{"id":1232,"date":"2026-11-12T08:47:34","date_gmt":"2026-11-12T07:47:34","guid":{"rendered":"https:\/\/hadamard.com\/c\/post-quantum-stealth-addresses-erc-8441\/"},"modified":"2026-11-12T08:47:34","modified_gmt":"2026-11-12T07:47:34","slug":"post-quantum-stealth-addresses-erc-8441","status":"publish","type":"post","link":"https:\/\/hadamard.com\/c\/post-quantum-stealth-addresses-erc-8441\/","title":{"rendered":"Post-Quantum Stealth Addresses: ERC-5564 vs ERC-8441 Explained"},"content":{"rendered":"<p>No. Ethereum stealth addresses as standardized in ERC-5564 are not quantum-safe: their privacy rests on secp256k1 elliptic-curve Diffie-Hellman (ECDH), and a cryptographically relevant quantum computer could use the permanent on-chain announcement log to work out, after the fact, who received which payment. The new ERC-8441 draft proposes post-quantum stealth addresses that combine ML-KEM-768 with secp256k1. It protects only the announcement layer, though, and it costs considerably more in bytes, gas and scan time.<\/p>\n<p>This article explains how ERC-5564 works, why the risk is retroactive, what ERC-8441 changes, what it leaves open, and what wallet builders can do now.<\/p>\n<h2>How ERC-5564 stealth addresses work<\/h2>\n<p><a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-5564\" target=\"_blank\" rel=\"noopener\">ERC-5564<\/a> was created on 2022-08-13 by Toni Wahrst\u00e4tter, Matt Solomon, Ben DiFrancesco and Vitalik Buterin and now has Final status. It lets a sender &#8220;non-interactively generate private accounts&#8221; that only the recipient can access. The sender doesn&#8217;t need to contact the recipient first.<\/p>\n<p>Under schemeId 1 (secp256k1 with view tags), the mechanism works like this:<\/p>\n<ol>\n<li>The recipient holds a <strong>spending key pair<\/strong> and a <strong>viewing key pair<\/strong>. The two public keys together form the <em>stealth meta-address<\/em>.<\/li>\n<li>The sender generates a random <strong>ephemeral key<\/strong>, computes a shared secret from it and the recipient&#8217;s viewing public key, and hashes that secret.<\/li>\n<li>The stealth public key is the spending public key plus (hashed secret \u00d7 G). Only the recipient can compute the matching private key: the spending private key plus the hashed secret.<\/li>\n<li>The sender publishes the ephemeral public key through a singleton <code>ERC5564Announcer<\/code> contract at <code>0x55649E01B5Df198D18D95b5cc5051630cfD45564<\/code>, which emits an <code>Announcement<\/code> event for each payment.<\/li>\n<\/ol>\n<p>To keep scanning fast, the first byte of the hashed shared secret serves as a <strong>view tag<\/strong>: &#8220;The first byte of the metadata MUST be the view tag.&#8221; Recipients can skip most announcements that aren&#8217;t theirs after a single check. The spec notes that this reduces the privacy security margin &#8220;from 128 bits to 124 bits&#8221;, which affects privacy but not the secure generation of the stealth address.<\/p>\n<p>Recipients publish their meta-addresses in the <a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-6538\" target=\"_blank\" rel=\"noopener\">ERC-6538 stealth meta-address registry<\/a>, a Final standard created on 2023-01-24. It is one registry per chain, deployed with CREATE2 at <code>0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538<\/code>. Users can register directly, or a third party can register for them using an EIP-712 or EIP-1271 signature.<\/p>\n<p>Production wallets also borrow from these conventions. <a href=\"https:\/\/docs.fluidkey.com\/technical-documentation\/technical-walkthrough\" target=\"_blank\" rel=\"noopener\">Fluidkey&#8217;s technical documentation<\/a> derives spending and viewing keys from a signed message and shares the viewing node at path <code>m\/5564'\/N'<\/code>, where &#8220;5564 refers to ERC-5564.&#8221; It uses 1\/1 Safe smart accounts as stealth accounts and resolves an ENS name such as <code>username.fkey.id<\/code> to a new stealth address on every query.<\/p>\n<h2>Why quantum computers would de-anonymize stealth payments retroactively<\/h2>\n<p>The unlinkability of an ERC-5564 payment depends on one assumption: nobody can recover the shared secret from the public ephemeral key and the recipient&#8217;s public viewing key. That is the elliptic-curve discrete logarithm problem, and Shor&#8217;s algorithm on a large enough quantum computer solves it. For the broader picture of which parts of Ethereum are exposed, see our overview of <a href=\"https:\/\/hadamard.com\/c\/can-quantum-computers-break-ethereum\/\">whether quantum computers can break Ethereum<\/a>.<\/p>\n<p>The <a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-8441\" target=\"_blank\" rel=\"noopener\">ERC-8441 draft<\/a> describes the problem plainly. ERC-5564 announcements are &#8220;public, permanent, and centralized in one contract.&#8221; Under schemeId 1, privacy depends on secp256k1 ECDH, and a cryptographically relevant quantum computer (CRQC) could break that. The privacy loss would therefore be retroactive: every past announcement could be matched against every registered meta-address.<\/p>\n<p>This is the blockchain version of &#8220;harvest now, decrypt later.&#8221; A <a href=\"https:\/\/ethresear.ch\/t\/post-quantum-threats-to-ethereum-privacy\/24450\" target=\"_blank\" rel=\"noopener\">March 2026 ethresear.ch post on post-quantum threats to Ethereum privacy<\/a> argues that public, append-only ledgers let attackers archive encrypted data now and break it later. It also draws a key distinction: authenticity failures can be partly repaired with forks, but privacy breaches are &#8220;irreversible.&#8221; Once a link between a sender and a recipient is revealed, no protocol upgrade can hide it again.<\/p>\n<p>The same post lists the exposures it sees on Ethereum:<\/p>\n<ul>\n<li>Stealth address linkages<\/li>\n<li>Shielded amounts and notes<\/li>\n<li>Selectively disclosed credentials<\/li>\n<li>Viewing keys and note discovery<\/li>\n<\/ul>\n<p>It proposes &#8220;no new classical privacy debt&#8221; as a design principle: new privacy systems shouldn&#8217;t add more data that a future quantum attacker could unlock.<\/p>\n<h2>ERC-8441: a hybrid ML-KEM-768 post-quantum stealth address scheme<\/h2>\n<p>ERC-8441, titled &#8220;Hybrid post-quantum stealth address scheme,&#8221; was created on 2026-08-28 by namnc, Pierre (dmpierre) and kassandra.eth. It is still a <strong>Draft<\/strong>. It requires EIP-5564 and EIP-6538 and registers as <strong>schemeId 3<\/strong>.<\/p>\n<p>The core idea is to derive the payment secret from two independent sources: an ML-KEM-768 encapsulation (the lattice-based key encapsulation mechanism standardized in FIPS 203) and a classical secp256k1 ECDH secret. The two are combined like this:<\/p>\n<p><code>ss = SHA3-256(DS || ss_ec || ss_pq || epk || ct || viewing_pk_ec || ek)<\/code>, with <code>DS = \"pq-stealth\/hybrid-payment\/v1\"<\/code>.<\/p>\n<p>The draft says the combiner follows the shape of NIST SP 800-227&#8217;s KeyCombineCCA_H, with stated departures. Binding the ephemeral key, the ciphertext and both public keys into the hash ties the derived secret to this specific exchange.<\/p>\n<p>Two further design choices matter:<\/p>\n<ul>\n<li><strong>The view tag is a separate SHA256 digest.<\/strong> It doesn&#8217;t leak bits of the stealth offset, unlike ERC-5564, where the tag is the first byte of the hashed secret. The trade-off is that the tag can only be checked after both the ECDH and the ML-KEM decapsulation.<\/li>\n<li><strong>No new infrastructure.<\/strong> ERC-8441 reuses the deployed ERC-5564 announcer and ERC-6538 registry unchanged. It needs no consensus change, no new opcode and no new contract.<\/li>\n<\/ul>\n<p>The classical ECDH half isn&#8217;t decoration. The draft calls it a hedge in case ML-KEM-768 is broken classically. As long as either component holds, the shared secret stays hidden.<\/p>\n<h2>What post-quantum stealth addresses cost: bytes, gas and scan time<\/h2>\n<p>Lattice-based keys and ciphertexts are large. The ethresear.ch post notes that ML-KEM-768 ciphertexts are 1,088 bytes, about 33x larger than compressed ECDH points. ERC-8441 gives these sizes:<\/p>\n<ul>\n<li><strong>Meta-address:<\/strong> 1,250 bytes (33 + 33 + a 1,184-byte ML-KEM encapsulation key)<\/li>\n<li><strong>ephemeralPubKey:<\/strong> 1,121 bytes (33 + a 1,088-byte ciphertext)<\/li>\n<li><strong>Per-payment announcement:<\/strong> 1,122 bytes<\/li>\n<\/ul>\n<p>Gas costs rise accordingly. The draft reports these Prague figures:<\/p>\n<table>\n<thead>\n<tr>\n<th>Operation<\/th>\n<th>schemeId 1 (ERC-5564)<\/th>\n<th>schemeId 3 (ERC-8441)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Announce<\/td>\n<td>28,313<\/td>\n<td>69,330 (2.45x)<\/td>\n<\/tr>\n<tr>\n<td>First-time register<\/td>\n<td>115,310<\/td>\n<td>964,737 (18.9x)<\/td>\n<\/tr>\n<tr>\n<td>End-to-end native ETH payment<\/td>\n<td>not given<\/td>\n<td>111,330<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Registration is the expensive step, but recipients do it once. The per-payment overhead that senders pay every time is the 2.45x announce cost.<\/p>\n<p>Scanning slows down too. In the authors&#8217; own Rust measurements, checking one announcement takes about 150 \u00b5s, or about 100 \u00b5s with a cached decapsulation key, compared with about 55 \u00b5s for schemeId 1. Because the view tag can only be checked after decapsulation, every announcement costs the full post-quantum work.<\/p>\n<p>The ethresear.ch post lists &#8220;PQ stealth address scalability&#8221; as an open problem, citing calldata bloat and memory costs of about 20 GB+ for OMR (oblivious message retrieval) approaches.<\/p>\n<h2>What ERC-8441 does not fix<\/h2>\n<p>ERC-8441 is explicit about its limits, and they matter as much as the construction:<\/p>\n<ul>\n<li><strong>Spending stays quantum-vulnerable.<\/strong> In the draft&#8217;s words: &#8220;Spending stays vulnerable to a quantum attacker.&#8221; Stealth accounts are still controlled by secp256k1 ECDSA keys, so funds can still be stolen once a CRQC exists.<\/li>\n<li><strong>Only the announcement layer is protected.<\/strong> Funding transfers, sweeps, gas funding and timing stay public. ERC-5564 already warns that funding a stealth address from a wallet linked to its owner can break privacy, and that remains true here.<\/li>\n<li><strong>Security assumptions.<\/strong> The draft assumes ML-KEM-768 is ANO-CCA (anonymous under chosen-ciphertext attack), &#8220;stated here as an assumption rather than inherited.&#8221; Privacy of past announcements holds only as long as ML-KEM-768 holds.<\/li>\n<li><strong>Downgrade risk.<\/strong> A recipient registered under both schemes can still be paid under schemeId 1. Senders that support schemeId 3 must prefer it.<\/li>\n<li><strong>Tracking keys.<\/strong> Anyone holding a delegated tracking key sees all payments. The key cannot be revoked, only replaced, and after a CRQC it becomes a spending capability.<\/li>\n<li><strong>Randomness reuse.<\/strong> Reusing the ephemeral key or the ML-KEM randomness links payments.<\/li>\n<\/ul>\n<p>In short, ERC-8441 can keep future announcements from being decoded by a quantum attacker. It doesn&#8217;t make stealth funds quantum-safe, and it doesn&#8217;t hide the transaction graph around them.<\/p>\n<h2>The research behind lattice-based stealth address protocols<\/h2>\n<p>The idea of lattice-based stealth addresses predates ERC-8441. In <a href=\"https:\/\/arxiv.org\/abs\/2501.13733\" target=\"_blank\" rel=\"noopener\">&#8220;Post-Quantum Stealth Address Protocols&#8221;<\/a>, submitted to arXiv on 2025-01-23, Marija Mikic, Mihajlo Srbakoski and Strahinja Praska propose stealth address protocols (SAPs) based on LWE, Ring-LWE and Module-LWE. The Module-LWE variant is built on Kyber, the scheme NIST standardized as ML-KEM.<\/p>\n<p>The authors report that their Module-LWE SAP &#8220;outperforms ECPDKSAP by approximately 66.8% in the scan time of the ephemeral public key registry.&#8221; That compares against a specific elliptic-curve protocol variant, not ERC-5564 directly. It still shows that the scanning cost of lattice-based designs is an area of active optimization rather than a fixed penalty.<\/p>\n<h2>What wallet builders and users should do now<\/h2>\n<p>ERC-8441 is a draft, so its details may change. Even so, some practical steps follow from the published specs:<\/p>\n<h3>For wallet and protocol builders<\/h3>\n<ul>\n<li><strong>Treat schemeId 1 announcements as eventually public.<\/strong> Design on the assumption that links made today could become readable once a CRQC exists.<\/li>\n<li><strong>If you implement schemeId 3, prefer it.<\/strong> Always choose it over schemeId 1 for recipients registered under both, to avoid the downgrade the draft warns about.<\/li>\n<li><strong>Never reuse ephemeral keys or ML-KEM randomness.<\/strong> Reuse links payments.<\/li>\n<li><strong>Handle tracking keys as long-lived secrets.<\/strong> They can&#8217;t be revoked, and after a CRQC they become spending capabilities.<\/li>\n<li><strong>Budget for size and scan time.<\/strong> Plan for 1,122-byte announcements and roughly 2\u20133x slower per-announcement scanning in indexers and mobile clients.<\/li>\n<\/ul>\n<h3>For users<\/h3>\n<ul>\n<li>Don&#8217;t rely on today&#8217;s stealth addresses for relationships that must stay private for decades.<\/li>\n<li>Avoid funding stealth addresses, or paying their gas, from wallets linked to you.<\/li>\n<li>Remember that stealth privacy and fund safety are separate problems. Even a post-quantum announcement layer leaves ECDSA spending keys exposed.<\/li>\n<\/ul>\n<p>Fixing the spending side means replacing ECDSA, either with post-quantum signatures (see our comparison of <a href=\"https:\/\/hadamard.com\/c\/ml-dsa-vs-slh-dsa-signatures-compared\/\">ML-DSA and SLH-DSA signatures<\/a>) or with hash-based account designs. That is the approach Hadamard takes with <a href=\"https:\/\/bb84.com\/\">BB84<\/a>, an ECDSA-free Layer 2 rollup on Ethereum mainnet in which accounts are one-time addresses based on hash commitments instead of ECDSA keys. To see how other chains and standards are progressing, see the <a href=\"https:\/\/hadamard.com\/post-quantum-tracker\/\">Post-Quantum Migration Tracker<\/a>.<\/p>\n<h2>FAQ<\/h2>\n<h3>Will a quantum computer reveal who received my past stealth address payments?<\/h3>\n<p>For ERC-5564 schemeId 1 payments, it could. Their privacy depends on secp256k1 ECDH, and the announcements are public and permanent. The ERC-8441 draft therefore describes the potential privacy loss from a cryptographically relevant quantum computer as retroactive.<\/p>\n<h3>Does ERC-8441 make stealth address funds safe from quantum theft?<\/h3>\n<p>No. The draft states that &#8220;Spending stays vulnerable to a quantum attacker,&#8221; because stealth accounts still use secp256k1 ECDSA. ERC-8441 protects only the announcement layer.<\/p>\n<h3>Why are post-quantum stealth addresses so much bigger and more expensive?<\/h3>\n<p>ML-KEM-768 uses a 1,184-byte encapsulation key and a 1,088-byte ciphertext. That pushes meta-addresses to 1,250 bytes and announcements to 1,122 bytes, which raises announce gas 2.45x and first-time registration gas 18.9x compared with schemeId 1.<\/p>\n<h3>Do I need a new contract or a hard fork to use post-quantum stealth addresses?<\/h3>\n<p>No. ERC-8441 reuses the deployed ERC-5564 announcer and ERC-6538 registry unchanged. It needs no consensus change, no new opcode and no new contract. Wallets only need to support schemeId 3.<\/p>\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-5564\" target=\"_blank\" rel=\"noopener\">ERC-5564: Stealth Addresses<\/a>, Ethereum Improvement Proposals, created 2022-08-13 (Final)<\/li>\n<li><a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-6538\" target=\"_blank\" rel=\"noopener\">ERC-6538: Stealth Meta-Address Registry<\/a>, Ethereum Improvement Proposals, created 2023-01-24 (Final)<\/li>\n<li><a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-8441\" target=\"_blank\" rel=\"noopener\">ERC-8441: Hybrid post-quantum stealth address scheme<\/a>, Ethereum Improvement Proposals, created 2026-08-28 (Draft)<\/li>\n<li><a href=\"https:\/\/ethresear.ch\/t\/post-quantum-threats-to-ethereum-privacy\/24450\" target=\"_blank\" rel=\"noopener\">Post-Quantum Threats to Ethereum Privacy<\/a>, namnc, ethresear.ch, 2026-03-19<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2501.13733\" target=\"_blank\" rel=\"noopener\">Post-Quantum Stealth Address Protocols<\/a>, Mikic, Srbakoski and Praska, arXiv, submitted 2025-01-23<\/li>\n<li><a href=\"https:\/\/docs.fluidkey.com\/technical-documentation\/technical-walkthrough\" target=\"_blank\" rel=\"noopener\">Fluidkey technical walkthrough<\/a>, Fluidkey documentation, undated (accessed 2026-11-12)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ethereum&#8217;s ERC-5564 stealth addresses depend on secp256k1 ECDH, so a future quantum computer could link past payments to their recipients. The ERC-8441 draft adds ML-KEM-768 to protect announcements, at the cost of larger data, higher gas and slower scanning.<\/p>\n","protected":false},"author":1,"featured_media":1233,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[804],"tags":[805,831,787,351,865],"class_list":["post-1232","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blockchain-security","tag-ethereum","tag-ml-kem","tag-post-quantum-cryptography","tag-privacy","tag-stealth-addresses","entry"],"jetpack_featured_media_url":"https:\/\/hadamard.com\/c\/wp-content\/uploads\/2026\/11\/2026-11-12-post-quantum-stealth-addresses-erc-8441.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/posts\/1232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/comments?post=1232"}],"version-history":[{"count":0,"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/posts\/1232\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/media\/1233"}],"wp:attachment":[{"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/media?parent=1232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/categories?post=1232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hadamard.com\/c\/wp-json\/wp\/v2\/tags?post=1232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}