Coinjoin

Difficoltà: avanzato

Argomento: tecnologia


DEFINIZIONE

Coinjoin è una tecnica per rendere le transazioni più anonime e rendere più difficili operazioni di chain analysis.

Una transazione CoinJoin mette insieme un grande numero di mittenti e destinatari in una una unica transazione con molti importi identici, in modo che un osservatore non possa determinare facilmente chi stia trasferendo un importo a chi.

CoinJoin è un protocollo trustless per mescolare UTXO di più proprietari, al fine di rendere difficile per le parti esterne utilizzare la cronologia delle transazioni della blockchain per determinare chi possiede quale moneta. Si tratta di creare in modo collaborativo una singola transazione che spende uno o più UTXO di ogni partecipante in uno o più nuovi UTXO per ogni partecipante, rendendo più difficile tracciare la storia delle transazioni di ogni uscita.

Le transazioni Bitcoin sono costituite da input e output. Quando fai una transazione, di fatto prendi i tuoi UTXO come input, specifichi gli output e poi firmi gli input. Un coinjoin serve a "rompere" l'associazione tra le transazioni e lo fa attraverso una transazione con più partecipanti che vengono coordinati tra loro da un terzo (attraverso il software wallet). Attraverso una operazione trustless vengono mischiati di UTXO da più proprietari al fine di rendere difficile per le parti esterne l'utilizzo della cronologia delle transazioni della blockchain determinare chi possiede quale moneta. Si dichiarano gli input e gli output che vorrebbero includere e vengono trasformati in una transazione unica che viene fatta firmare da ogni partecipante prima di trasmetterla alla rete.

In forma molto semplice: Alice, Bob e Carol forniscono ciascuno un UTXO da 1,1 BTC e generano un indirizzo dove vogliono ricevere i loro output. Alice crea una transazione che spende quei 3,3 BTC in 3 uscite da 1 BTC (e 0,3 BTC come commissione), una a ciascuno dei 3 indirizzi generati dai partecipanti. Alice, Bob e Carol dovranno tutti firmare la transazione, poiché solo loro possono firmare per i propri input. Una volta che tutte le firme sono state aggiunte alla transazione, chiunque può trasmetterla e la CoinJoin è completa. In nessun momento i partecipanti hanno accesso alle monete degli altri.

CoinJoin è distinto dai Mixing Service in quanto gli operatori CoinJoin non prendono mai la custodia di alcun fondo. Gli utenti mantengono il controllo del loro bitcoin in ogni momento.

Una volta che i partecipanti hanno firmato, la transazione non può essere modificata senza diventare non valida e questo serve a evitare il rischio che chi coordina scappi con i fondi.

Immagina la transazione come un salvadanaio dove metti i coin e poi questi vengono mescolati per fare in modo che l'unico legame tra le vecchie e le nuove UTXO che abbiamo sia la transazione stessa. Alla fine ciò che al più si vede è che un partecipante ha fornito uno degli input ed è forse il nuovo proprietario di un output risultante.

Esistono molte diverse implementazioni di CoinJoin (alcune consentono uscite non uniformi, altre no).

Su Wasabi wallet avvii il "processo", premendo nella relativa icona e dai inizio a una procedura che "mescola gli UTXO", nel senso che prende gli unspent outputs dal tuo wallet e li usa per fare mixing.

Per costruire una transazione CoinJoin, gli utenti collaborano con gli input nella transazione e ricevono le stesse quantità di bitcoin degli output, il tutto in quantità uniformi. Ad esempio, se 5 utenti immettono importi di 1, 2, 3, 4 e 5 BTC, ci saranno cinque input per un totale di 15 BTC e ci saranno 15 output, ciascuno del valore di 1 BTC e diventa impossibile associare i destinatari degli importi da 1 BTC al mittente.

Coinjoin nasce da una proposta del 2013 di Gregory Maxwell, e diverse implementazioni indipendenti hanno fornito supporto per varie forme di coinjoin.

Sebbene sia possibile che un coinjoin assomigli a un pagamento batch, può essere abbastanza facile da identificare onchain e alcuni exchange si sono rifiutati di accettare monete con una storia recente di coinjoin e per questo motivo può essere più efficace coinswap per ottenere questo scopo.

Sebbene il processo sembri chiaro in teoria, in pratica unire le transazioni è difficile per diversi motivi. Affinché i partecipanti al join rimangano anonimi, dovrebbero connettersi attraverso una rete Tor, devono conoscere un po' di codice e devono fidarsi l'uno dell'altro.

Per superare questi ostacoli, gli sviluppatori di soluzioni CoinJoin hanno iniziato presto a creare strumenti che rendessero il processo automatico per la maggior parte degli utenti. I primi tentativi di creare uno strumento CoinJoin sono stati incorporati nei wallet. I primi esempi sono stati Dark Wallet, JoinMarket e SharedCoins. Queste piattaforme miravano a fornire un ulteriore livello di mascheramento dei dati per gli utenti che effettuavano transazioni in Bitcoin.

Gli sforzi successivi includono Wasabi Wallet e Whirlpool di Samourai Wallet.

Tuttavia, vi sono alcune controversie in merito all'affidabilità e alla sicurezza di questi portafogli e alla loro capacità di anonimizzare i depositi di Bitcoin.


aggiornato il 2021-12-02