Introduzione
Bitcoin è spesso definito denaro digitale, ma questo è un paragone discutibile. Se Alice paga a Bob dieci dollari in contanti, Bob non ha idea da dove provengano i soldi. Se in seguito li darà a Carol, lei non sarà in grado di dedurre che Alice ne fosse in possesso.
Bitcoin è diverso per la sua natura intrinsecamente pubblica. La cronologia di una data moneta (più precisamente, un output di transazione non speso o UTXO) può essere osservata in modo banale da chiunque. È un po' come scrivere l'importo della transazione e i nomi dei partecipanti su una banconota ogni volta che viene utilizzata.
Detto questo, la pseudonimità di un indirizzo pubblico assicura che le identità degli utenti non siano facilmente rivelate. Tuttavia, Bitcoin non è completamente privato. L'analisi blockchain diventa sempre più sofisticata ed è in grado di collegare gli indirizzi alle identità in modo sempre più efficiente. Insieme ad altre tecniche di sorveglianza, un'entità dedicata può deanonimizzare gli utenti di criptovaluta. Per porre rimedio a ciò, nel corso degli anni sono emerse tecniche per scollegare le transazioni.
Cos'è il coin mixing?
In termini generali, il coin mixing potrebbe riferirsi a qualsiasi attività che implichi l'offuscamento di fondi sostituendoli con altri. Tuttavia, nello spazio delle criptovalute, il coin mixing denota comunemente un servizio fornito da una terza parte. In genere, i fornitori di servizi prendono le monete degli utenti (e una piccola commissione) e restituiscono monete che non hanno alcun collegamento con quelle inviate. Questi servizi sono anche noti come tumbler o mixer.
La sicurezza e l'anonimato di tali servizi centralizzati sono ovviamente discutibili. Gli utenti non hanno alcuna garanzia che il mixer restituirà loro i soldi o che le monete restituite non siano in qualche modo contaminate. Un ulteriore aspetto da considerare quando si utilizza un mixer è che gli indirizzi IP e Bitcoin potrebbero essere registrati da una terza parte. In definitiva, gli utenti rinunciano al controllo dei propri fondi nella speranza di ricevere indietro quelli non collegati.
Un approccio probabilmente più interessante esiste sotto forma di transazioni CoinJoin, che creano un grado significativo di plausibile negabilità. Vale a dire che, dopo un CoinJoin, nessuna prova può collegare con certezza un utente alle sue transazioni precedenti. Molte soluzioni CoinJoin forniscono un'alternativa decentralizzata ai mixer. Sebbene possa essere coinvolto un coordinatore, gli utenti non devono sacrificare la custodia dei loro fondi.
Cos'è un CoinJoin?
Le transazioni CoinJoin sono state inizialmente proposte dallo sviluppatore Bitcoin Gregory Maxwell nel 2013. Nel suo thread, fornisce una breve panoramica di come sono strutturate queste transazioni e di come si possano ottenere enormi guadagni in termini di privacy senza alcuna modifica al protocollo.
In sostanza, un CoinJoin comporta la combinazione di input di più utenti in una singola transazione. Prima di spiegare come (e perché), diamo un'occhiata alla struttura di una transazione di base.
Le transazioni Bitcoin sono composte da input e output. Quando un utente desidera effettuare una transazione, prende i propri UTXO come input, specifica gli output e firma gli input. È importante notare che ogni input è firmato in modo indipendente e gli utenti possono impostare più output (che vanno a indirizzi diversi).

Se osserviamo una data transazione composta da quattro input (0,2 BTC ciascuno) e due output (0,7 BTC e 0,09 BTC), possiamo fare alcune ipotesi diverse. La prima è che stiamo osservando un pagamento in corso: il mittente invia uno degli output a qualcuno e restituisce il resto a se stesso. Poiché ha utilizzato quattro input, l'output più grande è probabilmente per il destinatario. Nota che mancano 0,01 BTC dagli output, che è la commissione data al miner.
È anche possibile che il mittente voglia creare un UTXO di grandi dimensioni da quelli più piccoli, quindi consolida gli input più piccoli per ottenere il risultato desiderato di 0,7 BTC.
Un'altra ipotesi che possiamo fare è basata sul fatto che ogni input è firmato in modo indipendente. Questa transazione potrebbe avere fino a quattro parti diverse che firmano gli input. Ed è qui che risiede il principio che rende efficace CoinJoining.
Come funziona CoinJoin?
L'idea è che più parti si coordineranno per creare una transazione, ciascuna delle quali fornirà input e output desiderati. Poiché tutti gli input vengono combinati, diventa impossibile dire con certezza quale output appartiene a quale utente. Considerate il diagramma seguente:

Qui, abbiamo quattro partecipanti che desiderano interrompere il collegamento tra le transazioni. Si coordinano tra loro (o tramite un coordinatore dedicato) per annunciare gli input e gli output che vorrebbero includere.
Il coordinatore prenderà tutte le informazioni, le trasformerà in una transazione e farà firmare ogni partecipante prima di trasmetterla alla rete. Una volta che gli utenti hanno firmato, la transazione non può essere modificata senza diventare non valida. Pertanto, non c'è il rischio che il coordinatore scappi con i fondi.
La transazione funge da scatola nera per mescolare le monete. Ricorda che distruggiamo effettivamente gli UTXO per crearne di nuovi. L'unico collegamento tra i vecchi e i nuovi UTXO che abbiamo è la transazione stessa, ma, ovviamente, non possiamo distinguere tra i partecipanti. Nella migliore delle ipotesi, possiamo dire che un partecipante ha fornito uno degli input ed è forse il nuovo proprietario di un output risultante.
Ma anche questo non è affatto garantito. Chi può dire, quando si esamina la transazione di cui sopra, che ci siano quattro partecipanti? Questa persona sta inviando i propri fondi a quattro dei propri indirizzi? Due persone che effettuano due acquisti separati e restituiscono 0,2 BTC ciascuno ai propri indirizzi? Quattro persone che inviano a nuovi partecipanti o a se stessi? Non possiamo esserne certi.
Privacy tramite negazione
Il fatto stesso che esistano implementazioni di CoinJoin è sufficiente a mettere in dubbio i metodi utilizzati per analizzare le transazioni. Si può dedurre che un CoinJoin ha avuto luogo in molti casi, ma non si sa ancora chi possiede gli output. Man mano che la loro popolarità aumenta, l'ipotesi che gli input siano tutti di proprietà dello stesso utente si indebolisce: un enorme passo avanti per la privacy nell'ecosistema più ampio.
Nell'esempio precedente, diciamo che la transazione aveva un set di anonimato di 4: il proprietario di un output potrebbe essere uno qualsiasi dei quattro partecipanti coinvolti. Più grande è il set di anonimato, meno probabile è che le transazioni possano essere collegate al suo proprietario originale. Fortunatamente, le recenti implementazioni di CoinJoin rendono banale per gli utenti unire in modo affidabile i propri input con decine di altri, fornendo un alto grado di negazione. Di recente, è stata eseguita con successo una transazione da 100 persone.
Pensieri conclusivi
Gli strumenti per mescolare monete sono un'aggiunta importante all'arsenale di qualsiasi utente che tenga seriamente alla propria privacy. A differenza degli aggiornamenti della privacy proposti (come Confidential Transactions), sono compatibili con il protocollo così com'è oggi.
Per coloro che si fidano dell'integrità e della metodologia di terze parti, i servizi di mixing sono una soluzione semplice. Per coloro che preferiscono un'alternativa verificabile e non detentiva, le alternative CoinJoin sono superiori. Possono essere eseguite manualmente per utenti tecnicamente competenti o utilizzando strumenti software che astraggono i meccanismi più complessi. Ci sono già una manciata di questi strumenti che continuano a crescere in popolarità man mano che gli utenti si sforzano di ottenere una maggiore privacy.

