Tecnico › Chi ha inviato?

Selezione delle esche

Da dove vengono i 15 output estranei in un ring, e perché è più difficile di quanto sembri

In breve

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ì:

x ~ Gamma(shape = 19.28, scale = 1/1.61)    age = eˣ seconds parametri adattati alla distribuzione empirica delle spese in Bitcoin (Möser e altri)

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.
Età delle spese reali (modello) a confronto con l'età delle esche scelte. Se le curve coincidono, l'input reale non spicca per età.

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.

Il punto chiave

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.