Cash Register


Nel mondo del Bitcoin alcuni errori possono essere irrimediabili e il caso degli indirizzi dei resti è una chiara conferma di questa affermazione. Sebbene gli indirizzi dei resti costituiscano uno strumento utile per aumentare la privacy, allo stesso tempo possono anche creare confusione, comportare delle perdite o favorire dei furti se il meccanismo alla base del loro funzionamento non è compreso bene.

Questo articolo spiega come usare in modo sicuro una delle caratteristiche meno comprese del Bitcoin. L'articolo termina con una lista degli errori più comuni riguardanti i resti insieme ai consigli per evitarli.

Il Bancomat Diabolico


Immaginate di pagare al negozio di alimentari con il bancomat. La cassiera digita il totale dovuto e voi inserite il vostro bancomat come fate di solito. Questa volta però notate che il terminale del pagamento vi sta richiedendo tutti i soldi che avete sul vostro conto.

La cassiera sorride, spiegandovi che tutto ciò fa parte di un nuovo programma di incentivi della vostra banca. Voi avete tre opzioni: (1) reinviare indietro il resto sul vostro conto; (2) inviare il resto su un nuovo conto corrente appena creato dalla banca, oppure (3) non esprimere alcuna preferenza e lasciare quindi che il resto vada alla compagnia proprietaria del terminale dei pagamenti.

Contointuitivo? Spiazzante? Allarmante? Molti utenti Bitcoin sarebbero sorpresi nel trovare inquietanti similitudini tra il bancomat diabolico ed il modo in cui sembrano funzionare le transazioni di bitcoin.

Pensare al Bitcoin utilizzando come riferimento le esperienze con il mondo delle banche online e i bancomat può quindi disorientare. Fortunatamente esiste un metodo di pagamento più antico che meglio si presta, come modello concettuale, a gettare luce sul reale funzionamento del Bitcoin.

Bitcoin è Denaro Contante Elettronico


Le affinità tra Bitcoin e il denaro contante sono profonde. In questo libro bianco, Satoshi Nakamoto descrive il Bitcoin proprio come un "sistema di contante elettronico". Capire la stretta connessione tra Bitcoin e contante è la chiave per capire gli indirizzi dei resti.

Immaginate di dover tener traccia di differenti gruppi di banconote di carta, ad esempio per fare una colletta. Dovreste usare delle buste per tenere le banconote fisicamente separate le une dalle altre - "buste di contanti".

Un indirizzo Bitcoin può essere pensato come l'equivalente digitale di una busta di contanti.


Un indirizzo Bitcoin può essere pensato come l'equivalente digitale di una "busta di contanti".   

   




Come una busta di contanti, un indirizzo può contenere nessuna o diverse unità di contante elettronico. Invece delle banconote fisiche, il Bitcoin usa l'equivalente elettronico - gli "output non spesi". Il bilancio di ogni indirizzo può essere ricavato sommando il valore di ogni output non speso che esso contiene, proprio come la quantità totale di contante contenuto in una busta può essere ricavato sommando i valori di ogni banconota presente in essa.

Lo scopo della rete Bitcoin è quello di rendere possibile il trasferimento regolato di output non spesi tra gli indirizzi attraverso le transazioni.

Come funzionano le Transazioni di Bitcoin


Immaginate che Alice, la quale possiede un indirizzo contenente un output non speso del valore di 10 bitcoin (BTC), voglia pagare 10 bitcoin a Bob. Alice sposta i fondi con una transazione inviando il suo singolo output non speso a un indirizzo vuoto di Bob. Così facendo il bilancio dell'indirizzo di Alice scende a 0 e il bilancio dell'indirizzo di Bob sale a 10 bitcoin.


Alice paga 10 BTC a Bob, utilizzando il suo unico output non speso. Il bilancio dell'indirizzo di Alice scende di 10 BTC. Quello di Bob aumenta di 10 BTC. Alice non può spendere una seconda volta i 10 BTC.





Dopo la transazione, Bob può dare a sua volta l'output non speso che ha ricevuto da Alice a qualcun altro. Ad ogni modo Alice non sarà in grado nè di riprendersi indietro l'output non speso che ha trasferito, nè sarà in grado di spenderlo un'altra volta.

Alcuni giorni dopo, Alice vuole pagare altri 5 BTC a Bob da un indirizzo contenente un singolo output del valore di 10 BTC. Alice ha un problema: lei deve pagare Bob, ma non vuole dargli l'intero output da 10 btc. Ad Alice non sarebbe consentito spezzare a metà una banconota da 10$ per pagare 5$ a Bob. Allo stesso modo il protocollo del Bitcoin richiede che Alice invii alla rete l'intero output non speso da 10 BTC così com'è - intatto.

Per risolvere questo problema, Alice si serve di una transazione che divide il suo pagamento, una possibilità pienamente supportata dal Bitcoin. Una parte della transazione invia 5 BTC all'indirizzo di Bob e l'altra parte reinvia indietro a se stessa i rimanenti 5 BTC. In modo analogo, Alice potrebbe cambiare in banca una banconota da 10$ in 2 banconote da 5$, dandone una a Bob e tenendosene l'altra per se stessa.


Alice paga 5 BTC a Bob. Non avendo un output non speso della giusta quantità, Alice divide la transazione in un pagamento di 5 BTC a Bob e in un pagamento del resto di 5 BTC a se stessa. Alice e Bob possono ora entrambi utilizzare i rispettivi output non spesi del valore di 5 BTC.





Con il passare del tempo l'indirizzo di Alice accumula output non spesi provenienti dalle persone che le inviano dei pagamenti. Il suo indirizzo ora contiene tre output non spesi del valore rispettivamente di 20 BTC, 10 BTC e 5 BTC.

Ancora una volta giunge il momento in cui Alice deve pagare Bob - questa volta 8 BTC. Alice crea una transazione che divide il suo output non speso da 10 BTC, inviando 8 BTC all'indirizzo di Bob e 2 BTC a se stessa come resto. Il bilancio dell'indirizzo di Alice scende a 27 BTC mentre il bilancio dell'indirizzo di Bob sale a 8 BTC.


Alice paga 8 BTC a Bob. Il suo indirizzo non contiene un output non speso da 8 BTC, così ne usa uno da 10 BTC, ricevendo indietro i rimanenti 2 BTC come resto.





Negli esempi precedenti, Alice ha inviato il resto allo stesso indirizzo da cui ha effettuato il pagamento. Sebbene questa decisione abbia semplificato la contabilità, sfortunatamente ha anche diminuito la privacy di Bob e la propria.

Gli Indirizzi dei Resti e la Privacy


Ogni transazione Bitcoin rimane volutamente visibile in maniera permanente in un registro pubblico globale detto "block chain" (catena dei blocchi). La privacy dipende quindi dalla rigida separazione tra indirizzi e identità personali, un modello a cui ci si riferisce con il termine di pseudoanonimato.

Ogni osservatore in grado di collegare gli indirizzi Bitcoin alle identità personali può iniziare a trarre conclusioni riguardo ai trasferimenti di denaro tra le persone. Gli utilizzatori Bitcoin rendono questo lavoro di tracciamento più difficoltoso inviando i resti verso indirizzi nuovi generati per l'occasione.

Per capire perchè, pensate a una transazione che sposta fondi da un indirizzo A a un indirizzo B. Se il resto ritorna all'indirizzo A, la block chain rivela chiaramente che la persona che controlla l'indirizzo A ha pagato la persona che controlla l'indirizzo B. Lo stesso ragionamento vale se sono coinvolti due o più indirizzi riceventi. Ogni transazione che coinvolge l'indirizzo A come mittente svela in maniera univoca quali sono gli indirizzi destinatari.


Il resto è inviato all'indirizzo di partenza. È chiaro chi è il beneficiario del pagamento.   
   


Qualora l'identità di una persona che controlla o gli indirizzi di ricezione o quelli di pagamento divenisse nota, anche le identità delle controparti diverrebbero note di conseguenza.

Ora immaginate che l'indirizzo A effettui un pagamento verso l'indirizzo B, ma questa volta invii il resto su un nuovo indirizzo C appena generato. Senza conoscere quale sia l'indirizzo del resto, tutto quello che si può dedurre è che una transazione ha suddiviso il bilancio dell'indirizzo A tra gli indirizzi B e C. La persona che controlla l'indirizzo B o C potrebbe essere o no la stessa che controlla l'indirizzo A. In seguito a un'altra transazione dall'indirizzo C, la situazione diventa ancora più confusa. Quali di questi trasferimenti rappresentano i pagamenti veri e propri e quale invece la ricezione del resto?


Il resto è inviato a un nuovo indirizzo del resto appena creato. In questo caso non è chiaro chi sia il beneficiario del pagamento.





Un osservatore che cercasse di collegare identità personali agli indirizzi dovrebbe raccogliere ulteriori informazioni aggiuntive e impiegare più risorse quando tutte le parti inviano i resti a nuovi indirizzi appena creati.

Coordinare e gestire diversi indirizzi è un compito complicato. I portafogli-software liberano l'utente dalla necessità di farlo manualmente.

Portafogli e Indirizzi dei Resti


Sebbene gli indirizzi dei resti giochino un ruolo chiave nel migliorare la privacy, gli sviluppatori dei portafogli-software possono implementare questa caratteristica in diversi modi. Al momento sono utilizzate quattro strategie diverse, ognuna delle quali ha le proprie implicazioni specifiche sul versante della privacy e della sicurezza.

  • I Portafogli a Singolo Indirizzo utilizzano un unico indirizzo per ricevere sia i pagamenti che i resti. Ulteriori indirizzi possono essere aggiunti quando si genera manualmente un indirizzo per la ricezione, oppure se si importa una chiave privata. Esempi di portafogli che funzionano in questo modo sono Blockchain.info e MultiBit.
  • I Portafogli con Gruppo di Indirizzi Casuali utilizzano un insieme costituito da un numero fisso di indirizzi vuoti generati casualmente. Il resto è inviato al primo indirizzo vuoto disponibile, causando ogni volta la creazione di un nuovo indirizzo vuoto che prende il suo posto nel gruppo. L'esempio più noto è Bitcoin Core.
  • I Portafogli con Gruppo di Indirizzi Deterministici contengono un gruppo di indirizzi praticamente infiniti generati in modo deterministico. Un sottoinsieme di questo gruppo è riservato alla ricezione dei resti. Esempi sono Electrum and Armory.
  • I Portafogli Ibridi utilizzano diverse strategie, a seconda del contesto. MultiBit, Mycelium e Electrum sono degli esempi.

Ora consideriamo in quali modi la non comprensione del funzionamento degli indirizzi del resto, combinata con una gestione semi-manuale degli indirizzi, possa portare alla perdita o al furto dei fondi.

Prevenire e Rimediare ai Disastri combinati con gli Indirizzi dei Resti


L'uso scorretto degli indirizzi del resto può portare in molti casi a perdite o furti dei fondi. Qui di seguito riportiamo alcuni scenari catastrofici e i modi per evitarli.

1. Copia di Riserva non Funzionante


Alice usa Bitcoin Core. Comprendendo l'importanza di fare una copia di riserva (backup), tempo fa ha creato una copia del suo portafoglio criptato e l'ha sistemato in un posto sicuro. Dopo aver fatto molte transazioni con Bitcoin Core, l'hard disk di Alice si è rotto.

Alice ha comprato allora un nuovo hard disk, e vi ha reinstallato sopra Bitcoin Core. Quindi ha ripristinato la copia del suo portafoglio. Con orrore, Alice ha scoperto che il portafoglio ripristinato era vuoto.

Spiegazione: Alice ha generato un numero di indirizzi dei resti tale da aver finito tutti i 100 indirizzi di partenza che costituivano il gruppo iniziale (quello salvato nella copia). Alla centesima transazione, Bitcoin Core ha inviato quindi il resto di Alice (che in questo caso sfortunato è capitato che coincidesse anche con il suo intero bilancio) a un indirizzo che non era presente nella copia. Ripristinando la copia ha così ripristinato solo degli indirizzi vuoti.

Rimedio: Anche se un hard disk non può più far partire un sistema operativo, i singoli file memorizzati in esso possono ancora essere recuperati. Utilizzando degli strumenti per il recupero dati, Alice potrebbe essere in grado di salvare il file del portafoglio Bitcoin Core dall'hard disk danneggiato, e con questo i suoi fondi perduti.

Prevenzione:
  • Contare il numero degli indirizzi creati manualmente e il numero delle transazioni di spesa dalla data dell'ultima copia di backup. Se il totale è più grande di 80, effettuare di nuovo la copia. Backup effettuati con frequenza settimanale dovrebbero essere sufficienti per la maggior parte degli utenti.
  • Impostare un valore molto alto (ad esempio 10000) per l'opzione -keypool, o mediante il parametro della linea di comando, o nel file bitcoin.conf file.
  • Passare a un portafoglio deterministico.

2. Indirizzo del Resto non Monitorato


Bob utilizza Electrum per effettuare dei pagamenti saltuari. Preoccupato della possibilità di subire furti, vuole tenere d'occhio il bilancio dei propri bitcoin da uno dei suoi numerosi dispositivi.

Bob decide di monitorare l'attività di un suo indirizzo su blockchain.info. Il portafoglio Electrum di Bob contiene diversi indirizzi, ma uno solo di essi contiene bitcoin (0,3 BTC). Dando per scontato che questo sia l'unico indirizzo di cui si dovrà servire, Bob lo copia nella barra di ricerca di blockchain.info e memorizza la pagina web risultante nel suo browser.

Alcune settimane dopo, Bob invia un pagamento di 0,2 BTC a Overstock dal suo portafoglio Electrum. Dopo aver ricevuto la merce ordinata, Bob decide di controllare il proprio bilancio di bitcoin tramite blockchain.info.

Bob scopre con suo grande disappunto che una parte del proprio pagamento a Overstock è stata trasferita a un indirizzo sconosciuto. Pensando che il computer su cui gira il suo portafoglio Electrum sia stato compromesso, Bob riformatta il suo hard disk.

Spiegazione: Sebbene a Bob possa sembrare che un intruso abbia modificato la sua transazione prima che questa venisse inviata a Overstock, in realtà Bob si trova di fronte semplicemente al risultato di una normale operazione di un portafoglio. Electrum ha inviato il resto della transazione di Bob a uno dei suoi indirizzi dei resti generati in modo deterministico. Questa operazione ha azzerato il bilancio dell'indirizzo di partenza, l'unico che Bob stava monitorando tramite blockchain.info.

Rimedio: Electrum consiglia di conservare il suo seed (seme) - costituito da 12 parole per generare gli indirizzi - in un luogo sicuro. Bob quindi dovrebbe avere ancora accesso al seme, e in questo modo può rigenerare il suo vecchio portafoglio e recuperare il resto ricevuto dalla transazione a Overstock.

Prevenzione:
  • Se utilizzate un portafoglio deterministico, create un portafoglio di sola lettura per monitorare il bilancio degli indirizzi.
  • Se utilizzate Bitcoin Core, aggiornate manualmente la vostra lista di indirizzi da monitorare dopo ogni pagamento, oppure passate a un portafoglio deterministico.

3. Effettuare un Pagamento da un Portafoglio di Carta (Paper Wallet)


Carlos è un risparmiatore. Un po' di tempo fa ha acquistato 20 BTC a 10$ l'uno, e li ha trasferiti su un portafoglio di carta creato su bitaddress.org. Da quel momento in poi non ha fatto più nulla con quei bitcoin.

Un giorno Carlos nota un'offerta relativa a un nuovo portatile su Overstock e decide di pagare usando uno dei suoi bitcoin salvati. Ma Carlos ha un problema: ha bisogno di inserire il suo portafoglio di carta in un portafoglio software per poter pagare Overstock.

Carlos scarica MultiBit e importa lì la chiave privata del suo portafoglio di carta. Dopo aver pagato Overstock, esce da Multibit.

Carlos ha paura che sia rimasta una traccia della sua chiave privata nel suo computer, così elimina in modo definitivo (in modo cioè che non siano più recuperabili) Multibit e la cartella con i dati relativi. Rimette infine a posto il suo portafoglio di carta.

Dopo qualche settimana, Carlos controlla il bilancio del suo portafoglio di carta. Scioccato, scopre che il bilancio è a zero. 19 bitcoin sono stati inviati a un indirizzo sconosciuto lo stesso giorno del pagamento a Overstock.

Spiegazione: Carlos sospetta di essere stato raggirato, ma quello che vede è in realtà il risultato del comportamento di un portafoglio normale. I 19 bitcoin mancanti sono stati inviati a un indirizzo del resto, lasciando vuoto il suo portafoglio di carta.

Rimedio: Avendo cancellato in modo irreversibile la cartella dei dati di Multibit, Carlos ha perso ogni possibilità di recuperare i fondi perduti.

Prevenzione:
  • Prima di cancellare un portafoglio connesso a Internet che contiene la chiave importata di un portafoglio di carta, inviate il bilancio rimanente all'indirizzo del portafoglio di carta.
  • Utilizzate un portafoglio software che restituisca il resto al portafoglio di carta. Un esempio di portafoglio che funziona in questo modo è Mycelium. Un altro è Blockchain.info mediante l'opzione "custom spend". Entrambi gli approcci restituiscono il resto al portafoglio di carta, sebbene così facendo si determini una diminuzione della privacy.

4. Condividere un Portafoglio


Dave fa girare Bitcoin Core su due computer, un portatile e un fisso che tiene nel suo garage. Volendo utilizzare entrambi i computer per effettuare i pagamenti, Dave copia il file wallet.dat appena creato dal portatile al pc fisso.

Dopo aver fatto molti pagamenti senza problemi da entrambi i computer, un giorno Dave nota qualcosa di strano. Il suo portatile mostra un bilancio a zero, mentra il suo computer fisso mostra il bilancio corretto.

Spiegazione: La rete di computer di Dave non è stata compromessa nè lui ha scoperto un baco in Bitcoin Core. Invece, la copia di Bitcoin Core sul suo fisso ha utilizzato l'ultimo indirizzo disponibile all'interno del gruppo di indirizzi condivisi con il portatile. Con l'ultima transazione, il resto di Dave è stato così inviato a un indirizzo sconosciuto al portatile.

Rimedio: Fate il backup dei portafogli di entrambi i computer. Esportate tutte le chiavi private da entrambi i computer e spostate i fondi collegati ad esse (fate uno sweep) in un nuovo portafoglio. Se la condivisione dei portafogli è fondamentale per voi, non continuate a usare Bitcoin Core.

Prevenzione:
  • Non utilizzate Bitcoin Core per condividere i portafogli tra più computer. Utilizzate Electrum oppure Armory, che sono progettati e pensati specificatamente per questo tipo di utilizzo.

5. Furto da un Portafoglio di Carta Importato


Frank riceve un portafoglio di carta contenente 2 BTC come regalo durante un evento organizzato da una compagnia. Desideroso di vedere come funziona Bitcoin, installa Multibit e importa la chiave privata del suo portafoglio di carta. Non vedendo il senso di continuare a tenere il portafoglio di carta, Frank lo getta nel cestino della raccolta differenziata del suo ufficio.

Nel tempo, Frank spende tutti i propri bitcoin. Per rimpinguare suo portafoglio, Frank compra altri 2 BTC su Coinbase e quindi li trasferisce nel suo portafoglio Multibit.

Poco dopo, Frank compra un set di lenzuola su Overstock per 0,1 BTC. Sebbene questo pagamento venga confermato senza problemi, Frank nota qualcosa di strano. Senza la sua approvazione, un secondo prelievo è stato fatto a favore di un indirizzo sconosciuto, svuotando il suo portafoglio dei rimanenti 1,9 BTC.

Spiegazione: Sebbene Frank sia stato vittima di un furto, la breccia attraverso la quale si è realizzato l'attacco non è stato il suo computer o la rete. È stato il portafoglio di carta che ha gettato nel cestino.

All'insaputa di Frank, il portafoglio di carta che ha gettato nel cestino è stato raccolto da Eve, una collega disonesto. Eve ha aggiunto la chiave privata a un programma particolare che rileva automaticamente i depositi che avvengono su una lista di indirizzi monitorati e li preleva immediatamente.

MultiBit, funzionando come previsto, ha usato la chiave importata dal portafoglio di carta per ricevere il resto di 1,9 BTC del pagamento di Frank a Overstock. Il programma di Eve ha rilevato il trasferimento e ha immediatamente prelevato i fondi.

Eve ha realizzato il suo furto senza avere accesso al computer di Frank, e forse addirittura senza conoscere l'identità di Frank. Il piano ha funzionato poichè Eve è entrata in possesso di una delle chiavi private usate per ricevere i resti dal portafoglio Multibit di Frank.

Rimedio: Frank non può recuperare i fondi, nè probabilmente sarà mai in grado di risalire all'identità del ladro.

Prevenzione:
  • Ripulire completamente (fare lo sweep di) un portafoglio di carta significa creare una normale transazione verso l'indirizzo di un altro portafoglio esistente, svuotando completamente il portafoglio di carta. La chiave privata del portafoglio di carta non verrà mai più usata dal portafoglio software. A meno che non abbiate valide ragioni per fare altrimenti, ripulite completamente i portafogli di carta invece di importarli. Agire in questo modo è importante soprattutto per i portafogli di carta che non sono stati generati da voi stessi in modo sicuro.

Perdita Parziale di Fondi


Sebbene gli esempi fino a qui mostrati si concludano sempre con la completa perdita dei fondi, il medesimo meccanismo può determinare anche solo una perdita parziale degli stessi. Queste sono le condizioni che sono state supposte vere negli esempi finora mostrati (e che hanno portato quindi alla perdita totale dei fondi), ma che in generale potrebbero anche non essere vere nel momento in cui insorge un problema con un indirizzo del resto:

  1. L'intero bilancio di un portafoglio si trova in un unico indirizzo.
  2. Questo singolo indirizzo contiene un unico output non speso.

Ad esempio, potrebbe capitare che un singolo indirizzo riceva molti pagamenti e che si trovi a contenere quindi molti output non spesi. Allo stesso tempo, il bilancio di un portafoglio potrebbe essere distribuito su molti indirizzi dei resti che si originano quando l'utente spende i propri fondi.

Supponiamo allora che il portafoglio di Alice contenga due indirizzi, l'indirizzo 1 e l'indirizzo 2, per un totale di 15 BTC. Per effettuare un pagamento di 6 BTC, il portafoglio seleziona un output non speso da 7 BTC dall'indirizzo 1, ricevendo 1 BTC di resto nell'indirizzo 2. Come previsto, il bilancio del suo portafoglio scende a 9 BTC.

Il resto è inviato a un nuovo indirizzo del resto appena creato. In questo caso non è chiaro chi sia il beneficiario del pagamento.


Alice perde 1 BTC dopo aver ripristinato una copia del portafoglio nella quale mancava un indirizzo del resto.    
    



Quindi avviene il disastro - l'hard disk di Alice si rompe. Dopo aver installato un nuovo hard disk e ripristinato la copia di backup del suo portafoglio, Alice nota qualcosa di strano. Prima della rottura dell'hard disk, il bilancio del suo portafoglio era di 9 BTC. Ma dopo aver recuperato la copia il bilancio mostra ora solo 8 BTC. Come mai sembra mancare 1 BTC?

Alice stava usando un portafoglio che genera un gruppo di indirizzi casuali, in questo gruppo di indirizzi non era contenuto l'indirizzo 2 nel momento della copia. Il ripristino della copia ha dato l'impressione che l'indirizzo 2 fosse "scomparso", e con esso l'output da 1 BTC che conteneva.

In un certo senso Alice è stata fortunata poichè avrebbe potuto perdere l'intero bilancio del suo portafoglio. D'altra parte, senza aver capito il meccanismo degli indirizzi dei resti, Alice sarà probabilmente molto confusa riguardo a come le sia successo di perdere 1 BTC. Potrebbe capitarle così di ripetere di nuovo lo stesso errore.

Conclusioni


Quando usati correttamente, gli indirizzi dei resti aiutano ad evitare che le identità e le storie di spesa degli utenti Bitcoin siano rese pubbliche. Ma a causa di questa caratteristica si determina anche la possibilità di incorrere in perdite e furti. Per evitare potenziali errori costosi, familiarizzate in prima persona con gli indirizzi dei resti e cercate di capire come il vostro portafoglio software implementa la loro gestione.


Ringraziamenti


  • I'm grateful to members of the Bitcoin Subreddit who helped clarify two key technical points in the original version of this article.
  • Image courtesy of Rob & Lauren Lim.

Rich Apodaca

I build software and write books about technology. I've been working with Bitcoin since 2011.