How one-time addresses protect the receiver in every Monero transaction. The second layer of XMR's privacy stack.
Every Monero transaction creates a unique, one-time "stealth address" for the recipient. Even if you give the same Monero address to 100 people, each payment lands at a different address on the blockchain. Nobody can link those payments together or trace them back to you. This is automatic and mandatory — no user action required.
In Bitcoin, if you post your address on a website, anyone can look it up on the blockchain and see every transaction ever sent to it — amounts, dates, and the sending addresses. This is a massive privacy leak.
Monero solves this at the protocol level. Your public Monero address is never written to the blockchain. Instead, every sender generates a one-time stealth address derived from your public keys. Only you can detect which outputs belong to you.
r (the transaction private key).shared_secret = r * AP = H(r*A) * G + B where H is a hash function and G is the generator point.R = r * G in the transaction. This lets you (and only you) reconstruct the shared secret.Where: P = stealth address, r = random scalar, A = recipient's public view key, G = generator point, B = recipient's public spend key, H = hash function
To check if a transaction output belongs to you, your wallet uses your private view key (a) to compute the same shared secret:
Since a * R = a * (r * G) = r * (a * G) = r * A, this matches what the sender computed. Your wallet then checks if the stealth address matches: P' = H(a*R) * G + B. If it matches, the output is yours. If not, it belongs to someone else.
Key insight: Without a (your private view key), nobody can compute this. They'd need to brute-force elliptic curve discrete logarithm, which is computationally infeasible.
The master secret. Derived from your seed phrase. Required to authorize spending. Never shared.
Derived from spend key. Scans blockchain for your payments. Can be shared for audit/monitoring without spending risk.
Derived from private keys. Encoded in your Monero address. Used by senders to create stealth addresses. Safe to share publicly.
Both improve privacy, but at different layers:
| Feature | Stealth Address | Subaddress |
|---|---|---|
| Created by | Sender (automatic) | Recipient (manual) |
| When | Every transaction | Before sharing address |
| Purpose | Hide recipient on-chain | Isolate senders pre-chain |
| User action | None (protocol-level) | Generate new subaddress per contact |
| Blockchain visible? | Only the one-time address | No (subaddress never on-chain) |
Best practice: Use a new subaddress for each person/service you give your address to. Stealth addresses handle the rest automatically.
Stealth addresses are one of four privacy technologies working together in every Monero transaction:
Together, these four layers make every Monero transaction opaque: unknown sender, unknown receiver, unknown amount, unknown origin.
How Monero Works — All 4 layers explained →
The upcoming FCMP++ upgrade replaces ring signatures with full-chain membership proofs. Stealth addresses remain unchanged. They're orthogonal to the ring signature system — FCMP++ changes how sender privacy works, not receiver privacy.
Stealth addresses are a permanent part of the Monero protocol. They've been there since day one (inherited from CryptoNote in 2014) and will remain through all future upgrades.
| Coin | Stealth Addresses | Receiver Privacy |
|---|---|---|
| Monero | Mandatory, every TX | Strong |
| Bitcoin | None built-in | None (unless manual) |
| Zcash (shielded) | In shielded pool | Only if both parties use shielded |
| Ethereum | None (EIP-5564 proposed) | None |
| Dash | None | None |
Ethereum has EIP-5564 (proposed stealth address standard) but it's optional, complex, and barely used. Bitcoin has BIP-352 ("Silent Payments") in development. Monero has had mandatory stealth addresses since 2014.