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.
Monero's wallet selects decoys using a gamma distribution that models real spending behaviour:
| Output Age | Selection Probability | Rationale |
|---|---|---|
| < 1 day | High | Most real spends happen within hours/days of receiving |
| 1-7 days | Moderate-high | Common spending window |
| 1-4 weeks | Moderate | Regular spending cycle |
| 1-6 months | Low-moderate | Savings being spent |
| 6+ months | Low (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.
| Attack | How It Works | Effectiveness |
|---|---|---|
| Timing heuristic | Guess the newest output is real | Partial — gamma distribution counteracts this |
| Known-spend elimination | If you know an output was spent in another ring, eliminate it as a decoy here | Partial — reduces anonymity set by ~1 per known spend |
| Poisoned outputs | Flood blockchain with outputs you control, then identify them as decoys | Partial — expensive, reduces set slightly |
| Merge/split analysis | Track amounts despite RingCT by observing transaction graph patterns | Very 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++ 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.
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.