Dato che la valuta elettronica si basa su una prova crittografica, senza richiedere una terza figura intermedia, il denaro è al sicuro e le transazioni assolutamente semplici.
– Satoshi Nakamoto, inventore di Bitcoin
Il database su cui si basano le transazioni Bitcoin si chiama blockchain. La sua struttura, una sorta di libro mastro condiviso, gli consente di funzionare senza contare su alcuna autorità centrale fidata. Comprendere come funziona è fondamentale per poter integrare Bitcoin con qualsiasi sistema informativo.
La genesi
15 settembre 2008 – un momento topico per il mondo finanziario: Lehman Brothers, all’epoca la quarta più grande banca di investimenti, è andata in bancarotta dopo un tracollo nel valore delle sue azioni e dei suoi beni. Il suo collasso ha segnato l’inizio della Grande crisi finanziaria del 2008.
All’inizio del 2009 uno sviluppatore anonimo, o forse un gruppo di sviluppatori, di nome Satoshi Nakamoto, lancia una nuova valuta virtuale basato su un libro mastro delle transazioni ad accesso pubblico, distribuito e convalidato da una rete di nodi indipendenti. Questo misterioso sviluppatore ha lanciato Bitcoin all’inizio del 2009. Il primo blocco di transazioni è stato appunto chiamato blocco genesi (genesis block).
Che cos’è la blockchain
Il libro mastro pubblico che registra ogni transazione Bitcoin si basa su una struttura dati chiamata blockchain. Le transazioni vengono raggruppate in blocchi e poi condivise e convalidate da una rete di nodi. È il consenso sulla rete a determinare quali blocchi vengono accettati.
Chiavi, transazioni e blocchi
Con il classico esempio dell’invio di denaro fra Alice e Bob, illustreremo il meccanismo in base al quale la rete Bitcoin conferma una transazione.
Creazione di una transazione
Alice vuole inviare 4,0 BTC a Bob. Alice ha un portafoglio Bitcoin con due indirizzi e le corrispondenti chiavi private che controllano i due saldi: 1,2 BTC e 2,8 BTC. Per ricevere il denaro, Bob genererà una chiave privata con un indirizzo Bitcoin.
Per trasferire i bitcoin dobbiamo creare una transazione valida e trasmetterla in broadcast alla rete Bitcoin, che ne fornirà conferma. Se la transazione viene confermata dalla rete, attraverso operazioni di input e output l’importo trasferito sarà disponibile al destinatario, che potrà spenderlo.
Ogni input deve far riferimento esattamente a un output di una transazione precedente. Pertanto, nella blockchain, i bitcoin vengono inviati tramite script che scambiano il denaro fra gli indirizzi. Dato che ciascun indirizzo è controllato da una chiave privata, il denaro viene scambiato fra i possessori delle chiavi private. I trasferimenti di bitcoin, in realtà, avvengono facendo corrispondere gli input e gli output delle transazioni precedenti. Pertanto, per convalidare un trasferimento, è necessario conservare l’intera cronologia di tutte le transazioni che finanziano la transazione.
La prossima figura illustra il modo in cui le transazioni vengono utilizzate per connettere gli input e gli output per il trasferimento di importi in bitcoin. Alice invierà 4,0 BTC a Bob, combinando come input due indirizzi in suo possesso. Scritti nella transazione, gli importi di 1,2 BTC e 2,8 BTC vengono elencati come input da Alice e inviati come output a Bob, per un importo totale di 4,0 BTC.
Ma prima di poter trasmettere in broadcasting la transazione, dobbiamo dimostrare alla rete che Alice sia il mittente originale della transazione. Dimostrando alla rete che abbiamo le chiavi private, i nodi che convalidano questa transazione possono concordare sul fatto che essa, in effetti, ha avuto origine da Alice.
A ogni indirizzo pubblico elencato nel portafoglio di Alice, corrisponde una chiave privata. Con le proprie chiavi private, Alice può firmare la transazione utilizzando una firma digitale. Una verifica sulla firma dimostra che Alice ha firmato la transazione e che da allora la sua firma non è stata alterata.
Dopo che la transazione è stata confermata dalla rete, Bob avrà a disposizione 4,0 BTC, da spendere come input per una nuova transazione. La catena continua.
Firme digitali
Un classico problema risolto dalla crittografia è il modo in cui una parte può inviare un documento a un’altra parte dimostrando che tale documento non sia stato alterato in alcun modo o addirittura sostituito. Supponiamo che Alice abbia un messaggio da inviare a Bob. Il quale vuole assicurarsi che non sia stato modificato.
Alice ha quindi bisogno di un modo per firmare in modo digitale il documento, così da dimostrare che quella ricevuta da Bob sia una copia esatta del documento originale.
Le firme digitali contano su un insieme di chiavi pubbliche e private. L’apposizione della firma digitale su un documento impiegando una chiave privata può essere verificata impiegando la relativa chiave pubblica. Ogni documento firmato, se è verificato dalla chiave pubblica si ritiene che sia originale.
La crittografia a chiave pubblica
La crittografia a chiave pubblica è un algoritmo crittografico che impiega due chiavi, generate matematicamente, per crittografare e decrittografare un messaggio o per firmare in modo digitale un documento. La chiave privata serve per crittografare o firmare il documento, mentre la chiave pubblica serve per decrittografare il messaggio o per verificare la firma.
Le chiavi pubblica e privata sono costituite semplicemente da lunghi numeri. Ecco un esempio di chiave privata:
3082011302010104209ea335d666d9e097c5a5e92ef32228a18c3615aa38e13fb593712a11f039c148a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a14403420004a6b634eb85a8d9d6fe34bc6666760b3343c40f7709392541bc2d3b7666eda4d7c7c8dd578af2790870a591c0f17e285ce99cb2dd950b37b00f1031675bb678d6
La chiave pubblica corrispondente ha il seguente aspetto:
04a6b634eb85a8d9d6fe34bc6666760b3343c40f7709392541bc2d3b7666eda4d7c7c8dd578af2790870a591c0f17e285ce99cb2dd950b37b00f1031675bb678d6
Queste due chiavi sono legate fra loro in modo matematico e non possono essere confuse con un’altra chiave.
Firma di un documento
Nell’esempio con Alice e Bob, utilizzando il software di crittografia, Alice crea una coppia di chiavi, pubblica e privata. Quindi invia a Bob una copia di questa chiave pubblica. Prima di inviare il documento a Bob, Alice lo firma con la propria chiave privata e include la firma nel documento.
Quando Bob riceve il documento, potrà verificare la firma apposta alla copia del documento. Se la firma è valida, Bob ha la garanzia che il firmatario sia stato proprio Alice.
Indirizzi Bitcoin
Gli indirizzi Bitcoin vengono generati a partire dalla chiave pubblica tramite alcuni passi che comprendono degli hash crittografici.
Hash crittografici
Gli hash sono funzioni che possono produrre un digest di un documento. Normalmente il digest è costituito da una breve stringa di caratteri, a seconda dell’algoritmo hash impiegato. Per esempio, un noto algoritmo hash, chiamato SHA256, produce un codice digest di 40 caratteri a partire da un documento di qualsiasi lunghezza.
Ogni pur minimo intervento sul documento produrrà un digest completamente differente. Esiste una precisa relazione matematica fra il documento e il suo digest, ma è impossibile generare il documento a partire dal digest. Se il digest di una copia è uguale a quello dell’originale, la copia è autentica.
In Bitcoin, a ogni transazione viene applicata una firma digitale, che viene poi impiegata per verificare che essa sia stata creata dal possessore della chiave privata. L’indirizzo Bitcoin utilizzato per inviare il denaro viene creato utilizzando algoritmi hash completamente differenti. La firma e l’indirizzo Bitcoin vengono entrambi inclusi nella transazione. Se la firma si rivela valida, il trasferimento di denaro viene confermato dalla rete.
Generazione di un indirizzo Bitcoin
Gli indirizzi Bitcoin vengono generati a partire dall’hash della chiave pubblica di una coppia di chiavi crittografiche. Il risultato è un indirizzo pubblico che possiamo utilizzare per ricevere i bitcoin e la chiave privata necessaria per spenderli.
La rete decentralizzata
Bitcoin è un protocollo per valute che si basa su una rete decentralizzata. Ogni nodo è indipendente e può unirsi alla rete o lasciarla in qualsiasi momento. Una rete decentralizzata è estremamente resistente, in quanto non offre alcun punto di fallimento. Se uno o più nodi dovessero disattivarsi, i nodi superstiti potrebbero reindirizzare la connessione attraverso la rete, impiegando altri nodi online.
Bitcoin è sostanzialmente denaro programmabile.
Attacchi alla rete
La rete Bitcoin è protetta dal suo stesso consenso, ma esistono comunque rischi per la sua stabilità, connessi alla sua struttura.
L’attacco del 51 percento
È teoricamente possibile che una grossa potenza di calcolo assuma il controllo della rete e accetti doppie spese o blocchi spese legittime. Questo è l’attacco del 51 percento.
È successo che si verificassero le condizioni per l’attacco, che però non è stato effettuato. Alcuni lo ritengono finanziariamente svantaggioso, in quanto la rete rifiuterebbe immediatamente i blocchi contraffatti.
L’attacco race
Un acquirente fraudolento potrebbe tentare di effettuare una doppia spesa inviando contemporaneamente due transazioni alla rete. Se ciascun rivenditore dovesse accettare la transazione senza conferme, in questo modo sarebbe possibile effettuare una doppia spesa.
L’antidoto ovvio a questo attacco consiste nell’attendere, semplicemente la conferma di entrambe le transazioni.
L’attacco Finney
L’attacco Finney deriva dall’omonimo sviluppatore Bitcoin. In questo attacco, un miner deve eseguire il pre-mining di una transazione in un nuovo blocco ed effettuare la spesa prima di rilasciare il blocco. Se il pagamento viene confermato, il nuovo blocco includerà una transazione a doppia spesa. La soluzione consiste nell’attendere almeno sei conferme.
Riepilogo
La blockchain si sta rapidamente imponendo come una tecnologia molto efficace per registrare il trasferimento del denaro. Grazie alla sua struttura decentralizzata, risulta estremamente resistente e completamente trasparente. Continuerà a rappresentare una forza potente nel mondo finanziario e si svilupperà nel corso del tempo.
Questo articolo richiama contenuti dal capitolo 4 di Bitcoin.
Immagine di apertura di Harrison Kugler su Unsplash.