Monero Decoy Selection (2026)

How ring signature decoys are chosen and why it matters
TL;DR: When you send XMR, your wallet picks 15 decoy outputs to mix with your real one (ring size 16). The selection uses a gamma distribution weighted toward recent outputs — matching real spending patterns so analysts can't distinguish real from fake by timing. FCMP++ will make this obsolete: the anonymity set becomes the entire blockchain.

The Problem: Choosing Good Decoys

If decoys were chosen randomly from the entire blockchain, an analyst could exploit a simple heuristic: people tend to spend recent outputs. The newest output in a ring would be the most likely real spend.

If decoys were all chosen from recent blocks, old real spends would stick out. The selection must match the statistical distribution of real spending.

The Solution: Gamma Distribution

Monero's wallet selects decoys using a gamma distribution that models real spending behaviour:

Output AgeSelection ProbabilityRationale
< 1 dayHighMost real spends happen within hours/days of receiving
1-7 daysModerate-highCommon spending window
1-4 weeksModerateRegular spending cycle
1-6 monthsLow-moderateSavings being spent
6+ monthsLow (long tail)Some people HODL then spend old coins

The distribution isn't flat (uniform) or steep (only recent) — it follows the curve of real-world spending, making the real output indistinguishable from decoys by age alone.

Known Attack Vectors

AttackHow It WorksEffectiveness
Timing heuristicGuess the newest output is realPartial — gamma distribution counteracts this
Known-spend eliminationIf you know an output was spent in another ring, eliminate it as a decoy herePartial — reduces anonymity set by ~1 per known spend
Poisoned outputsFlood blockchain with outputs you control, then identify them as decoysPartial — expensive, reduces set slightly
Merge/split analysisTrack amounts despite RingCT by observing transaction graph patternsVery weak — Bulletproofs hide amounts

None of these attacks reduce the anonymity set to 1 (full deanonymization). They might narrow it from 16 to 3-5 in theory. Combined with stealth addresses and Bulletproofs, practical tracing remains infeasible.

FCMP++ — The Final Fix

FCMP++ eliminates decoy selection entirely. Instead of picking 15 decoys, FCMP++ proves your output exists somewhere in the entire blockchain using zero-knowledge cryptography. No decoys needed. No statistical distribution to tune. No timing heuristics to exploit.

The anonymity set jumps from 16 to millions. Every academic attack on decoy selection becomes irrelevant.

Bottom Line

Decoy selection is the most-studied aspect of Monero's privacy. Academic papers have found theoretical weaknesses, but none that enable practical tracing.

The gamma distribution makes ring members statistically indistinguishable from real spends. Combined with stealth addresses and Bulletproofs, Monero's current privacy is robust.

FCMP++ is the permanent solution: no decoys to select, no distribution to tune, no attacks to defend against. The entire blockchain is your crowd.