Selezione delle esche
Da dove vengono i 15 output estranei in un ring, e perché è più difficile di quanto sembri
Il wallet sceglie 15 esche tra tutti gli output della blockchain in modo che la loro età sia distribuita come l'età delle spese reali: molte recenti, poche vecchie. Usa una distribuzione gamma sul logaritmo dell'età. Se la distribuzione delle esche differisce dal comportamento reale delle persone, l'input reale spicca statisticamente.
Perché non semplicemente "output a caso"
Immagina che le esche fossero scelte in modo uniforme da tutta la blockchain. Allora un'esca tipica avrebbe anni di età. Ma di solito le persone spendono denaro ricevuto di recente: giorni o settimane. In un ring di 16 con un output fresco e 15 vecchi, indovina qual è quello reale.
È proprio ciò che accadeva nei primi tempi di Monero: uno studio del 2017 (Miller, Möser e altri, "An Empirical Analysis of Traceability in the Monero Blockchain") ha mostrato che l'euristica "l'input più recente è quello reale" era corretta nella maggior parte dei casi per i ring di quell'epoca.
La distribuzione gamma
Dal 2018 il wallet sceglie l'età di un'esca così:
L'età viene poi convertita in un'altezza di blocco (assumendo blocchi da 2 minuti) e si sceglie un output casuale di quel blocco. In più ci sono alcune regole:
- gli output più giovani di 10 blocchi non vengono usati (non si possono nemmeno spendere: è la regola di blocco);
- la selezione tiene conto di quanti output ha ogni blocco (altrimenti gli output dei blocchi "vuoti" verrebbero scelti troppo spesso);
- i duplicati e gli output già scelti vengono scartati.
Cosa può andare storto
Bug di implementazione
Nel 2021 è stato trovato un bug nella selezione delle esche di wallet2: per alcuni output la probabilità di scegliere esche recenti era troppo bassa, così le transazioni che spendevano output molto recenti spiccavano. È stato corretto, ma le transazioni fatte prima della correzione restano per sempre sulla blockchain con quella anomalia. Anche wallet di terze parti con una propria selezione delle esche si sono rivelati più volte "riconoscibili".
Il comportamento non corrisponde al modello
Il modello è stato adattato su Bitcoin nel 2017. Gli utenti reali di Monero si comportano diversamente, e più grande è la differenza, più informazioni trapelano dall'età. Sono stati proposti miglioramenti (ad es. adattare la distribuzione ai dati di Monero stesso), ma con FCMP++ il problema scompare alla radice.
Flooding
Se qualcuno crea un numero enorme di propri output (episodi del genere sono stati osservati nel 2021 e nel 2024), questi iniziano a finire in massa nei ring di altre persone. L'attaccante sa che i propri output non sono quelli reali, quindi li cancella mentalmente, riducendo la dimensione effettiva del ring.
La selezione delle esche non è crittografia ma statistica. La crittografia della ring signature garantisce che la firma non riveli l'input reale. Ma non protegge da nulla di ciò che si può dedurre dalla scelta dei membri del ring stessi. In FCMP++ il "ring" è costituito da tutti gli output, e non c'è nulla da scegliere.