venerdì 1 marzo 2013

Essere più anonimi con Bitcoin

Bitcoin non è anonimo, è pseudo-anonimo. Forse in futuro il protocollo permetterà di raggiungere più facilmente questo stato, ma attualmente non è cosi.
Tutte le transazioni sono pubbliche, e sono salvate nel database che ogni client scarica per tenere aggiornato lo stato del network.
Ogni client quindi ha lo stesso database, e i dati vengono condivisi attraverso la rete p2p.
Per navigare questi database esistono diversi strumenti, online potremo trovare questi 2:
http://blockexplorer.com
http://blockchain.info
Questi 2 servizi permettono di navigare il database che si trova sui loro server, che ripeto è uguale a quello che hanno tutti gli altri client che si trovano collegati al network.
Se inserite nel motore di ricerca un indirizzo Bitcoin, tipo questo :
1HdeaDpOnwXWdRmVoneC8M6ErhiuQ7An5o
Troverete tutti i Bitcoin che si trovano li depositati, e tutti gli indirizzi a cui ho inviato e da cui ho ricevuto!
Ecco i link diretti ad entrambi i servizi:
http://blockexplorer.com/address/1HdeaDp...rhiuQ7An5o
http://blockchain.info/address/1HdeaDpO...rhiuQ7An5o
Vedrete quindi che le transazioni sono ovviamente le stesse in entrambi i servizi.

Questo porta quindi il rischio di far perdere la propria privacy in numerosi casi:
* Se avete un identità che preferite mantenere anonima ( A ) e un'altra che invece usate pubblicamente ( B ), trasferire da un indirizzo usato dalla prima alla seconda, potrebbe già fare vacillare la vostra privacy.
* Usare numerosi indirizzi intermedi sperando di far perdere le tracce potrebbe non bastare. Se trasferite 10 BTC da A verso un indirizzo intermedio, poi ancora un altro e un altro ancora fino a B, comunque si potrà vedere che sono sempre questi 10 BTC che si trasferiscono in blocco, e quindi anche qui il rischio di venire identificati può essere alto.
* Se avete in tutto 10 Bitcoin divisi in 2 indirizzi:
- Indirizzo X: 4 BTC
- Indirizzo Y: 6 BTC
Su alcuni client ( come quello ufficiale Bitcoin-Qt ), se indicate di volere inviare 7 BTC ad un indirizzo K, il client andrà a pescare probabilmente tutti i BTC dall'indirizzo Y e 1 BTC dall'indirizzo X.
Questa sarà una UNICA TRANSAZIONE, quindi dall'esterno si potrà facilmente intendere che gli indirizzi X e Y appartengono alla stessa persona.

Controllare i movimenti dei Bitcoin è una cosa ben più importante di valutare come ci si connette alla rete, e cioè se attraverso proxy/Tor.
In generale è già difficile individuare da quale ip può essere partita una transazione, perchè non si può essere sicuri che che si trattasse del client che l'ha eseguita per primo o solo un client che ha fatto di rimbalzo per trasmetterla al network.
Certo fare entrambe le cose ( proteggere il proprio IP e controllare il movimenti fra gli indirizzi ) è fondamentale.

Metodi:
Attualmente il client ufficiale Bitcoin-Qt non permette di avere una gestione precisa di come muovere i propri Bitcoin fra i vari indirizzi.
Avrete si la possibilità di creare infiniti indirizzi su cui ricevere i vostri Bitcoin, ma non avrete modo di indicare con precisione da quale/i indirizzi farli uscire.
Quindi in un'unica transazione capiterà sempre o spesso di usare più indirizzi per inviare i vostri Bitcoin andando a mischiare e unire le vostre diverse identità.
Bitcoin-Qt può essere considerato sicuramente un client aggiornato e sicuro per tanti altri aspetti e usi, ma non nel caso trattato qui, e cioè assicurarsi una maggiore privacy.
Questa situazione però potrebbe cambiare con un qualsiasi aggiornamento delle prossime versioni, quindi non escludetelo a priori per le vostre successive scelte, anzi tenetevi bene aggiornati su come proseguirà il suo sviluppo in questo ambito.

1) Controllo completo degli indirizzi per l'invio di Bitcoin
Per ora i metodi che consiglio sono 2, client Multibit e wallet Blockchain.info

- Blockchain.info
Per blochchain ho già scritto questa guida che dovrebbe darvi già gli spunti iniziali per poterlo usare.
Ho già appurato che il servizio funziona anche tramite Tor, quindi potrete usare benissimo il Tor Browser Bundle per connettervi al servizio e sfruttarne le funzioni.
Attraverso questo servizio potrete scegliere come muovere i vostri Bitcoin, indicando con precisione da quali indirizzi potranno spostarsi ed evitando quindi l'uso contemporaneo di indirizzi assegnati ad altre vostre idendità.
Ovviamente c'è un altro problema che è l'errore umano, fate attenzione 
Il servizio ha anche una funzione di importa/esporta per wallet esterni, e quindi nel caso abbiate già un altro wallet ad esempio sul client ufficiale, potrete riportarlo all'interno di questo servizio senza dover eseguire nessuna transazione.
Avrete quindi un wallet clone completo.

- Multibit

Multibit è un client alternativo a quello ufficiale scritto in java.
Questo client permette l'uso contemporaneo di più wallet.
Potrete quindi assegnare diversi indirizzi a diversi wallet, esempio:
- Wallet A
* indirizzo 1
* indirizzo 2
- Wallet B
* indirizzo 3
* indirizzo 4
- Wallet C
* indirizzo 1
* indirizzo 5
* indirizzo 6
Starà quindi a voi decidere come dividerli, perchè anche qui non potrete gestire in modo preciso da quale indirizzo fare uscire i vostri bitcoin, ma potrete decidere il wallet.
Se quindi volete essere sicuri che 2 indirizzi non finiscano mai nella stessa transazione, teneteli in 2 wallet diversi!

Connessione via Tor
Normalmente il client viene lanciato in questo modo ( vi ricordo che è un client basato su Java ):
java -jar multibit-exe.jar

Per farlo partire e usare il proxy Tor per la connessione, dovrà invece essere lanciato in questo modo:
java -jar -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=9050 multibit-exe.jar

2) Washing machine / Laundry service
Nel caso abbiate ricevuto alcuni Bitcoin su un indirizzo, per qualche motivo vogliate trasferirli ad un altro con la certezza di non lasciare nessuna traccia o scia dietro di voi, dovrete usare questo genere di servizi.
In generale il sistema funziona in questo modo:
Il servizio ha un database dove tiene memorizzate tutte le entrate e le uscite dagli indirizzi Bitcoin che possiede.
Ci sono diversi metodi per fare da Washing machine / Laundry service, e si possono usare anche entrambi.

Questa è una semplice spiegazione di come funzionano e come si creano, nel caso siate dei comuni utenti che vogliono semplicemente farne uso, potrete anche fare a meno di leggerla.
Anche se è sempre utile sapere come funzionano certe cose.

Primo metodo ( più indirizzi ):
Mettiamo ad esempio che abbia 3 indirizzi in tutto:
* Indirizzo A : 20 BTC
* Indirizzo B : 3 BTC
* Indirizzo C : 30 BTC
Sul loro database avranno segnato di essere in posseso di 53 BTC

Voi avete l'indirizzo X con 8 BTC che dovete inviare all'indirizzo Y senza lasciare traccia.
Invierete quindi questi 8 BTC all'indirizzo A

Quindi il servizio si troverà cosi ora:
* Indirizzo A : 28 BTC
* Indirizzo B : 3 BTC
* Indirizzo C : 30 BTC
Segnerà quindi sul loro database generale che in tutto hanno 61 BTC e 8 appartengono al vostro account che avete creato da loro.

Voi chiederete di fare uscire 6 BTC per mandarli all'indirizzo Y.
Il servizio invece di farlo uscire dall'indirizzo A, li farà uscire dall'indirizzo C, con questo risultato:
* Indirizzo A : 28 BTC
* Indirizzo B : 3 BTC
* Indirizzo C : 24 BTC

Poi magari fra 2 ore farete uscire altri 2 BTC, e il servizio li farà uscire dall'indirizzo C, con questo risultato:
* Indirizzo A : 28 BTC
* Indirizzo B : 1 BTC
* Indirizzo C : 24 BTC
Fra l'indirizzo A e l'indirizzo C e l'indirizzo B non è avvenuta nessuna transazione!
Quindi avrete fatto cosi perdere ogni traccia della vostra transazione.
Se qualcuno viene a conoscenza del vostro indirizzo X iniziale, la sua ricerca si arenerà appena farete la prima transazione verso l'indirizzo A.
Se qualcuno scopre invece l'indirizzo Y finale, non avrà modo di individuare chi l'ha pagato, da dove sono partiti i primi 8 BTC, non arriverà a trovare l'indirizzo X.

Secondo metodo ( indirizzo unico ):

Il servizio ha un indirizzo unico su cui riceve tutti i BTC.
Il punto è che avendo una marea spropositata di transazioni, diventa pressoché impossibile identificarne alcune singole.
Se ad esempio riceve 500 transazioni di Bitcoin, e gli utenti ne fanno uscire pochi alla volta, in tempi diversi, e magari su indirizzi diversi, diventa veramente improbabile seguire delle tracce.
Questo metodo è più insicuro del primo, ma in generale entrambi i metodi sono usati in contemporanea creando una situazione di grande caos per chi dall'esterno cercasse di capirci qualcosa.