Una descrizione (quasi) informatica del funzionamento di Bitcoin

Massimo Bernaschi e Enrico Mastrostefano spiegano che alla base del funzionamento di Bitcoin vi è un insieme di regole che determinano il comportamento di un software in esecuzione su una rete peer-to-peer che utilizza Internet per scambiare messaggi. Gli autori spiegano anche come si formi consenso dei partecipanti che garantisce sicurezza e validità alle transazioni, rendendo superflua un’autorità centrale che faccia da garante.

Bitcoin è una cripto-moneta decentralizzata open source che non dipende dalla fiducia in una particolare “istituzione”. Nonostante la sua popolarità, non è la prima moneta digitale. Infatti fin dal 1982 erano state poste le basi per il cash digitale da David Chaum nell’articolo “Blind signatures for untraceable payments”. Bitcoin è stata proposta da Satoshi Nakamoto, forse uno pseudonimo anche se a marzo di questo anno la rivista Newsweek ha individuato una persona che potrebbe essere il vero Satoshi Nakamoto.

Bitcoin è equivalente al contante (non è una carta di credito!) ma “circolante” su Internet. Alla base del funzionamento di Bitcoin vi è un insieme di regole (un “protocollo”) ed un software che implementa il protocollo bitcoin. Il software è continuamente in esecuzione su una rete peer-to-peer che utilizza Internet per scambiare messaggi. Il successo di Bitcoin dipende da tre tipi di consenso:

  1. Consenso sulle regole: i partecipanti concordano sui criteri che determinano quali transazioni sono valide. Un tipico problema sociale.
  2. Consenso sullo stato: i partecipanti concordano su chi è il proprietario di ogni bitcoin in qualsiasi momento. Un tipico problema tecnologico
  3. Consenso sul valore: i partecipanti concordano nell’accettare i bitcoin come forma di pagamento. Un problema comune a tutte le valute!

È evidente l’importanza della sicurezza per raggiungere il consenso. Quando si parla di sicurezza di Bitcoin bisogna distinguere due aspetti:

  1. Sicurezza intesa come affidabilità e robustezza. In altre parole la capacità di impedire che si possa spendere moneta non propria o che si possa spendere più volte la stessa moneta (problema della doppia-spesa)
  2. Sicurezza intesa come riservatezza, cioè come protezione della reale identità dei partecipanti alle transazioni.

Per capire come Bitcoin garantisca la sicurezza bisogna prima di tutto sapere cosa serve per effettuare una transazione. Gli ingredienti base sono una chiave pubblica (indirizzo Bitcoin) ed una chiave privata (gli stessi utilizzati per la firma digitale). Per inviare bitcoin è sufficiente che il mittente conosca la chiave pubblica del destinatario. Da notare che possono essere definite circa 1048 diverse chiavi pubbliche e quindi il destinatario può assumere molte diverse identità. Per spendere bitcoin è necessario creare la propria chiave privata (ed in questo caso si possono definire circa 1077 diverse chiavi private). Le chiavi sono scelte dal sistema sulla base di esotiche proprietà delle curve ellittiche (oggetti matematici che non hanno molto a che fare con le ellissi).
Quello che è importante è che il partecipante protegga la chiave privata con una password applicata al portafoglio, in genere incluso nel software bitcoin.

Il problema fondamentale di ogni moneta digitale e quindi anche di Bitcoin è quello di eliminare la possibilità della doppia spesa ovvero spendere più di una volta gli stessi bitcoin: Alice compra qualcosa da Bob (cedendo quindi la proprietà di alcuni bitcoin) e compra qualcosa da Charlie usando gli stessi bitcoin.
È soprattutto per eliminare questa possibilità, senza dover ricorrere ad un’autorità centrale, che Bitcoin utilizza la block chain che può essere definita come il “libro mastro” di Bitcoin.

Ogni nodo della rete ha una copia dell’intero libro mastro delle transazioni (ad oggi occupa circa 20 GigaByte). La block chain non è cifrata e può essere acceduta ed analizzata da chiunque. Come la block chain risolve il problema della doppia spesa?
Bob non tenta di verificare la transazione da solo ma chiede a tutti di partecipare alla verifica. Bob trasmette a tutti (broadcast) la possibile transazione e chiede di aiutarlo a determinare se è legittima. Quando un numero sufficiente di partecipanti conferma che quei bitcoin appartengono ad Alice, Bob assume che la transazione sia accettabile ed accetta i bitcoin. A questo punto tutti aggiornano la block chain con la nuova transazione. Se Alice tenta di spendere gli stessi bitcoin con Charlie, altri partecipanti lo noteranno ed indicheranno che c’è un problema con quella transazione.

Scritto così sembra facile ma ci sono almeno due problemi con questa soluzione. Quando il numero di partecipanti può considerarsi sufficiente? Cosa succede se Alice crea uno zilione di identità fittizie che comunicano sia a Bob sia ad Charlie che la transazione è valida?

La soluzione proposta dal protocollo Bitcoin è apparentemente contro intuitiva ma elegante e si basa sulla combinazione di due idee:

  1. Rendere (artificialmente) costoso, dal punto di vista computazionale, validare le transazioni
  2. Premiare i partecipanti che validano le transazioni.

In sostanza, per validare una transazione bisogna risolvere anche un puzzle numerico (proof of work). Il puzzle è pensato in modo da richiedere in media 10 minuti per essere risolto, considerando l’intera potenza di calcolo dei partecipanti. Questo intervallo di 10 minuti determina la granularità temporale di Bitcoin (cioè il tempo minimo richiesto per completare una transazione).

Il meccanismo del proof of work può essere visto come una competizione per validare le transazioni ed infatti il primo partecipante che risolve il puzzle riceve un premio in bitcoin. L’ammontare di questo premio diminuisce con il passare del tempo.
La soluzione funziona perché un partecipante scorretto che volesse far accettare una transazione maliziosa dovrebbe risolvere il puzzle prima degli altri ma la probabilità di un miner (nomignolo con cui sono chiamati i partecipanti alla validazione nel network Bitcoin) di essere il primo a validare una transazione è (rozzamente) uguale alla percentuale che ha di tutta la potenza di calcolo coinvolta nel processo di validazione. Di conseguenza, fino a quando i partecipanti onesti hanno più potenza di calcolo aggregata, è altamente improbabile che l’attacco abbia successo. I partecipanti cercano varie soluzioni per aumentare le loro possibilità di vincere la competizione, ad esempio creando dei mining pools cioè dei gruppi di utenti che si comportano come un unico partecipante, dividendo il premio in proporzione alla potenza di calcolo messa a disposizione del pool. Oppure ricorrono all’utilizzo di hardware specializzato, vengono cioè utilizzati degli ASIC (Application Specific Integrated Circuits) che risultano ordini di grandezza più veloci delle tradizionali CPU.

Per quanto riguarda l’anonimità dei bitcoin, in genere i bitcoin sono considerati ragionevolmente anonimi perché gli indirizzi Bitcoin derivano da chiavi pubbliche che potrebbero rappresentare chiunque in Internet. Da notare come nella block chain non sono mai salvate informazioni sugli indirizzi IP ed inoltre i
partecipanti sono incoraggiati ad avere molti indirizzi Bitcoin (anche uno nuovo per ogni transazione). Nonostante questo in realtà l’anonimità di Bitcoin non è garantita. Alcuni studiosi (Reid and Harrigan: “An analysis of anonymity in the bitcoin system”) raggruppando indirizzi bitcoin per definire utenti ed incrociando i dati con altre fonti (forum, blog, etc.) sono arrivati ad identificare un ladro.

Altri (Koshy, Koshy and McDaniel “An analysis of Anonymity in Bitcoin Using P2P Network Traffic”) hanno sviluppato un client bitcoin ad-hoc (CoinSeer) e dopo aver analizzato pattern di comunicazione della rete peer-to-peer, sono riusciti ad individuare circa 1000 coppie: indirizzo Bitcoin – indirizzo IP. Sono state comunque suggerite delle estensioni al protocollo Bitcoin per garantire l’anonimità (I. Miers, C. Garman, M. Green, and A. D. Rubin. Zerocoin: Anonymous Distributed E-Cash from Bitcoin. IEEE Symposium on Security and Privacy, 2013).

Ma come si fa a perdere l’anonimato? Diciamo che ci sono vari modi, alcuni “ovvi” altri meno (per chi non ha conoscenze tecniche particolari):

  1. Pubblicare il proprio nome e l’indirizzo Bitcoin
  2. Scambiare bitcoin con una moneta tradizionale (negli exchange points).
  3. Comprare merce con bitcoin
  4. Usare un “thin” client o un portafoglio “remoto”
  5. Non usare una VPN cifrata o la rete TOR.

Problemi di sicurezza ad un livello completamente diverso sono quelli legati ai possibili attacchi all’equilibrio di Bitcoin. Ad esempio si potrebbe arrivare alla
formazione di un cartello di miner: un gruppo che detenga più del 50% della capacità di mining può sovvertire qualsiasi regola basata sul consenso. Al momento la formazione di un cartello è improbabile ma non impossibile visto che il pool di miners https://ghash.io controlla circa il 36% della capacità di mining dell’intera rete. Un cartello potrebbe sfruttare la doppia spesa per guadagnare bitcoin ma il guadagno sarebbe comunque limitato perché il valore dei bitcoin diminuirebbe velocemente.

Un altro tipo di attacco possibile è quello stile Goldfinger (vedi l’omonimo film della serie 007) ma è improbabile che qualcuno possa volere sfruttare una posizione short su Bitcoin. Solo i governi (e le loro istituzioni finanziarie) potrebbero rappresentare una plausibile fonte di attacchi di questo tipo. Per concludere, se si vuole usare Bitcoin è fondamentale, come in qualunque caso in cui si utilizzino chiavi crittografiche, la scelta di una buona password di protezione della chiave privata. Attenzione però, perché se si perde la propria chiave privata si perdono i propri bitcoin!

Il protocollo Bitcoin rende (praticamente) impossibili truffe di tipo doppia spesa
ma, nonostante questo, il sito Bitcointalk riporta una descrizione dei furti (noti) di Bitcoin da cui si evince che i 10 maggiori hanno comportato la perdita di circa 750000 bitcoin. Ed infine, è difficile (ma non impossibile) sia tracciare sia cancellare transazioni (vedi, comunque http://www.bitundo.com).

Schede e storico autori