mercoledì 5 febbraio 2014

Bitcoin: come funziona il protocollo (Parte 1)

Premessa

Iniziamo qui una serie di post sul funzionamento di Bitcoin a livello tecnico/teorico. Credo possa interessare a molti (almeno a chi possiede un minimo di background).

Ci tengo a precisare che niente è farina del mio sacco. Questi post sono delle mere ed imprecise traduzioni del fantastico articolo su Bitcoin di Michael Nielsen (un ricercatore di fama mondiale nel campo dell'informatica). In quanto traduzioni, l'uso della prima persona singolare non è ovviamente volto ad identificare me, ma, appunto, il vero autore dell'articolo (che vi invito a leggere direttamente se avete familiarità con l'inglese). Via alle danze!

Introduzione

Svariati articoli sono stati scritti con l'obiettivo di descrivere il funzionamento di Bitcoin, la valuta peer-to-peer online. Molti di questi, però, forniscono delle considerazioni del tutto superficiali. Altri invece vanno più a fondo ma trascurano comunque taluni punti cruciali del protocollo. L'obiettivo di questo post è quindi quello di spiegare le idee principali che stanno dietro al protocollo di Bitcoin in modo chiaro, semplice e comprensibile. Partiremo da alcuni concetti iniziali di modo da costruire le basi teoriche su cui si basa il protocollo per poi far luce sui dettagli di questo ed arrivare quindi ad analizzare i dati grezzi (raw data) di una transazione Bitcoin.

Comprendere dettagliatamente il protocollo non è semplice. Forse è a causa di ciò che molti prendono il funzionamento di Bitcoin come un dogma e si perdono in riflessioni sul come diventare ricchi con Bitcoin, sul fatto che Bitcoin sia una bolla speculativa o meno, sulla fine delle commissioni bancarie e così via. Probabilmente tutte discussioni interessanti ma che limitano ed esulano dalla comprensione tecnico/teorica di Bitcoin. Capire i dettagli del protocollo permette invece di aprirsi verso nuove prospettive. In particolare, è la base per la comprensione del linguaggio di scripting built-in di Bitcoin, il quale rende possibile la creazione di nuovi strumenti finanziari, come ad esempio gli smart contracts. Tali nuovi strumenti possono a loro volta dar vita a nuovi mercati e quindi a nuove forme di interazione sociale. Ma passiamo ora alla spiegazione!

Descriverò gli script e le estensioni di Bitcoin in futuro. Invece, questo post si concentra nel descrivere gli ingranaggi del protocollo alla base di Bitcoin. Per la comprensione di questo post sono necessarie delle infarinature sui concetti di crittografia a chiave pubblica e firma digitale. Inoltre, assumerò una vostra familiarità con gli hash crittografici. Niente di particolarmente difficile, tutte cose abbordabili da uno studente al primo anno di un corso di matematica o informatica.

Può sembrare sorprendente che Bitcoin si basi sulla crittografia. Ma Bitcoin non dovrebbe essere una valuta? Oppure è un modo per spedire messaggi segreti? In effetti, i problemi che Bitcoin deve risolvere riguardano perlopiù la messa in sicurezza delle transazioni: fare sì che non ci siano furti, truffe, false identità, .... Nel mondo reale ricerchiamo la sicurezza tramite lucchetti, cassette di sicurezza, firme e caveau bancari. Nel mondo digitale, questo tipo di sicurezza è ottenuta tramite la crittografia. Questo è il motivo del cuore crittografico di Bitcoin.

La mia strategia in questo post è di "costruire" Bitcoin per fasi successive. Inizierò spiegando una semplice valuta digitale che chiamerò Infocoin, per distinguerla da Bitcoin. La nostra prima versione di Infocoin avrà molte carenze, quindi itereremo lo sviluppo di Infocoin introducendo una o due nuove (e semplici) idee ad ogni iterazione. Dopo un po' di iterazioni arriveremo al protocollo Bitcoin completo. Avremo reinventato Bitcoin!

Questa strategia può sembrare lenta e macchinosa rispetto ad altre, ma ha il grosso vantaggio di rendere chiaro il perché Bitcoin è stato progettato così com'è.

Passo 1: una dichiarazione di intenti firmata

Come possiamo progettare una valuta digitale?

A primo acchito un tale marchingegno potrebbe sembrare impossibile. Supponiamo che Alice possieda un po' di moneta digitale che vuole spendere in qualche modo. Se Alice può usare una sequenza di bit come moneta, come possiamo evitare che possa usare la stessa sequenza per uno, due, cento, mille acquisti? O ancora, se potessimo in un qualche modo risolvere questo problema, come potremmo evitare che qualcun altro possa contraffare, clonare o generare la stessa sequenza di bit così da rubare denaro ad Alice?

Questi sono solamente due dei molteplici problemi che sussistono nell'usare l'informazione come moneta.

Come prima versione di Infocoin, cerchiamo quindi di trovare un modo che permetta ad Alice di usare una sequenza di bit come forma di moneta (seppur molto primitiva ed incompleta per iniziare) che le dia almeno qualche protezione contro la contraffazione. Supponiamo che Alice voglia dare a Bob un infocoin. Per far ciò, Alice scrive un messaggio "Io, Alice, do a Bob un infocoin". Poi, firma digitalmente il messaggio usando la sua chiave (crittografica) privata, e divulga pubblicamente la sequenza di bit corrispondente al suo messaggio firmato digitalmente.

(Giusto un veloce appunto. Userò "Infocoin" per riferirmi al protocollo, e "infocoin" come denominazione specifica della moneta. Questo uso è comune, seppur non universalmente riconosciuto, anche nel mondo di Bitcoin.)

Questo prototipo di valuta digitale non impressiona per niente. Ma possiede comunque alcune virtù. Chiunque al mondo (incluso Bob) può usare la chiave pubblica di Alice per verificare che Alice è davvero la persona che ha firmato il messaggio "Io, Alice, do a Bob un infocoin". Nessun altro può aver creato quella sequenza di bit, nemmeno Alice stessa potrebbe più negarlo. Quindi, il protocollo stabilisce che Alice veramente intende dare a Bob un infocoin. Lo stesso argomento (nessun altro può aver creato quella sequenza di bit) fornisce ad Alice anche una limitata protezione dalla contraffazione. Certo, dopo che Alice ha pubblicato il suo messaggio è possibile che altre persone possano duplicarlo, ed in questo senso la contraffazione è possibile. Ma nessuno può farlo da zero (ovvero duplicare/predirre un messaggio non ancora divulgato). Queste due proprietà, la dichiarazione di intenti di Alice, e la limitata protezione dalla contraffazione, sono caratteristiche notevoli di questo protocollo.

Non ho ancora detto cos'è la moneta digitale. Per essere espliciti: è esattamente la sequenza di bit rappresentante il messaggio di dichiarazione di intenti (es: "Io, Alice, do a Bob un infocoin") firmato digitalmente. Similmente, le successive versioni di Infocoin, useranno questa rappresentazione della moneta come messaggi firmati digitalmente, seppur sempre più elaborati.

Nessun commento:

Posta un commento