Bitcoin vs. bitcoin
Nei precedenti articoli ci siamo concentrati sugli aspetti sociologici ed economici di Bitcoin, cercando di comprendere perché esso sia indispensabile nella società moderna. Adesso possiamo fare un passo avanti e iniziare a illustrarne il funzionamento.
Va notato che, come in molti testi che trattano questo argomento, anche qui utilizzeremo il termine Bitcoin — con la B maiuscola — per riferirci all’intero sistema, e il termine bitcoin —con la b minuscola — per riferirci alla moneta proprietaria del sistema.
Che cos’è Bitcoin
Partiamo cercando di dare una definizione chiara di cosa sia Bitcoin. Per farlo, utilizziamo le parole di Andreas Antonopoulos, uno dei più noti divulgatori del settore [1]:
Bitcoin è un sistema di contante elettronico completamente decentralizzato che non dipende da nessuna autorità centrale per l’emissione della moneta o per la validazione delle transazioni. L’innovazione chiave, rispetto alle precedenti forme di denaro elettronico, è stata quella di utilizzare un sistema di computazione distribuito per condurre un’elezione globale ogni 10 minuti, facendo sì che il network decentralizzato arrivi a un consenso riguardo lo stato delle transazioni. Questo risolve elegantemente il problema del double spending…
Sebbene la definizione appena fornita corrisponda esattamente alla realtà, questa non è sufficiente per spiegarci cosa sia, né tantomeno come funzioni, Bitcoin. Data la complessità di questo sistema e le molteplici tecnologie che utilizza, è necessario scomporlo in sottosistemi più semplici da analizzare e comprendere, per poi ricollegarli tra di loro ed avere il quadro completo.
In prima battuta Bitcoin può essere diviso in quattro componenti principali, che cooperano per il corretto funzionamento del sistema. Queste componenti sono:
- la struttura fisica, ossia lo strato comunicativo;
- la blockchain, ossia lo strato economico;
- gli script crittografici, ossia lo strato della sicurezza;
- il mining distribuito, ossia lo strato del consenso e dell’emissione di moneta.
Affrontiamoli nell’ordine elencato, cercando man mano di spiegarne il funzionamento e mostrare come interagiscono.
La rete
A livello strutturale Bitcoin è un’architettura peer-to-peer costruita sopra internet. Il termine peer-to-peer [2] si riferisce a una rete di computer dove non esiste una precisa gerarchia fra i vari nodi che la compongono, vale a dire che sono tutti paritari con stessi diritti e doveri; mentre, con la definizione, “costruita sopra internet”, ci si riferisce al fatto che sfrutta il layer di trasporto di questa rete (il protocollo TCP/IP), per far comunicare i nodi del sistema Bitcoin.
L’artefice di questa comunicazione è il protocollo Bitcoin, ovvero un software capace di:
- far rispettare un’insieme di regole sulle quali si basa la fiducia (distribuita) dell’intero sistema;
- rendere implementabili una serie di funzionalità che ogni nodo può fornire/richiedere alla rete.
Per poter partecipare a questa rete, è sufficiente possedere un computer collegato ad internet, installare uno specifico software, ovvero un’implementazione del protocollo Bitcoin — ne esistono diverse ma tutte in grado di comunicare tra di loro — ed eseguirlo. La parte più impegnativa di questa procedura, è allineare il registro locale delle transazioni avvenute sulla rete con la blockchain di Bitcoin. Tale operazione può richiedere fino a diversi giorni, a seconda della velocità della connessione che si utilizza, e molto spazio di memoria: ad oggi, gennaio 2023, la dimensione della blockchain di Bitcoin è di circa 450 GB.
Le funzioni dei nodi
Sebbene i nodi della rete Bitcoin siano tutti uguali tra di loro e rispettino le stesse regole, questo non vuol dire che tutti assolvano anche agli stessi compiti. Infatti, ogni nodo può scegliere quali funzionalità del protocollo implementare e, a seconda del set per il quale opta, cambiano i servizi che riesce a fornire alla rete nonché la nomenclatura con il quale viene identificato.
Le principali funzionalità che un nodo può implementare sono:
- network routing, obbligatoria per tutti, che consente ai vari membri del network di comunicare fra loro rispettando determinare regole;
- blockchain database, opzionale, che si ottiene quando un nodo ricava in maniera indipendente una copia completa e aggiornata della blockchain di Bitcoin, ossia di tutto lo storico delle transazioni finanziarie avvenuto dalla nascita del sistema (blocco genesi, 3 gennaio 2009); per fare questo, il nodo deve verificare una a una tutte le transazioni occorse sul sistema, così da non dover riporre la fiducia sullo stato attuale della blockchain in nessun’altra fonte;
- mining, opzionale — è necessario avere implementato la funzionalità di blockchain database per eseguire anche questa — che consente a un membro della rete di concorrere alla generazione dei nuovi blocchi del sistema, tentando di vincere l’incentivo economico messo in palio;
- wallet, opzionale, che consente al generico nodo di gestire in autonomia i propri fondi, ossia avere la capacità di ricevere, inviare e custodire i bitcoin.
Configurazione dei nodi
Le configurazioni più classiche che un nodo può assumere sono quelle rappresentate nella tabella 1.
Tutte le varie forme di wallet che non utilizzano un nodo Bitcoin personale, sono dette SPV, Simplified Payment Verification, e rappresentano la versione più semplice d’interazione con il sistema. Questa semplicità si paga in termini di sicurezza, in quanto è necessario affidarsi a terze parti per poter interagire con la rete Bitcoin: SPV non fa network routing né tanto meno blockchain database. I wallet sugli smartphone o sul web sono esempli classici di questa tipologia.
Crittografia a chiave pubblica, funzioni di hash e firme digitali
Prima di andare avanti nell’esposizione dei sottosistemi che compongono Bitcoin, è necessario introdurre una tecnologia che sta alla base dell’intero sistema ed è utilizzata in maniera trasversale da tutti i suoi strati, ovvero la crittografia.
Questa disciplina studia i metodi per rendere un messaggio non comprensibile a persone non autorizzate a leggerlo, garantendo così la riservatezza delle informazioni in esso contenute, durante la trasmissione dello stesso attraverso canali non sicuri (p.e.: Internet).
Applicandola a Bitcoin si riescono a ottenere una serie di benefici e capacità, i principali dei quali sono:
- mettere in sicurezza l’intero ecosistema, dato che Bitcoin utilizza il protocollo TCP/IP per far comunicare i propri nodi, esso risulta esposto a tutti i possibili attacchi hacker;
- rendere il sistema trustless, in quanto lo scopo principale di Bitcoin è permettere transazioni economiche tra sconosciuti senza una terza parte a fare da garante;
- rendere possibile la generazione dei wallet digitali, così da consentire la detenzione e lo scambio degli asset crittografici, ossia i bitcoin.
Le principali funzionalità crittografiche che utilizza Bitcoin sono la crittografia a chiave pubblica, le funzioni di hash e le firme digitali. Vediamole più dettagliatamente di seguito.
Crittografia a chiave pubblica (o asimmetrica)
La crittografia a chiave pubblica o crittografia asimmetrica [3] consente di generare una coppia di chiavi, una privata e una pubblica, capaci di consentire lo scambio di informazioni confidenziali su internet.
Queste chiavi altro non sono che numeri di grandi dimensioni, con opportune proprietà matematiche, quali:
- la chiave pubblica deriva direttamente da quella privata ma non è invertibile, motivo per cui si può condividere in chiaro su canali non sicuri, ossia è impossibile risalire alla chiave privata conoscendo la sua chiave pubblica;
- la chiave privata riesce a decodificare messaggi codificati con la chiave pubblica;
- se la generazione della chiave privata avviene in maniera puramente casuale, è impossibile ad oggi violarne la sicurezza, almeno con i computer tradizionali in tempi ragionevoli, cioè decenni.
Funzioni di hash
Le funzioni di hash [4] consentono di mappare dati di dimensioni arbitrarie, ovvero qualsiasi file, in dati di dimensioni fisse, ovvero una stringa di dimensioni fisse composta da lettere e numeri (detta hash).
Le proprietà fondamentali delle funzioni di hash sono:
- essere deterministiche, ossia lo stesso input produce sempre lo stesso output;
- essere facili da calcolare, ossia noto l’input il calcolo del suo hash è semplicissimo;
- essere unidirezionali, ossia è “quasi” impossibile calcolare la funzione inversa, se non ricorrendo ad algoritmi di brute force che provano tutte le combinazioni possibili;
- generare l’effetto valanga, ossia anche la più lieve modifica nell’input produce un cambiamento drastico nell’output; se ad un file di dimensione generica viene cambiato anche un solo carattere, l’hash risultante sarà completemente diverso da prima.
Si può pensare all’hash di un file come alla sua “impronta digitale“.
Firme digitali
Le firme digitali [5], derivanti dalla combinazione fra la crittografia a chiave pubblica e gli hash, consentono di generare prove matematiche che dimostrano che i dati ad esse associati hanno una serie di proprietà intrinseche, quali:
- l’autenticazione, ossia il fatto che una firma valida dimostra inequivocabilmente che il messaggio è stato inviato da quell’utente; ciò non significa rivelare l’identità dell’utente ma sapere che l’utente in possesso della chiave privata che ha firmato quel documento ne è effettivamente il mittente;
- l’integrità, ossia, se un messaggio è firmato digitalmente, qualsiasi modifica al messaggio successiva alla firma, invalida la firma stessa;
- il non ripudio, ossia se qualcuno firma un messaggio non può in un secondo momento negare di averlo firmato.
Conclusioni
Per questo mese ci fermiamo qui. Nel prossimo articolo continueremo a vedere altri elementi costitutivi di Bitcoin, a partire da chiavi, indirizzi e wallet e occupandoci dei concetti di struttura decentralizzata e distribuita.
Riferimenti
[1] Andreas M. Antonopoulos, Mastering Bitcoin. 2nd edition, O’Reilly, 2017
https://aantonop.com/books/mastering-bitcoin/.
[2] Approfondimento di Rete peer-to-peer da Wikipedia
https://it.wikipedia.org/wiki/Peer-to-peer
[3] Approfondimento di Crittografia a chiave pubblica da Wikipedia
https://it.wikipedia.org/wiki/Crittografia_asimmetrica
[4] Approfondimento di Funzioni di hash da Wikipedia
https://it.wikipedia.org/wiki/Secure_Hash_Algorithm
[5] Approfondimento di Firma digitale da Wikipedia
https://it.wikipedia.org/wiki/Firma_digitale