Sie sind auf Seite 1von 26

ARCHITETTURE SOFTWARE, A.A.

2013/2014 1

Bitcoin: una descrizione architetturale


Marco Di Nicola

AbstractProposta nel 2008 da Satoshi Nakamoto, Bitcoin e nota come la prima valuta elettronica che non richieda
lappoggio o mediazione di alcuna istituzione finanziaria per condurre transazioni e produrre nuove monete.
Tutto questo e possibile sfruttando unarchitettura peer-to-peer totalmente decentralizzata, basata su principi di
crittografia asimmetrica e schemi proof-of-work per gestire lo scambio e creazione di moneta, garantendo protezione
contro tentativi di contraffazione delle transazioni effettuate e attacchi double-spending.
Questo documento si propone di fornire una descrizione di Bitcoin da un punto di vista architetturale, strutturandosi
come segue.
Dopo averne introdotto i principi operativi, sara descritto il contesto di utilizzo di Bitcoin e i principali casi duso,
discutendo quindi le proprieta di maggiore interesse (prime fra tutte la sicurezza, mantenimento di privacy e anonimato
e scalabilita del sistema).
Prendendo in analisi un prototipo di software client (loriginale, concepito come proof of concept del sistema), sara
descritta la sua struttura, con componenti principali e relative funzioni e interazioni, rappresentando in maniera piu
dettagliata il comportamento del sistema; verranno anche descritte alcune derivazioni del modello di client peer-to-peer
originale, piu vicine ad uno stile client-server.
Sara quindi discusso il razionale che sta dietro alla progettazione di una tale architettura, mostrando il risultato di analisi
svolte su alcuni dei suoi punti critici e presentando note alternative a Bitcoin o sue estensioni, fra i sistemi di valuta
elettronica (tra i quali spiccano Ripple ed Ethereum).

1 I NTRODUZIONE I principi e metodi alla base di questi mecca-


nismi sono descritti nel paper originale pubbli-
cato su The Cryptography Mailing List presso

B ITCOIN e forse una delle valute elettroniche


maggiormente adottate al giorno doggi:
un migliaio di compagnie e singoli individui
il sito metzdowd.com nel 2008 [Nak08], da un
individuo noto sotto lo pseudonimo di Sato-
shi Nakamoto, la cui identita rimane tuttora
sono elencati nella sezione Trade del wiki uf- ignota.
ficiale [12], fra gli enti che la accettano come Nakamoto propose luso di una rete peer-to-
metodo di pagamento per beni materiali o peer pura per realizzare un sistema di tran-
servizi online (lUniversita di Nicosia, capitale sazioni elettroniche, libero da requisiti di trust
di Cipro, permette il pagamento delle tasse nelle entita intermedie che sono alla base degli
universitarie tramite bitcoins); in alcuni paesi odierni sistemi di pagamento (banche, societa
sono persino disponibili sportelli ATM per il di carte di credito) e basato su una valuta
cambio con denaro materiale. generata autonomamente dai partecipanti al
I bitcoins (BTC) in circolazione al tempo del- sistema stesso; come proof of concept di que-
la stesura di questo documento sono piu di sto modello, Nakamoto avvio lo sviluppo del
12,605,150; il valore medio di una singola mo- client originale (Bitcoin Core), di natura open
neta e pari a 448.60 dollari americani (327.40 source e correntemente mantenuto da un vasto
euro), contro i 13.30 stimati a Gennaio del 2013. gruppo di sviluppatori dediti alla causa.
La ragione di questa diffusione va cercata nella La prima transazione fu effettuata nel Gennaio
natura decentralizzata dei meccanismi alla base del 2009 e, per il Giugno 2011, si osservo la pre-
di produzione e scambio di monete, nonche senza di ben 6.5 milioni di bitcoins, in circolo
nelle forti garanzie di affidabilita del sistema: fra piu di 10,000 utenti stimati.
non e possibile spendere due volte, contraffare In merito alla terminologia utilizzata in questo
o rubare bitcoins. documento: il termine Bitcoin fara riferimen-
ARCHITETTURE SOFTWARE, A.A. 2013/2014 2

to alla valuta in se, al sistema che ne e alla


base o alla rete peer-to-peer che ne fa uso e
relativo protocollo di comunicazione, mentre
con bitcoin sara denotato un quantitativo di
denaro virtuale trasferibile dagli utenti.
Nella sezione successiva sara fornito un breve
sunto dei principi operativi alla base di Bitcoin,
discussi ed esplicati maggiormente nel resto del
documento. Figura 1. Esempi di transazioni Bitcoin con
multipli input/output

2 P RINCIPI OPERATIVI
laccettazione: in un certo senso, le monete
Al fine di eliminare il requisito di trust di possedute da ogni utente sono mantenute da
un utente in altre entita, Bitcoin fonda i suoi tutti gli altri.
principi operativi sulluso di crittografia asim- In ogni caso sara solo Q a poter fare riferi-
metrica per firme digitali e funzioni di hashing mento alla specifica transazione a suo beneficio,
one-way (a senso unico, non invertibili); que- nellatto di trasferire bitcoins ad altri utenti,
sto ne fa la prima criptovaluta effettivamente mediante uso della sua chiave privata e quindi
implementata. firma digitale, verificabile grazie alla corrispet-
Nella rete Bitcoin ogni utente P puo possedere tiva chiave pubblica precedentemente allegata
una o piu identita (o account), definite come da P alla transazione.
coppie (kpub , kpriv ) di chiavi pubbliche e private In sostanza, lunico riferimento ai bitcoins pos-
per crittografia asimmetrica: se da kpub viene seduti da Q e la somma degli importi del-
derivato lindirizzo Bitcoin pubblico di P , kpriv le transazioni a lui destinate e non ancora
e conservata nel suo portafoglio virtuale (wal- utilizzate come input da altre.
let) ed e utilizzata da P per spendere i bitcoins Resta il problema di evitare che P conduca
ricevuti. quasi simultaneamente una seconda transazio-
Una moneta e definita come il risultato di una ne diretta a R, facendo riferimento alle stesse
catena di transazioni, firmate digitalmente da transazioni precedenti (stessi inputs) usate per
chi le emette, tra i diversi partecipanti alla rete Q.
peer-to-peer. Questo attacco e una falla di molti siste-
Ogni nuova transazione da P a Q fa riferi- mi di moneta elettronica, ed e denominato
mento ad una o piu transazioni precedenti, double-spending.
contenenti il quantitativo di bitcoins preceden- Un tipico mezzo di protezione consiste nel-
temente trasferiti a P da altri utenti e conser- lintrodurre unautorita certificata che attesti
vate localmente da ogni partecipante alla rete la validita di ogni transazione controllando
peer-to-peer. che non faccia riferimento ai medesimi inputs
Un messaggio contenente i riferimenti in que- di unaltra, ma naturalmente questo vanifiche-
stione (inputs), lammontare di bitcoins da tra- rebbe lintero paradigma di decentralizzazione
sferire e il digest della chiave pubblica (indi- adottato da Bitcoin.
rizzo) di Q (output), viene emesso in broadcast La soluzione utilizzata consiste invece nella
sulla rete e propagato dai nodi; e opportuno sopracitata disponibilita pubblica di tutte le
menzionare che lunita atomica in cui e possi- transazioni e in un meccanismo che permetta ai
bile scomporre un bitcoin e il satoshi, tale che nodi della rete di concordare (eventualmente)
1 BT C = 100, 000, 000 satoshi. su quale delle due transazioni sia effettiva.
Tutte le transazioni da/a P sono conservate da Tale meccanismo risiede in un timestamp ser-
tutti i nodi della rete, permettendo a Q di vali- ver distribuito che possa gestire una catena
dare pubblicamente quella ricevuta attraverso di blocchi di transazioni, tali che ogni bloc-
un consenso collettivo e a P di osservarne co k conservi nella propria intestazione un
ARCHITETTURE SOFTWARE, A.A. 2013/2014 3

riferimento alle transazioni contenute in esso


e un valore hashk1 derivato da hashing del
blocco precedente, il quale a sua volta conterra
hashk2 , etc.; questa lista concatenata di blocchi
e denominata block chain.
Una volta costruita questa catena di blocchi,
della quale ogni nodo della rete mantiene la Figura 2. Block chain
propria versione locale, la semplice inclusione
di un blocco al suo interno potrebbe rappresen-
tare laccettazione, da parte del singolo nodo, di certo numero, denominato target, modificato
tutte le transazioni contenute nel blocco. Nuo- in modo dinamico ed uniforme (secondo uno
ve transazioni sono ammesse allinterno di un schema predefinito) dai nodi della rete.
blocco solo se valide: sintatticamente corrette, Basti pensare che, in un istante del Settem-
non duplicate e che non facciano riferimento bre 2011, il target richiese una media di
ad inputs inesistenti o gia indicati da altre. 7,539,609,386,691,347 tentativi di hashing per
In fase di verifica dellaccettazione di una spe- trovare la proof-of-work.
cifica transazione, si potrebbe controllare che Una volta ottenuto il giusto valore di s, il miner
un numero sufficiente di nodi la possegga al- annuncia la sua soluzione al resto della rete
linterno di un blocco nella propria versione emettendo in broadcast il blocco k, compren-
della block chain, la quale si suppone essere sivo di hashk1 e s nella propria intestazione. I
coerente con quelle mantenute dal resto della nodi che ricevono k lo accettano e inseriscono
rete Bitcoin. nella propria versione della block chain solo
Rimane il problema di evitare che un attac- se tutte le transazioni contenute in esso sono
cante capace di allocare molti nodi (indirizzi valide, il valore di hashk1 corrisponde effetti-
IP) distinti sia in grado di imporre il suo voto vamente al digest dellultimo blocco inserito e
su quello di nodi onesti, fornendo una sua lapplicazione di SHA-256 allintestazione con
versione alterata della chain (e quindi delle il nonce dato risulta in un prefisso del giusto
transazioni al suo interno). numero di bits 0; il vantaggio delle funzioni
Questo problema puo essere risolto rendendo di hashing one-way risiede proprio nel fatto
computazionalmente costosa la creazione di che, al contrario della ricerca della soluzio-
un blocco valido da aggiungere alla chain. ne, la verifica di questultima sia pressoche
Lo schema utilizzato da Bitcoin e il seguente: istantanea.
determinati nodi della rete (miners) raccolgono Laccettazione prevede anche la ritrasmissio-
tutte le transazioni non ancora accettate nel ne del blocco in questione ad altri nodi (i
proprio blocco k e cercano una cosiddetta proof- quali ripeteranno il medesimo processo di
of-work, ossia compiono uno sforzo computa- validazione).
zionale che consiste nel cercare un nonce s tale Il punto di forza del meccanismo di proof-of-
che la funzione di hashing utilizzata (SHA- work e che per contraffare un blocco k, per
256), applicata allintestazione del blocco com- esempio modificando le transazioni in esso,
prensiva del nonce, risulti in un digest la cui occorre modificare anche tutti i successivi (in
rappresentazione binaria a 256 bits abbia un quanto le loro intestazioni dipenderanno dal
prefisso composto da un certo numero di bits digest di k) e trovare una nuova proof-of-work
0. per ognuno di essi: questo risulta in uno sforzo
Il numero di bits 0 viene determinato in manie- computazionale non banale, esponenziale nel
ra uniforme da tutti i nodi della rete e calcolato numero di bits 0 del prefisso ricercato e nel
in base al numero di blocchi aggiunti alla chain numero di blocchi prodotti allo stesso tempo
in un intervallo di 2 settimane di tempo. da miners onesti.
Questo problema puo essere riformulato come Nel probabile caso di fork (diverse biforcazioni
quello di trovare un nonce tale che lhashing di blocchi a partire da k 1) nella chain, i
dellintestazione del blocco sia minore di un nodi sceglieranno eventualmente di estendere
ARCHITETTURE SOFTWARE, A.A. 2013/2014 4

naio 2009 e ha prodotto i primi 50 bitcoins,


messi in circolo dallindirizzo a cui erano
destinati (probabilmente generato da Satoshi
Nakamoto).
Eventualmente il processo di mining puo es-
sere svolto in gruppo: piu miners possono
Figura 3. Piu forks nella block chain, eventual- cooperare nella creazione di un blocco valido
mente scartate (la nera rimane la principale) utilizzando un mining pool, dividendo poi i
bitcoins prodotti dal blocco creato.
Riassumendo: il bilancio di un utente e dato
il ramo con maggiore lunghezza, scartando dallimporto delle transazioni a lui dirette e
laltro. non spese (quindi non referenziate come input
La lunghezza in questione non dipende dal da altre transazioni valide).
numero di blocchi in una biforcazione, ma dalla La conferma di un avvenuto pagamento e da-
difficolta complessiva (difficulty) nel risolvere ta dal processo collettivo di mining, il quale
la proof-of-work per ognuno di essi; poiche il garantisce, attraverso lutilizzo di funzioni di
target e inserito nellintestazione di un blocco, hashing one-way e ricerca di proof-of-work, la
in base ad esso e possibile calcolare la difficulty validita di un blocco accettato da un nume-
della soluzione. ro sufficiente di nodi allinterno della propria
In sostanza, fintanto che la potenza compu- block chain.
tazionale complessiva dei nodi onesti supera I miners sono ricompensati dello sforzo com-
quella degli eventuali disonesti, solo i blocchi putazionale e del consumo di energia elettrica
contenenti transazioni non contraffatte entre- attraverso la creazione di nuovi bitcoins in-
ranno a far parte della block chain, venendo testati ad essi, specificati da una transazione
quindi riconosciute come valide. speciale destinata ad essi ed inclusa nel blocco
Le biforcazioni, causate da blocchi prodotti appena prodotto.
concorrentemente da nodi diversi a partire dal-
la medesima estensione della chain, saranno
3 A RCHITETTURA
eventualmente scartate.
Ne consegue che un tentativo di double-
spending da parte di P potrebbe, nel peggiore In questa sezione sara presentata larchitettura
dei casi, risultare in due probabili biforcazioni del sistema Bitcoin, fornendo una visione piu
della chain: una contenente un blocco con la dettagliata delle sue ragioni dessere e contesto
transazione diretta a Q, laltra contenente un di utilizzo.
blocco con quella diretta ad R. Eventualmente Sara fornita la descrizione della struttura di
i nodi che concatenano blocchi ad una delle due un client (rappresentante un peer allinterno
prevarrebbero, provocando lo scarto definitivo della rete) ed i suoi componenti fondamentali,
dellaltra (eliminandone quindi ogni traccia e evidenziando le differenze concettuali fra le
vanificando il tentativo di double-spending). implementazioni maggiormente diffuse.
Il procedimento appena descritto include anche Infine, sara descritto il comportamento e le
la coniazione di nuove monete: la prima tran- funzioni di ogni singolo componente dellar-
sazione contenuta nel blocco k appena creato chitettura, ponendo enfasi sui piu rilevanti
e di un tipo speciale che assegna allindirizzo aspetti progettuali e discutendo alcune pro-
del miner un determinato quantitativo fisso prieta interessanti, quali sicurezza e garanzia
di bitcoins; oltre a questo, sono aggiunte le di anonimato.
eventuali transaction fees specificate dalle altre
transazioni incluse nel blocco, utilizzate come 3.1 Contesto
incentivo per i miners.
Il primo blocco della block chain, sopranno- Molti utenti utilizzano Bitcoin per ragioni
minato genesis block, e stato creato il 3 Gen- ideologiche, politiche e soprattutto pratiche.
ARCHITETTURE SOFTWARE, A.A. 2013/2014 5

Per quanto riguarda le prime, basti pensare al transazioni, ma daltro canto non tutela
concetto di proprieta popolare della moneta: lo contro compratori disonesti.
scambio di bitcoins non puo essere regolamen- Non e necessario fornire alcuna informa-
tato o tassato in maniera effettiva, poiche non zione personale, per effettuare pagamenti.
esiste un sistema di produzione centrale o un Le monete sono prodotte dagli utenti stes-
operatore di rete attraverso il quale transitino si, i quali investono tempo di calcolo dei
le transazioni. loro processori e corrente elettrica nel pro-
Venendo alle ragioni pratiche, sicuramente Bit- cedimento; la ricompensa monetaria e de-
coin non costituisce lunica alternativa, fra i terminata dal sistema ed e utilizzata co-
sistemi che permettono lutilizzo di valute elet- me incentivo al contributo individuale al
troniche (la descrizione di alcune di esse, com- mantenimento della coerenza globale.
prensiva di vantaggi, problemi e differenze E privo di inflazione: il protocollo specifica
con Bitcoin, e rimandata alla sezione 5), ma che il numero di bitcoins prodotti dalla
la ragione che ha portato al suo successo e creazione di un blocco diminuiranno fino
diffusione, come precedentemente menzionato, a lasciare le sole transaction fees come
e il fatto che funzioni correttamente ormai da guadagno per i miners, nel 2140.
piu di 5 anni, fornendo ad un utente medio Tuttal piu vi e rischio di deflazione,
numerose motivazioni per il suo utilizzo: quando questo limite sara raggiunto.
Garantisce una forma di anonimato (mag-
Creare un account consiste nella sempli- giori dettagli a riguardo nella sezione 3.2.2)
ce installazione di un software. per gli utenti.
Permette di effettuare pagamenti con ra- Ultimo ma non meno importante: non ri-
pidita: dal momento in cui la transazione chiede alcuna forma di trust in entita inter-
e emessa, piu nodi saranno impegnati a medie (banche, societa di carte di credito)
lavorare sulla sua validazione, cos che e laccount di ogni utente (inteso come
possa essere inserita nella block chain, in coppie di chiavi) e conservato unicamente
un procedimento che e stimato durare 10 da lui stesso.
minuti circa.
Esistono anche le cosiddette transazio- Il diagramma in figura 4 mostra i normali casi
ni zero-confirmation: accettate istantanea- duso per Bitcoin; ogni nodo della rete puo
mente dal ricevente, senza attenderne essere un miner, sebbene ultimamente questa
linserimento definitivo nella block chain. distinzione con lutente normale (il quale si
In entrambi i casi e meno tempo di quanto limita ad effettuare transazioni) sia piu netta
richieda un qualunque trasferimento fra (vedi 3.3.5).
banche. La creazione di nuove identita, intese co-
E economico: non e necessario pagare per me coppie di chiavi e relativo indirizzo Bit-
il privilegio di avere transazioni istantanee coin, e spesso condotta in maniera del tutto
(come con quelle via carta di credito) e le trasparente dal software client utilizzato.
transaction fees sono minime o nulle. Esistono anche alcuni providers di servizi re-
E impossibile che un qualunque gover- lativi a Bitcoin (i piu famosi sono MyBitcoin
no possa attaccarlo, impedirne lutilizzo o e Mt.Gox), i quali conducono transazioni per
cancellare le transazioni, in modo simile conto di piu utenti, sollevandoli dalla gestione
a quanto accade con altre risorse condi- delle proprie chiavi private e utilizzo di risor-
vise attraverso la rete (accesso ai record se computazionali; le implicazioni nellutilizzo
DNS, per esempio), poiche il sistema e di questi servizi sara discusso nelle sezioni
totalmente decentralizzato. successive.
Non si possono annullare le transazioni, Nonostante i fattori che promuovono lutilizzo
ovvero non esiste lo storno di addebito. di Bitcoin allinterno del mercato, ne esistono
Questo impedisce ai venditori di pratica- numerosi detrattori, specialmente in merito al-
re truffe richiedendo lannullamento delle lultimo punto della lista precedente, quindi
ARCHITETTURE SOFTWARE, A.A. 2013/2014 6

Figura 4. Casi duso per Bitcoin

questioni relative allimpossibilita per una isti- qualunque operazione, dalla creazione di una
tuzione finanziaria di esercitarvi alcuna forma nuova identita (coppia di chiavi) allemissione
di controllo. di una transazione, con estrema semplicita.
E infatti proprio per merito della sua natura de- Molti di questi software godono di portabilita
centralizzata e garanzie di anonimato che Bit- multi-piattaforma, grazie allutilizzo di librerie
coin rappresenta il mezzo ideale per acquistare specializzate (Boost e Qt per il client originale
droga o riciclare denaro la cui provenienza e Bitcoin Core, scritto in C++) o esecuzione su
illecita. Java Virtual Machine (Bitcoinj).
Citando le parole dello scrittore Charlie Stross, Il tempo medio necessario a portare a termine
noto detrattore di Bitcoin, in un post online: una transazione, ossia a vederla confermata dal
Bitcoin sembra progettato come unarma destinata sistema, rappresenta il tempo di risposta del
a colpire le banche centrali che emettono moneta, sistema per il caso duso principale; questo puo
in omaggio a obiettivi politici ispirati allultra- essere quantificato mediante osservazione della
liberismo: lo scopo e limitare la capacita degli Stati block chain: si rimanda alla sezione 4.
di riscuotere le tasse e monitorare le transizioni Una proprieta piu critica e la scalabilita. Ci si
finanziarie dei loro cittadini [14]. potrebbe chiedere se in futuro, con un notevole
aumento nella frequenza delle transazioni e
blocchi in transito, nonche con un ulteriore
3.2 Proprieta aumento nelle dimensioni della block chain, ri-
manga possibile gestire il carico del protocollo
Segue unanalisi piu approfondita delle pro- per dispositivi personal computer.
prieta rilevanti del sistema Bitcoin, alcune delle Purtroppo unulteriore aggravante e data dai
quali gia menzionate in 3.1. cosiddetti dormant coins: output di transazio-
Laffidabilita del sistema e garantita dalla sua ni nella chain non spesi e non spendibili, in
natura peer-to-peer decentralizzata: fintanto quanto i loro possessori hanno perso le chiavi
che rimarra attiva una porzione della rete Bit- private o sono morti; non ce modo di eliminare
coin (stimata a piu di 3,342,922 nodi da block- questo potenzialmente enorme peso morto
chain.info) sara possibile condurre transazioni dai dati che i milioni di nodi della rete Bitcoin
e vederle confermate. processano quotidianamente.
Lusabilita dei software disponibili per inter- Ad oggi ci sono numerose proposte per mi-
facciarsi con il sistema consente di condurre gliorare questa situazione: congelare parte della
ARCHITETTURE SOFTWARE, A.A. 2013/2014 7

block chain, utilizzare metodi semplificati per velando nuove vulnerabilita (basti pensare al
la verifica del pagamento (vedi 3.3.2) o sem- caso Heartbleed): questo rappresenta, in un
plicemente rimuovere tutte le transazioni con certo senso, un limite intrinseco dei sistemi
output gia spesi. di sicurezza informatica che si affidano a tali
meccanismi.
3.2.1 Sicurezza Un altro aspetto di sicurezza puo risiedere nel
come il sistema riesca a tutelare gli utenti da
La sicurezza nella gestione dei propri soldi venditori o acquirenti disonesti. Non e possi-
costituisce sicuramente il requisito non fun- bile annullare transazioni e da cio ne deriva
zionale piu importante, nellarchitettura di un che una volta effettuato un pagamento, in caso
sistema per valute virtuali. di dispute fra le due parti non sia possibile
Come precedentemente menzionato, in Bitcoin risolverle, non avendo un ente centralizzato al
ogni utente conserva i soldi di ogni altro utente, quale rivolgersi.
in quanto questi sono rappresentati dalle tran- Tuttavia grazie al meccanismo di transazioni
sazioni con output non spesi, conservate allin- multi-signature e possibile introdurre un broker
terno della block chain e mantenute dallintera intermediario e suddividere lacquisto in due
rete. fasi:
Cio che consente ad uno specifico utente di 1) Una transazione dallacquirente a due
reclamare il possesso di un determinato quan- indirizzi: se stesso ed il broker.
titativo di bitcoins, spendendoli nellemissione 2) Una seconda transazione emessa a partire
di nuove transazioni, e una firma digitale per dalla prima, sfruttando firme di acquiren-
mezzo della sua chiave privata. te e broker, destinata al venditore.
Poiche lalterazione di una o piu transazioni
Operando questa suddivisione e possibile bloc-
di un utente risulterebbe impossibile per un
care i bitcoins trasferiti in un limbo fra le due
eventuale attaccante, grazie a quanto appena
transazioni, in attesa che il broker (nel quale
detto e al meccanismo di proof-of-work, ne
entrambe le parti devono riporre fiducia) possa
deriva che lunica potenziale falla di sicurezza
effettuare un controllo sui beni venduti prima
risieda unicamente nella gestione delle chiavi
di partecipare allinoltro del pagamento verso
private.
il venditore.
Tale gestione e stata notevolmente migliorata
Se una delle tre parti tenta di violare laccordo,
negli ultimi anni, al punto di implementare
i bitcoins trasferiti rimarranno semplicemente
tecniche piu sofisticate di manipolazione del
inaccessibili ad ognuno di essi e in attesa di
wallet (vedi 3.4.2).
almeno 2 firme digitali.
Inoltre, Bitcoin prevede la possibilita di ef-
fettuare transazioni che richiedano piu firme
(multi-signature) per poter essere poi utilizzate 3.2.2 Privacy
dai beneficiari.
Un utente potrebbe conservare le proprie n Una delle proprieta piu rilevanti e controver-
chiavi private su diversi dispositivi, in modo se, nellambito delle architetture di sistemi per
tale che se solo n 1 sono compromesse non valute virtuali, e la garanzia di anonimato agli
sia possibile spendere i suoi bitcoins. Natu- utenti che effettuano transazioni: la difficolta (o
ralmente cio presenta un costo aggiunto di impossibilita) nellassociare queste ultime alle
complessita per gestire lo scambio delle firme identita reali (intese come generalita, indiriz-
tra i dispositivi. zi IP e quindi posizioni geografiche o altri dati)
Maggiori dettagli sulle modalita di utilizzo del- degli utenti coinvolti.
le transazioni da parte dei beneficiari saranno Il meccanismo con cui Bitcoin garantisce que-
forniti in 3.5.3. sta proprieta e molto analizzato in letteratura:
A parte questo, rimane la possibilita che uno a partire da alcuni cenni nel paper originale
o piu degli schemi crittografici o funzioni di ([Nak08]), fino a studi piu recenti ([RH13],
hashing utilizzate sia infranto in futuro, ri- [AKR+ 13], [OKH13]).
ARCHITETTURE SOFTWARE, A.A. 2013/2014 8

Nel modello bancario tradizionale si garantisce blicamente associato ad unorganizzazione o


un certo livello di privacy limitando lacces- individuo. Per fare un esempio, Wikileaks per-
so alle informazioni sui pagamenti alle parti mette di fare donazioni di bitcoins al proprio
coinvolte ed eventualmente a terze parti fidate. indirizzo, pubblicato su web; qualora si potesse
In Bitcoin tutte le transazioni sono pubbliche, associare tale indirizzo ad altri, utilizzati come
ma cio non preclude la possibilita di man- input per diverse transazioni, sarebbe possi-
tenere anonime le chiavi pubbliche utilizzate, bile determinare quali transazioni siano state
eventualmente associando una nuova coppia di effettuate da Wikileaks.
chiavi ad ogni transazione effettuata. Un nodo malevolo, dopo aver costruito tale
mapping, potrebbe tracciare i pagamenti delle
singole entita.
Una potenziale debolezza del sistema di priva-
cy e data anche dalla rete stessa: un attaccante
potrebbe stabilire il maggior numero possibile
di connessioni con i nodi della rete Bitcoin
e tentare di associare lindirizzo IP con cui
Figura 5. Modello di privacy in Bitcoin una transazione e stata inviata per la prima
volta, considerando che le seguenti ricezioni
Questa separazione fra identita degli utenti di questa da altri nodi sarebbero probabilmen-
e chiavi pubbliche corrisponde al concetto di te dovute al meccanismo di propagazione, al
Pseudonymity: mantenere anonimato utilizzan- mittente di quella transazione.
do identita fittizie per svolgere le operazioni In merito a questultimo aspetto, molti clients
necessarie. implementano la possibilita di utilizzare dei
Nonostante questa separazione, in letteratura servers Tor (The Onion Router) come relay per
e suggerita la possibilita di associare diverse spedire transazioni e blocchi al resto della rete
chiavi pubbliche a singoli utenti, costruendo Bitcoin, al fine di vanificare lanalisi del traffico
un grafo delle transazioni a partire dalla block da parte dei riceventi.
chain e analizzandone la struttura ([RH13],
[OKH13]). 3.3 Struttura
Considerando i nodi di questo grafo come tran-
sazioni e gli archi come collegamenti di tipo Dopo aver discusso il contesto di utilizzo di
input/output fra di esse, e possibile collassare Bitcoin e i requisiti non funzionali di maggiore
diversi indirizzi Bitcoin in singole entita, con- rilevanza, in questa sezione sara fornita una
siderando che se una transazione fa riferimen- descrizione della sua struttura.
to a diversi input gli indirizzi a cui i corri- Considerando lomogeneita degli attori nellu-
spettivi outputs sono destinati apparterranno niverso Bitcoin (tutti i peers sono uguali e non
probabilmente alla medesima entita. ne esistono di piu uguali degli altri, per para-
Viene ventilata la possibilita di dedurre questi frasare Orwell), la descrizione dellarchitettura
collegamenti anche in base a diversi campi di interna di un singolo nodo e sufficiente per
output in una transazione e relativi importi descrivere quella dellintero Bitcoin.
[AKR+ 13], considerando che uno di essi puo Come riferimento sara utilizzato il client ori-
risultare in un resto che lutente invia a se ginale Bitcoin Core (o Bitcoind, escludendone i
stesso (maggiori dettagli in 3.5.3); tuttavia molti componenti per linterazione utente), in quanto
clients creano un nuovo indirizzo apposita- capace di svolgere tutte le azioni descritte nella
mente per trasferire il resto, al fine di ridurre parte introduttiva; nonostante cio, esiste una
la possibilita di inferire collegamenti. vasta gamma di prodotti software (open source
Una volta definito un mapping uno a molti fra e non), scritti in diversi linguaggi di program-
singole entita e insiemi di indirizzi Bitcoin, e mazione e adatti ad esecuzione su piattafor-
possibile tentare di collegarle ad identita reali, me di diversa natura, che incorporano diversi
qualora uno degli indirizzi utilizzati sia pub- sottoinsiemi delle funzioni del suddetto client.
ARCHITETTURE SOFTWARE, A.A. 2013/2014 9

I nomi utilizzati per i componenti principali aspetto li fa gravare sul sistema che li esegue,
rappresentati in figura 6 esprimono in maniera in quanto consumano una notevole quantita di
piuttosto intuitiva le funzioni svolte da questi, bandwidth, tempo di calcolo e spazio su disco.
in accordo con la terminologia utilizzata prece- Il diagramma dei componenti in figura 6
dentemente: il Core coordina le operazioni degli mostra la struttura di un client completo.
altri componenti, il Wallet gestisce le transa- Alcuni clients di questo tipo sono Bitcoin Core,
zioni emesse dallutente o a lui destinate, la Armory e Libbitcoin.
Chain memorizza lintera block chain e strut-
ture dati annesse, il Miner svolge le funzioni di 3.3.2 Headers-only
mining, il Node gestisce la comunicazione con
Questi clients memorizzano lintera block
gli altri nodi della rete Bitcoin e la GUI consiste
chain, ma comprensiva dei soli headers di cia-
nellinterfaccia grafica esposta allutente.
scun blocco (quindi escludendo le transazioni
Nella sezione 3.4 saranno descritte con mag-
contenute in esso).
giori dettagli le funzioni svolte da ciascun
Questo ha lindubbio vantaggio di ridurre dra-
componente.
sticamente il consumo di memoria (un totale 22
Il principale connettore e rappresentato dal
MB circa, attualmente), ma impedisce ai nodi di
protocollo Bitcoin stesso, atto a realizzare
confrontare le transazioni ricevute con quelle
comunicazione fra diversi clients; altri so-
contenute allinterno dei blocchi della chain,
no HTTP (per le varianti client-server) e
per verificare che siano valide (quindi che non
JSON-RPC.
siano tentativi di double-spending o presentino
Segue una overview delle tipologie di client
un importo mal calcolato).
Bitcoin e relative differenze strutturali [Sku12].
Nonostante cio, in [Nak08] viene suggerita la
possibilita di utilizzare i soli headers dei bloc-
3.3.1 Full chi per verificare la validita di una transazio-
ne (Simplified Payment Verification), determinan-
I cosiddetti full clients sono quelli che
do in quale blocco della chain sia contenuta
implementano lintero protocollo Bitcoin e
la transazione e osservando un numero suf-
possiedono una copia completa della block
ficiente di blocchi concatenati ad esso; mag-
chain.
giori dettagli su come ottenere un link alla
Questi clients sono in grado di scoprire nuovi
transazione allinterno di un blocco in 3.5.4.
nodi e comunicare con essi, inviare e ricevere
Un client di questo tipo e Multibit.
transazioni e blocchi, memorizzare i blocchi
validi su storage locale, verificare tutte le tran- 3.3.3 Signing-only
sazioni ricevute ed emettere in broadcast ad
altri nodi quelle valide. I clients di questo tipo non memorizzano alcu-
Molti clients di questo tipo offrono servizi na informazione relativa alla block chain e ad
addizionali allutente, cioe non strettamente altri peers: si occupano unicamente di creare
connessi alla partecipazione alla rete Bitcoin: transazioni ed inviarle ad un nodo designato,
memorizzare le proprie transazioni nel wallet e il quale le propaghera verso la rete Bitcoin.
criptarlo, fornire uninterfaccia grafica o a linea Alternativamente, possono ricevere il push di
di comando per facilitare linterazione utente e transazioni di interesse (per esempio destinate
altro. a loro, o altri indirizzi Bitcoin).
Fino alla versione 0.3.22, il client originale pos- La differenza sostanziale fra questa tipologia
sedeva anche le funzionalita necessarie a fare di client e le precedenti risiede nel fatto che sia
mining di bitcoins, rimosse in seguito per dare basata su un modello Client-Server: il nodo de-
spazio a clients specializzati (vedi 3.3.5). signato per inviare e ricevere transazioni funge
I clients di questo tipo sono quelli che contri- da unico intermediario verso il resto della rete
buiscono al mantenimento della coerenza glo- Bitcoin.
bale della rete Bitcoin, propagando blocchi e Nella maggior parte dei casi questi providers
transazioni dopo un accurato controllo; questo forniscono accesso ai loro servizi tramite in-
ARCHITETTURE SOFTWARE, A.A. 2013/2014 10

Figura 6. Diagramma dei componenti di un client Bitcoin

terfacce RESTful e le richieste sono inviate gli importi. Questo attacco e tuttavia inutile in
utilizzando il protocollo HTTP. quanto il server non potra invece contraffare
le transazioni uscenti, le quali necessitano di
firma digitale dal dispositivo client.
Nel diagramma dei componenti in figura 7
e mostrata la ripartizione dei componenti di
un full client tra le due entita client e server
(per alleggerire la rappresentazione sono mo-
strati solo i componenti concettualmente piu
rilevanti, al fine di evidenziare la distinzione).
Figura 7. Signing-only client
Il pregio principale di questi clients e il
consumo di bandwidth e memoria note- 3.3.4 Thin
volmente ridotto, permettendone lesecuzio-
ne su dispositivi desktop (Electrum) e mobili I thin clients, anche denominati eWallets, por-
(BitcoinSpinner). tano ad un livello successivo i signing-only
Esiste anche una web application (Block- clients: si privano non solo della block chain
Chain.info) che fornisce un client di questo e degli indirizzi di altri peers, ma anche
tipo, permettendo linvio di transazioni da bro- del wallet (quindi chiavi private), affidandosi
wser; in questo caso le chiavi private sono crip- completamente ad un server esterno.
tate con librerie Javascript dal dispositivo client Questi nodi si limitano ad inviare richieste
e memorizzate successivamente dal server. al server, il quale assume una funzione di
Lo svantaggio consiste nella necessita di far banca: gestisce chiavi private, firma ed emette
transitare le transazioni dirette allutente attra- transazioni per conto loro, mostra il bilancio
verso un server, il quale potrebbe falsificarne attuale e li notifica di eventuali accrediti; le
ARCHITETTURE SOFTWARE, A.A. 2013/2014 11

modalita di comunicazione sono generalmente Inizialmente questa feature era implementata


le medesime dei signing-only clients (HTTP). solo nelloriginale full client Bitcoin Core, che
la espletava utilizzando la CPU.
In seguito si e passati allutilizzo di un hard-
ware dedicato e con architettura a pipeline,
quindi nettamente piu veloce: la GPU.
Per questa ragione sono stati implementati al-
cuni mining clients specializzati (tra i quali
Phoenix e CGMiner), che hanno portato alle-
liminazione della feature di mining da Bitcoin
Core.
Per dedicare la maggior quantita possibile di
Figura 8. Thin client risorse al mining, questi clients delegano la
Alcuni esempi di thin clients sono MyBitcoin, responsabilita di reperire blocchi e transazioni
Coinbase, Instawallet e MtGox Wallet. dalla rete a dei full clients separati, con i quali
La semplicita e lindubbio vantaggio di questi comunicano (nel caso di Bitcoind) utilizzando
clients, i quali eliminano tutte le problematiche il protocollo di chiamata di procedura remota
di sicurezza relative alla gestione delle chiavi JSON-RPC.
private. Lestremo di questa separazione fra mining-
Il problema di trust dei signing-only clien- client e full-client consiste in diverse tipologie
ts e tuttavia notevolmente aggravato: il ser- di hardware assemblati allo scopo:
ver ha pieno controllo dei bitcoins posseduti I mining rigs, che sfruttano array di GPU

dal client, da cui deriva che una perdita o ed eliminano tutta la computazione e I/O
furto di bitcoins graverebbe anche sui clients non necessari.
interessati. Application specific integrated circuit (ASIC):

Un esempio di fiducia mal risposta in uno di circuiti integrati specific purpose, dedica-
questi provider e MyBitcoin, il quale divenne ti unicamente alla computazione di SHA-
inaccessibile il 29 Luglio del 2011 e, tornando 256. Esistono numerosi prodotti di questo
operativo, annuncio il furto da parte di ignoti tipo in commercio, alcuni dei quali (es.:
di meta dei bitcoins posseduti dagli utenti. CoinTerra) raggiungono una frequenza di
Piu recente e lepisodio di Mt.Gox, provider di 2 TH/s (2,000,000,000,000 computazioni di
trading giapponese andato in bancarotta a ini- hash al secondo).
zio del Marzo 2014, dichiarando la scomparsa Poiche, anche utilizzando una GPU, il mining
di piu di 850,000 bitcoins e ricevendo numerose risulta essere troppo lento per un singolo client
cause legali dai propri clienti. (anche in base al valore attuale del target), e
Questi clients sono quelli che maggiormente nata lidea del pooled mining: combinare lo sfor-
stravolgono la natura decentralizzata di bit- zo computazionale di piu miners per risolvere
coin, annullando lo scopo primario del sistema lhashing di un unico blocco (con diverse po-
di evitare il requisito di trust in unentita gestita litiche di divisione del lavoro, ossia dei nonce
da terze parti. da provare).
Questa divisione del lavoro produce ricompen-
3.3.5 Mining se piu piccole (ripartite fra i miners che parte-
cipano alla pool), ma piu frequenti, risultando
I mining clients non inviano o ricevono transa- in una notevole popolarita del sistema.
zioni, ma utilizzano tutte le loro risorse com-
putazionali per costruire blocchi validi da ag-
giungere alla block chain: si limitano ad iterare 3.4 Funzioni
applicazioni di SHA-256 per trovare il non-
ce corretto e soddisfare la proof-of-work del Saranno descritte adesso le funzioni svol-
blocco attuale. te da ognuno degli elementi principali che
ARCHITETTURE SOFTWARE, A.A. 2013/2014 12

Figura 9. Mining client Figura 10. Diagramma di classi del Core

compongono larchitettura di un client Bitcoin.


La spiegazione di alcuni dettagli inclusi nei nuove chiavi, una rubrica degli indirizzi Bit-
diagrammi UML che accompagnano la de- coin con i quali si sono scambiate transazioni e
scrizione testuale e rimandata alla sezione un set di preferenze utente.
3.5. Il Wallet e inoltre responsabile della creazio-
ne di nuove transazioni e controllo del bilan-
3.4.1 Core cio di un utente, eventualmente reperendo le
informazioni necessarie dalla block chain.
Il Core rappresenta il centro della logica interna
Il formato con cui e memorizzato su disco puo
del client: inizializza gli altri componenti e
variare a seconda del client utilizzato: Bitcoin
scambia informazioni con loro, offrendo una
Core, ad esempio, memorizza il Wallet su file
raccolta di variabili e procedure che include
system utilizzando il database management sy-
i parametri attuali della rete Bitcoin e varie
stem Berkeley DB (non relazionale, basato su
funzioni di base.
array di coppie chiave/valore).
Le variabili in questione sono il target corrente
Altri clients utilizzano formati binari ad hoc
per la proof-of-work, il quantitativo di bitcoins
(Armory) o semplici strutture JSON (Block-
prodotti dalla creazione di un blocco, una rac-
chain.info).
colta di indirizzi IP e nomi di dominio di
Essendo il Wallet cio che permette ad un
nodi ritenuti stabili (aggiornati a ogni nuova
utente di spendere i bitcoins precedentemen-
sub-release del client, vedi 3.5.2) e altro.
te ricevuti, la sua sicurezza e di primaria
Le funzioni di base offerte dal Core consistono
importanza.
principalmente nella verifica sintattica di una
Per questa ragione esistono molti strumenti,
transazione o blocco, esecuzione di scripts per
spesso incorporati allinterno dei clients stessi,
controllare che una transazione possa effettiva-
per cifrare il Wallet con crittografia simmetrica
mente spendere loutput di unaltra (vedi 3.5.3),
(la cui chiave e costituita da una passphrase).
verifica di una firma digitale o digest e altro.
Molti di questi strumenti offrono persino la
Il Core funge anche da centro di smistamento
possibilita di stampare le chiavi contenute nel
per transazioni e blocchi in transito da e verso
Wallet su carta, sotto forma di stringhe o QR
lesterno, dopo opportuni controlli: inoltra al
code; in questo modo e possibile stampare il
Wallet le transazioni dirette allutente e alla
proprio Wallet e conservarlo in un luogo sicuro,
Chain transazioni non confermate e blocchi
come la cassetta di sicurezza di una banca.
ricevuti, o al Node quelli uscenti.
In genere i Wallet producono coppie di chiavi
3.4.2 Wallet con valori casuali per ogni transazione effettua-
ta dallutente, generando fino a 100 coppie
Componente fondamentale e il Wallet: contiene diverse, rimpiazzate di volta in volta dalle
coppie di chiavi pubblica-privata per ognuno nuove secondo una politica FIFO (First In First
degli indirizzi Bitcoin dellutente, una lista or- Out); al fine di poter rimuovere una coppia
dinata cronologicamente delle transazioni ef- di chiavi in modo permanente, si fa in modo
fettuate/ricevute, una pool di generazione di che i bitcoins associati al suo indirizzo siano
ARCHITETTURE SOFTWARE, A.A. 2013/2014 13

separazione tra chiavi pubbliche (quindi


identificativi degli utenti e soli mezzi ne-
cessari per tenere traccia delle transazioni
associate ad essi) e private.
In questo modo, non avendo la possibilita
di effettuare pagamenti, e possibile man-
tenere il Watch-only Wallet su postazioni
che non garantiscono totale sicurezza (in
effetti, lunica informazione utile che un
attaccante potrebbe reperire e il collega-
mento fra diverse chiavi pubbliche ed una
singola identita).
Figura 11. Diagramma di classi del Wallet 3.4.3 Node
Il Node (secondo la terminologia utilizzata dal
trasferiti ad uno dei nuovi. client originale) e il componente che gesti-
Poiche gli indirizzi Bitcoin sono generati of- sce linterazione del singolo nodo con la rete
fline, non e impossibile che due utenti creino Bitcoin: implementa lutilizzo del protocollo
il medesimo indipendentemente, sebbene alta- Bitcoin, comprensivo di tutti i suoi messaggi.
mente improbabile: lo spazio di valori delle Le responsabilita principali di un Node sono
chiavi pubbliche generate e pari a 2512 , poiche quelle di effettuare il discovery di altri nodi
queste hanno dimensione pari a 512 bits. Le nella rete (seguendo uno specifico processo
chiavi private sono invece a 256 bits. di bootstrapping descritto in 3.5.2), verificar-
Poiche mantenere centinaia di chiavi generate ne periodicamente la connettivita e, soprattut-
casualmente complica notevolmente la gestione to, scambiare con essi i messaggi previsti dal
e sicurezza del Wallet, esistono alcune varianti protocollo.
particolari: I messaggi comprendono la richiesta di indiriz-
zi di altri nodi, linvio di transazioni o blocchi,
Deterministic Wallet: utilizza un generatore
la richiesta di blocchi specifici, il semplice ping,
di numeri pseudo-casuali per creare coppie
etc. Un elenco esaustivo dei messaggi o descri-
di chiavi, a partire da un seed relativamente
zione dettagliata del loro formato va al di la
piccolo. Impiegando questo approccio pu-
dello scopo di questo documento.
ramente algoritmico, e possibile ricostrui-
Il Node inoltra i messaggi ricevuti verso altri
re lintera sequenza di coppie di chiavi
nodi della rete, seguendo determinate politiche
(e quindi di transazioni effettuate/ricevu-
(3.5.2).
te) a partire dal singolo seed, rendendo
Gli indirizzi IP di altri nodi sono memorizzati
necessario solo il backup di questultimo.
su file in un formato binario ad-hoc, al fine
Brain Wallet: e, in un certo senso, una spe-
di poterli riutilizzare al successivo avvio del
cializzazione dei Deterministic. Consente
client.
di convertire un seed da 128 bits (dimen-
sione sufficiente ad assicurarne lunicita) in 3.4.4 Miner
un codice mnemonico, composto in genere
da 12 parole in una qualunque lingua, Il Miner e il componente dellarchitettura che
facili da memorizzare. si occupa della creazione di nuovi blocchi, a
In questo modo e possibile cancellare il partire dalle informazioni sui precedenti e dalle
file relativo al Wallet e rigenerarlo al biso- transazioni ricevute da altri nodi (o prodotti
gno, utilizzando il solo codice conservato da quello che esegue il client) ma non ancora
nella memoria dellutente (per cui Brain validate.
Wallet). Se il client permette pooled mining, questo
Watch-only Wallet: consiste nella completa componente incorpora al suo interno la logi-
ARCHITETTURE SOFTWARE, A.A. 2013/2014 14

Una hash map contenente tutti i blocchi


orfani (il cui predecessore non e ancora
presente nella chain) ricevuti, memorizzati
con chiave pari al loro digest, ottenuto
mediante SHA-256.
Una hash map che associa una transazione
gia accettata al blocco della chain che la
contiene, utilizzando come chiavi i valori
di txid: identificativo equivalente al digest
con SHA-256 della transazione.
Una lista ordinata (per transaction fees) di
Figura 12. Diagramma di classi del Node transazioni ricevute e non ancora accettate
allinterno della chain, incorporata allin-
terno di una classe denominata TxMem-
Pool. Questa lista e utilizzata dal Miner per
determinare le transazioni da inserire in un
blocco: quelle con transaction fees piu alte,
cos da massimizzare il guadagno.
Files che memorizzano stati precedenti
della block chain, utilizzati qualora sia ne-
cessario un rollback (in caso di scarto di
una fork).
La block chain viene memorizzata su disco
Figura 13. Diagramma di classi del Miner (19.8 Gigabytes, in data 2014-04-10) utilizzan-
do un database management system LevelDB,
simile a Berkeley DB (coppie chiave-valore), ma
ca di comunicazione e coordinamento neces-
piu leggero e veloce.
saria, solitamente utilizzando il protocollo di
Considerando la frequenza con cui, potenzial-
chiamata di procedura remota JSON-RPC.
mente, un nodo possa doverla leggere, parte
Oggigiorno e frequente che questo componente
della block chain e mantenuta in memoria, per
risieda in unapplicazione separata (vedi 3.3.5),
un accesso piu veloce. In particolar modo, la
ma il client Bitcoin Core ne implementa tuttora
rappresentazione in memoria contiene le varie
le funzionalita.
hash maps, al fine di consentire un rapido
accesso ad una specifica transazione o blocco,
3.4.5 Chain per esempio in fase di verifica.
La Chain memorizza lo storico di tutte le
3.4.6 GUI
transazioni effettuate a partire dalla nascita di
Bitcoin, raggruppate in blocchi: la block chain. La GUI e linterfaccia del client verso lutente:
I blocchi contenuti in essa, concatenati in una consente di emettere nuove transazioni attra-
lista, sono richiesti dagli altri componenti per verso un semplice form, consultare un elenco
lettura, ad esempio per controllare la validita di quelle ricevute e relativi indirizzi Bitcoin,
di un blocco appena ricevuto o che loutput di visionare il proprio bilancio, configurare un set
una transazione non sia gia stato speso, oppure di opzioni e visualizzare un qualunque sot-
ve ne sono aggiunti di nuovi in scrittura. toinsieme della block chain (tramite opportuni
In sostanza, la Chain incorpora le seguenti filtri).
strutture dati: In realta, il client originale Bitcoin Core (cos co-
Tutti i blocchi accettati nella block chain, me molti derivati) consente di interfacciarsi con
comprensivi di body (transazioni) ed gli altri componenti (Wallet, Chain) utilizzando
header, conservati su memoria secondaria. uninterfaccia a riga di comando o grafica.
ARCHITETTURE SOFTWARE, A.A. 2013/2014 15

vendo la sequenza di operazioni prevista per


ognuna di esse.

3.5.1 Boot

La prima operazione che il client esegue al-


lavvio e quella di popolare le strutture dati in
memoria, relative a Core, Wallet, Chain e No-
de (indirizzi IP di altri peers precedentemente
registrati).
Successivamente un socket di rete e posto in
ascolto di connessioni sulla porta predefinita,
restituendo errore e terminando nel caso questo
Figura 14. Diagramma di classi della Chain non sia possibile.
A questo punto il processo genera una sorta
di master thread, StartNode, responsabile della
gestione delle comunicazioni con la rete Bitcoin
(parte integrante del Node).
Il thread in questione e denominato master
in quanto genera altri threads:
SocketHandler: entra in un loop infinito nel
quale accetta nuove connessioni sul socket
precedentemente posto in ascolto, gesti-
Figura 15. Diagramma di classi della GUI sce letture e scritture sui sockets creati e
chiude quelli inattivi.
Fa uso di tecniche di I/O Multiplexing
Questultima, nel caso di Bitcoin Core, prende il
(funzione select) per controllare piu socke-
nome di Bitcoin-Qt, in quanto sfrutta le librerie
ts, incluso il primario in attesa di nuove
cross-platform Qt per realizzare i componen-
connessioni, senza bloccarsi.
ti dellinterfaccia grafica; da cio ne deriva la
DNSAddressSeed: tenta di effettuare richie-
compatibilita con Linux, Windows e Mac.
ste DNS, al fine di risolvere i nomi di
Altre implementazioni utilizzano wxWidgets,
dominio incorporati nel client in indirizzi
GTK, Java Swing o i frameworks per Android
IP (vedi 3.5.2).
o iOS.
GetMyExternalIP: tenta di determinare il
Il connettore con cui questo componente comu-
proprio IP pubblico, mediante richieste
nica con la logica interna del sistema (rappre-
HTTP a servizi di terze parti (vedi 3.5.2).
sentata dal processo Bitcoind) e il protocollo di
OpenConnections: apre connessioni verso
chiamata di procedura remota JSON-RPC.
nuovi indirizzi.
Allinterno di Bitcoin Core, la separazione
MessageHandler: controlla le code di mes-
fra interfaccia grafica e logica applicativa e
saggi verso e da ogni nodo con il quale
realizzata utilizzando il pattern Model-View-
si e stabilita una connessione, processando
Controller (MVC), definendo dei wrappers
quelli che trova e inoltrandoli ad altri com-
(models) attorno ai componenti Wallet e Chain.
ponenti del client (per esempio, trasferen-
do al Wallet eventuali transazioni dirette
3.5 Comportamento allutente).
DumpAddresses: scrive periodicamente gli
Di seguito saranno esaminate le azioni fonda- indirizzi IP dei nodi considerati attivi su
mentali eseguite dal client Bitcoin Core (quindi, file (peers.dat).
di riflesso, quelle eseguite da ogni nodo parte- BitcoinMiner: svolge le operazioni di mi-
cipante alla rete peer-to-peer Bitcoin), descri- ning.
ARCHITETTURE SOFTWARE, A.A. 2013/2014 16

Gli accessi a sezioni critiche, quali letture e dnsseed.bitcoin.dashjr.org,


scritture delle code di messaggi per ogni no- seed.bitcoinstats.com, . . .), memorizzando
do (effettuate da SocketHandler per inviare e gli indirizzi nelle risposte.
ricevere dati attraverso la rete e MessageHand- 3) Tenta la connessione ad alcuni indirizzi
ler, per processare i messaggi), sono gestite IP hardcoded allinterno del client (i co-
attraverso uso di semafori (libreria boost). siddetti seeds): questi sono aggiornati con
Una volta effettuato il discovery di un nume- ogni nuova release dellapplicazione.
ro sufficiente di nodi, il client effettuera un
aggiornamento della propria block chain con
quella mantenuta dai nodi della rete, inviando
un messaggio di tipo getblocks contenente il I metodi 2 e 3 sono seguiti, in genere, solo
digest dellultimo blocco noto. Se i riceventi al bisogno (primo avvio del nodo o incapa-
di tale messaggio possiedono dei blocchi piu cita di connettersi agli indirizzi memorizzati
recenti provvederanno a notificare il mittente, in precedenza); i nomi di dominio e i seeds
procedendo quindi allinvio dei blocchi veri e harcoded sono aggiornati ad ogni sub-release
propri (vedi 3.5.4). del client e relativi a nodi come tutti gli altri,
Il Wallet creera una pool di transazioni ricevute la cui presenza sulla rete e pressoche costante.
dallutente e non ancora spese, utilizzando il Dopo lavvio del client, i mezzi principali che
suo database interno o, eventualmente, quello due nodi possono utilizzare per scambiarsi in-
della Chain. dirizzi di altri peers sono i messaggi getaddr e
Ogni full client Bitcoin e strutturato come addr.
unapplicazione multithreaded, dovendo inter- Se un nodo P riceve un messaggio getaddr
vallare una quantita notevole di computazione da Q, controlla la sua pool di indirizzi e ne
(controllo di blocchi e transazioni e/o mining) seleziona al piu 2,500 il cui timestamp associato
con la gestione di numerose connessioni di rete (relativo allultimo messaggio ricevuto dallin-
simultanee. dirizzo in questione) non sia piu vecchio di
3 ore, inserendoli in un messaggio addr di
3.5.2 Discovery risposta.
Il client tenta anche di reperire il proprio
Operazione fondamentale, in unarchitettura indirizzo pubblico, mediante richieste HTTP
peer-to-peer pura come quella di Bitcoin, e il a checkip.dyndns.org o www.showmyip.com,
discovery di nuovi nodi a inizializzazione del cos da inviarlo periodicamente ai nodi nella
client. sua pool, allinterno di messaggi addr spon-
In molte architetture peer-to-peer centralizzate tanei (o gratuitous, che non seguono un
o ibride si fa riferimento ad uno (o piu) naming getaddr).
server, i quali forniscono una lista di peer a cui Il client memorizza periodicamente su file gli
connettersi, con relativi indirizzi di rete. indirizzi dei peers attivi con cui ha stabilito
Bitcoin, al fine di evitare lintroduzione di connessioni; il criterio con cui si determina
una componente centralizzata, utilizza altri lattivita di un nodo e lo stesso utilizzato
meccanismi. nel selezionare quali indirizzi accludere ad un
Al bootstrapping di un nodo, questo ottie- messaggio addr.
ne indirizzi di altri peers con le seguenti Vale la pena menzionare che gli indirizzi dei
operazioni: seeds incorporati nel client vengono memoriz-
1) Tenta il caricamento degli eventuali in- zati (allavvio) con un timestamp pari a 0, cos
dirizzi memorizzati in precedenza nel da escluderli sempre dai messaggi addr.
database interno. Il numero di connessioni TCP simultaneamen-
2) Effettua richieste DNS ad alcuni nomi te attive verso altri peers e un parametro
di dominio hardcoded allinterno che varia con il client utilizzato: Bitcoin Core,
del client (es: bitseed.xf2.org, dns- ad esempio, cerca di mantenersi sulle 12-20
seed.bluematt.me, seed.bitcoin.sipa.be, connessioni.
ARCHITETTURE SOFTWARE, A.A. 2013/2014 17

3.5.3 Transazioni sinistra verso destra, aggiungendo le variabili


sullo stack e utilizzando comandi ad n parame-
tri per processare le n variabili in cima ad esso,
Una transazione consiste in un messaggio fir-
eventualmente producendone di nuove.
mato ed emesso in broadcast sulla rete Bitcoin,
Esistono comandi aritmetici, logici, di controllo
eventualmente inserito allinterno di un blocco.
di flusso, orientati alla crittografia e di manipo-
Tipicamente, una transazione fa riferimento a
lazione dello stack; non e possibile effettuare
transazioni effettuate precedentemente da altri
dei cicli (volutamente al fine di evitare pro-
indirizzi Bitcoin verso quello di chi la emette e
grammi non terminanti), da cui consegue la
trasferisce un quantitativo di bitcoins ad uno
non Turing-completezza del linguaggio.
o piu indirizzi riceventi.
Linterprete del linguaggio di scripting e
Il componente che incorpora la logica della
implementato allinterno del Core.
creazione di nuove transazioni e il Wallet.
Lo script implementa la verifica che la transa-
La GUI consente di emettere una transazione
zione specificata come input sia spendibile;
specificandone i parametri in un form: indi-
per fare cio, viene innanzitutto eseguita la meta
rizzo Bitcoin del destinatario (eventualmente
dello script contenuta nellinput, seguita quindi
reperito dalla rubrica interna) e importo (un
da quella contenuta nelloutput a cui si fa
minimo di 546 satoshi).
riferimento.
Nel momento in cui lutente conferma la tran-
In sostanza, i risultati prodotti dalla meta nel-
sazione, e avviata una sequenza di operazioni
linput definiscono i parametri dei comandi
che comprende la sua costruzione, verifica ed
contenuti nella meta delloutput.
invio alla rete.
Se lo script termina senza interruzioni (trigger
Come prima cosa vengono selezionate una o
di errori) e il risultante valore in cima allo stack
piu transazioni da usare come input, diretta-
corrisponde alla costante OP TRUE, allora la
mente dalla pool interna del Wallet, prese in
transazione e valida.
ordine cronologico.
Questa combinazione di due script viene de-
La pool conterra tutte le transazioni con output
nominata Contract: permette a due o piu parti
diretti allutente e non ancora spesi, essendo
interessate di specificare i termini della transa-
stata riempita a inizializzazione.
zione, ossia cosa e richiesto affinche il ricevente
Una transazione prevede uno o piu campi
possa beneficiarne.
input, ognuno composto da:
La tipologia di Contract piu utilizzata (spes-
Il digest di una precedente transazione. so lunica prevista dai clients) e la cosiddetta
Lindice dello specifico output a cui si vuol Pay-to-PubkeyHash: la prima meta dello script
fare riferimento, allinterno della suddetta (scriptSig) consiste in due parametri, ossia la
transazione. firma della transazione precedente e la chiave
La prima meta di uno script. pubblica del beneficiario della transazione; la
Seguono uno o piu campi output, composti seconda meta (scriptPubKey) fa hashing della
dallimporto da trasferire in satoshi e dalla chiave pubblica e controlla che sia uguale al
seconda meta di uno script. digest della stessa precedentemente hardcoded
Lo script consiste fondamentalmente in un set allinterno dello script, quindi effettua la ve-
di istruzioni, definite con un domain-specific rifica della firma, producendo eventualmente
language molto simile a Forth, denominato OP TRUE.
Script, che specifica come il beneficiario (o i La firma viene eseguita applicando lalgoritmo
beneficiari) di una transazione possa utilizzarla Elliptic Curve Digital Signature Algorithm (ECD-
in futuro, quindi spendere i bitcoins trasferiti SA) con chiave privata del beneficiario della
con essa. transazione; come funzione di hashing viene di
Linterprete del linguaggio utilizzato, come in norma utilizzata SHA-256.
Forth, utilizza due strutture a stack separate Discutere delle potenzialita espressive del lin-
per memorizzare record di chiamate di pro- guaggio di scripting utilizzato e di Contracts
cedura e variabili. Lo script e processato da piu complessi va al di la dello scopo di questo
ARCHITETTURE SOFTWARE, A.A. 2013/2014 18

documento; basti pensare che lo script di out-


put possa dover verificare una password, una
combinazione di piu firme o non richiederne
affatto.
Per semplificare il collegamento fra outputs e
successivi inputs, non e possibile che un sin-
golo output sia indicato da molteplici inputs.
Di conseguenza, se il valore x delloutput pro-
dotto in una nuova transazione e minore della
somma y = ni=1 inputi dei valori di tutti gli
P

n input indicati, viene automaticamente creato


un secondo campo output, con importo y x,
diretto al mittente stesso della transazione (il
change, resto).
In mancanza del change, o per scelta del mit-
tente, y x o una frazione di tale valore sono
destinati alla fee per i miners che genereranno
il blocco relativo alla transazione.
Le fees possono rappresentare un mezzo per
velocizzare la conferma della propria transazio-
ne: piu sono alte, piu e probabile che i miners Figura 17. Sequenza di messaggi per invio di
includano la transazione allinterno del blocco piu transazioni
che stanno costruendo.
Dopo una verifica locale della validita della
transazione prodotta, questa viene spedita ad presenza.
altri peers sulla rete, cos che possa essere inse- Il messaggio inv e composto da una o piu cop-
rita in un blocco della block chain e confermata pie di elementi, contenente il tipo dellelemento
in via definitiva; stessa cosa accade per quelle (transazione o blocco) e suo digest.
valide ricevute da altri nodi. Il nodo che riceve un messaggio inv controlla
Linvio e ripetuto periodicamente, evitando di se possiede gli elementi indicati al suo inter-
ritrasmettere una transazione solo quando que- no nella propria memoria locale (utilizzando
sta compare allinterno della block chain e puo il loro digest): tutte le transazioni o i bloc-
essere considerata statisticamente valida: il chi non presenti sono richiesti al mittente del
blocco in cui si trova la transazione ha un messaggio inv attraverso un messaggio getdata,
numero sufficiente di successori, stimato sui 5; utilizzando il medesimo formato.
risulta praticamente impossibile, per unentita A getdata segue un messaggio tx, contenente
che non controlla almeno il 51% delle risorse le transazioni vere e proprie.
computazionali disponibili nella rete Bitcoin, Il vantaggio di questo scambio di messaggi
falsificare un tale numero di blocchi trovando e quello di evitare uno spreco eccessivo di
la proof-of-work e vincere quindi il consenso bandwidth e velocizzarne la propagazione: le
collettivo. dimensioni tipiche di un inv sono 61 B, contro
Alternativamente, una transazione non viene i 10 KB medi di un tx. Per uno studio approfon-
ritrasmessa se il timestamp relativo ad essa dito di questi meccanismi di propagazione dei
indica che sia troppo vecchia (la soglia varia da messaggi e relativi risultati analitici si rimanda
poche ore a poche decine di minuti, a seconda a [DW13].
del client): sara il nodo interessato a doverla Le transazioni che compaiono infine nella block
ritrasmettere. chain sono inserite nella hash map che le asso-
Al fine di ridurre il consumo di bandwidth, cia al corrispettivo blocco (3.4.5), cos da poter
linvio di una transazione e preceduto da un essere controllate velocemente, in tempo O(1),
messaggio inv (inventory) che ne annuncia la allatto di dover verificare la validita di una
ARCHITETTURE SOFTWARE, A.A. 2013/2014 19

Figura 16. Emissione di una transazione

nuova transazione che le indica come input. Il Merkle Root e ricavato mediante costruzione
di un Hash tree (o Merkle tree).
3.5.4 Mining Il tree e costruito applicando la funzione di
hashing a tutte le transazioni nel blocco (foglie
Il mining e il processo che consente di vali- dellalbero) e ripetendo ricorsivamente il pro-
dare le transazioni emesse, costituendo il pi- cedimento sui nodi intermedi, ottenuti come
lastro alla base dellaffidabilita di Bitcoin ed il digest della concatenazione dei due figli.
meccanismo di creazione di nuove monete. Il processo termina restituendo il valore del-
Nei full clients come Bitcoin Core e un compo- la radice (Root), che date n transazioni viene
nente specializzato, il Miner, che svolge questo calcolata con un numero di applicazioni della
procedimento su uno o piu threads separati. funzione di hashing pari alla somma parziale
Plog n
Nella sezione 2 sono stati introdotti i principi n-esima sn = k=02 2k di una serie geometrica.
alla base di questa attivita, segue adesso una Nel caso di un numero dispari di transazioni e
descrizione piu accurata di come un blocco sia sufficiente che ad una di esse sia applicata due
prodotto, inserito nella block chain e diffuso volte la funzione di hashing.
nella rete. Calcolare un digest derivato da tutte le transa-
Un blocco include una o piu transazioni allin- zioni nel blocco consente di salvare spazio su
terno del suo body e un header composto da disco, mantenendo un indice dellintegrita del
diversi campi: blocco al solo costo (in termini di spazio, me-
Un numero di versione a 4 bits, costante moria) di 80 bytes, ossia la dimensione totale
per tutti i blocchi. di un header.
Digest a 256 bits dellheader del blocco Al fine di costruire un blocco ritenuto valido
precedente. dallo schema proof-of-work impiegato da Bit-
Merkle Root a 256 bits, ricavato da tutte le coin, il miner calcola ripetutamente il digest
transazioni nel blocco. dellheader del blocco, applicando SHA-256;
Un timestamp UTC. se la rappresentazione esadecimale del digest
Il target a 256 bits attuale. ottenuto e minore del target (ossia se ha un
Il nonce a 32 bits attualmente considerato prefisso composto da un certo numero di bits
dal miner, nel processo di trovare la proof- 0) il blocco e pronto per essere inviato alla
of work necessaria alla validazione del rete, altrimenti il nonce viene incrementato e
blocco. il processo reiterato.
ARCHITETTURE SOFTWARE, A.A. 2013/2014 20

Il risultato dellhashing, grazie alle proprieta proprio indirizzo Bitcoin e che rappresenta il
di funzioni one-way, e del tutto imprevedibile: premio per la scoperta della proof-of-work;
un qualunque numero compreso tra 0 e 2256 ; poiche questa transazione altera il Merkle Root
piu piccolo e il target, maggiore e la diffi- e quindi lheader del blocco, nessun miner fa
colta (difficulty) nel trovare una delle soluzioni hashing della medesima sequenza di valori.
accettabili. Limporto della coinbase e costante (25 BTC, al
La difficulty e calcolata come il rapporto fra il tempo della stesura di questo documento) ed e
massimo valore che il target puo assumere e dimezzato automaticamente dai nodi della rete
quello indicato dallheader del blocco. ogni 210,000 blocchi, al fine di evitare unecces-
Il target di riferimento per il mining viene siva produzione di bitcoins (3.1) e conseguente
modificato indipendentemente da ogni nodo inflazione.
della rete Bitcoin ogni 2016 blocchi ricevuti. Nel caso in cui la somma totale degli inputs
A ricezione dellultimo blocco, un client con- di una transazione nel blocco superi il valo-
fronta il tempo totale impiegato per produrre re emesso dagli outputs (determinando una
gli ultimi 2016 (calcolato come differenza fra il transaction fee), la differenza viene aggiunta
timestamp dellultimo e quello del primo) con allimporto della coinbase dal miner.
quello ideale di 2 settimane, ottenuto conside- Parametri quali il target attuale e la parte
rando una media di un blocco ogni 10 minuti: costante dellimporto della coinbase, nonche
il target viene modificato in base alla differenza la logica di controllo delle transazioni ricevu-
percentuale fra di essi. te, sono incorporate nel componente Core del
Da notare come aggiungere altre transazioni client.
al blocco durante il procedimento, ricalcolando Rimane da spiegare come viene propagato
quindi la Merkle Root e modificando lheader un blocco, una volta che la proof-of-work e
del blocco, invaliderebbe il calcolo dei digest completata.
precedenti (uno dei nonce gia usati potrebbe Il meccanismo di invio di un blocco da P a Q
adesso portare al risultato). e analogo a quello utilizzato per le transazioni.
Per questa ragione, una volta iniziata la ricer- P invia un messaggio di tipo inv, contenente
ca della proof-of-work il miner non inserisce il digest del blocco, a Q. Se Q non possiede
ulteriori transazioni allinterno del blocco. il blocco localmente risponde con un getdata,
Il compromesso fra il dedicare piu tempo a al quale P replica inviando il blocco vero e
cercare la proof-of-work o raccogliere il mag- proprio, in un messaggio block.
gior numero di transazioni allinterno del bloc- Anche in questo caso il vantaggio e dato dalla
co prima di iniziare, cos da massimizzare la riduzione della bandwidth utilizzata (un mes-
somma delle transaction fees, resta una scelta saggio di tipo block puo avere una dimensione
a discrezione del miner; esiste la possibilita di di svariati MBs).
creare blocchi ad una sola transazione. Alla ricezione segue la verifica che un blocco
Generalmente il Miner estrae il maggior nume- sia valido: il digest del suo header sia minore
ro possibile di transizioni conservate nella lista del target dichiarato, tutte le transazioni allin-
ordinata per transaction fees mantenuta dalla terno del body siano valide e non duplicate
Chain, cos da massimizzare il guadagno. (gia contenute in un blocco nella block chain),
Ci si potrebbe domandare come possa un ela- via sia una sola coinbase e presenti il corretto
boratore poco potente competere con un mi- importo.
ning rig (3.3.5), ipotizzando che abbiano rac- Se il blocco e valido e non duplicato, viene
colto le stesse transazioni nel blocco e conside- aggiunto alla block chain. Sono previsti tre casi:
rando il fatto che il nonce viene incrementato
allo stesso modo da entrambi: otterrebbero i 1) Il digest del blocco precedente corrispon-
medesimi digests. de a quello attualmente in cima alla block
In realta non e cos, in quanto ogni miner chain. Rappresenta il caso ottimale: tutte
aggiunge al blocco una transazione speciale le transazioni nel blocco sono memorizza-
(detta coinbase), il cui output e destinato al te nella hash map che le associa ad esso
ARCHITETTURE SOFTWARE, A.A. 2013/2014 21

Figura 18. Mining di un blocco

(e nel Wallet se relative allutente) e il In caso di un pareggio, il secondario viene


blocco e inoltrato agli altri peers mediante mantenuto nella memoria locale del client fino
lo stesso procedimento. a che non prevalga una maggioranza.
2) Il blocco e orphan: non ha un predecessore Nel caso in cui il ramo secondario abbia una
nella block chain. In questo caso e pos- difficulty complessiva minore, tutte le transa-
sibile che per ritardi nella propagazione zioni al suo interno (se valide) sono aggiunte
dei messaggi o perdita di questi ultimi il alla TxMemPool e inoltrate agli altri peers,
blocco precedente non sia ancora arrivato. mentre i blocchi vengono scartati.
Il blocco orfano viene conservato in una La differenza minima nella difficulty di due
pool di dimensione limitata, scartando- biforcazioni che segna lo scarto di una di esse e
lo qualora diventi troppo vecchio o la un parametro dello specifico client, quindi non
pool risultasse piena. Mediante il mes- definito dal protocollo adottato da Bitcoin. Il
saggio getblocks il client puo richiedere il client Bitcoin Core determina la cancellazione
genitore di un blocco orfano agli altri di una fork dalla memoria locale se questa e in
peers. difetto della difficulty relativa a 5 blocchi.
3) Il digest del blocco precedente corrispon- Non tutte le transazioni dei blocchi scartati
de a quello di un blocco intermedio nel- sono re-inserite nella TxMemPool e reimmesse
la block chain, causando una fork di nella rete: fanno eccezione le coinbase, le quali
questultima. sono perse per sempre (a danno dei miners che
hanno prodotto i relativi blocchi).
Nel terzo caso, il client verifica che il ramo Nelleventualita in cui un nodo decida erronea-
secondario abbia una difficulty complessiva mente che un ramo secondario vada scartato,
dei blocchi al suo interno maggiore di quello a ricezione dei blocchi successivi di quel ramo
primario, con una certa differenza minima: in (orfani) si ricadra semplicemente nel caso 2.
caso affermativo il secondario diventa il nuovo
primario e tutte le transazioni valide allinterno 3.6 Razionale
del vecchio primario e che non creano conflitti
con quelle del secondario (double-spending) Larchitettura di Bitcoin e basata su uno stile
vengono aggiunte alla TxMemPool e ritrasmes- peer-to-peer puro, o decentralizzato: non esiste
se sulla rete, cos da poter essere incluse in uninfrastruttura centralizzata per localizzazio-
nuovi blocchi. ne dei peers o altri servizi, come non esistono
ARCHITETTURE SOFTWARE, A.A. 2013/2014 22

super nodi; tuttal piu vi sono dei nodi consi- clients). I signing-only rinunciano alla possibi-
derati affidabili, in termini di presenza sulla re- lita di controllare lo stato delle proprie ope-
te, i cui indirizzi sono hardcoded allinterno del razioni, conservando il solo accesso ai propri
client originale e che possono essere contattati bitcoins mediante possesso del wallet. I thin
al primo avvio di un nodo. clients rappresentano una migrazione completa
Come gia discusso in 3.1 e 3.2, le ragioni dietro verso unarchitettura client-server centralizza-
alladozione di questo stile sono tanto ideologi- ta: non possiedono wallet o block chain, ma si
che (nessuna istituzione finanziaria o governo limitano ad avere uno scorcio della rete Bitcoin
a cui rispondere e nessuna esigenza di trust attraverso linterfaccia che un server mette loro
in organizzazioni gestite da terze parti) quanto a disposizione.
pratiche. Questi ultimi rinunciano completamente alla
In particolar modo e possibile ragionare su loro indipendenza, con conseguenze talvolta
queste ultime in termini di compromessi (trade catastrofiche (si pensi ai gia citati episodi dei
offs) raggiunti, valutando le possibili alternati- providers MyBitcoin e Mt.Gox).
ve: spiccano affidabilita e indipendenza (inte- Per concludere questa analisi, e possibile affer-
sa, in questa sezione, come assenza di necessita mare che la comunita di sviluppatori Bitcoin
di trust in terzi), a scapito dellefficienza. potrebbe dover rilassare la decentralizzazione
La possibilita di poter scaricare porzioni del- dellarchitettura, istituendo magari un gruppo
la block chain da qualunque nodo connesso di super nodi che svolgano parte delle funzio-
alla rete Bitcoin, cos come di poter ricevere ni dei full clients, al fine di ridurre il carico
conferma delle proprie transazioni connetten- complessivo e favorire la scalabilita del sistema.
dosi ad una minima frazione della rete, grazie
al meccanismo di disseminazione utilizzato, 4 A SPETTI ANALITICI
rappresenta una forte garanzia di affidabilita.
La disseminazione delle informazioni tra i In aggiunta alla costruzione del grafo del-
peers, salvo lutilizzo di messaggi preliminari le transazioni menzionato in 3.2.2, gli aspetti
(inv e getdata) al fine di ridurre la mole di maggiormente valutati nellanalisi dellarchi-
dati trasferiti, consiste in un puro e semplice tettura Bitcoin, nonche punti critici del siste-
flooding. ma, consistono probabilmente nel tempo medio
Il prezzo da pagare risiede nel consumo di necessario alla conferma di una transazione
memoria e bandwidth estremamente alto di ed il guadagno medio, per transazione, di un
cui soffrono i full clients; consumo che, col miner che impiega risorse computazionali per
tempo e lintensificarsi della frequenza di tran- aggregarle in un blocco valido.
sazioni effettuate, andra crescendo, minando la Questi parametri sono indicativi della bonta
scalabilita del sistema. del sistema e costituiscono le ragioni principali
Possibili soluzioni che non compromettano la del suo utilizzo: il tempo necessario alla confer-
decentralizzazione del sistema sono gia state ma non deve essere troppo alto e il guadagno
accennate in 3.2. dei miners proporzionale allo sforzo compiuto.
Per migliorare le performance delle operazio- I grafici che seguono mostrano il variare dei
ni sono stati introdotti nuovi tipi di clients: sopracitati parametri in un periodo che va da
headers-only (3.3.2), signing-only (3.3.3) e thin Aprile 2013 ad Aprile 2014 e sono costruiti a
(3.3.4). partire da dati in formato CSV estratti da http:
Nellordine in cui sono stati elencati, questi //blockchain.info/stats.
derivati del client originale rappresentano una Lultima stima effettuata (20 Aprile 2014) mo-
progressiva rinuncia degli utenti ai primi due stra un tempo medio di 8 minuti; la media
requisiti (affidabilita e indipendenza) verso un dellultimo anno e pari a 10 minuti, con pic-
goal di maggiore efficienza. chi minimi e massimi di circa 5 e 15 minuti,
Gli headers-only rinunciano ad un controllo rispettivamente.
completo di blocchi e transazioni, ponendo una Il tempo medio necessario alla conferma di una
maggiore fiducia negli altri nodi (supposti full transazione rappresenta un punto critico del
ARCHITETTURE SOFTWARE, A.A. 2013/2014 23

15.0

75
Tempo di conferma transazioni (minuti)

12.5

Guadagno per transazione (USD)


50
10.0

7.5 25

5.0
lug 2013 ott 2013 gen 2014 apr 2014 lug 2013 ott 2013 gen 2014 apr 2014

Figura 19. Tempo medio necessario a confer- Figura 20. Guadagno medio di un miner, per
mare una transazione transazione

sistema; in questo caso si parla di accettazione valore.


in un singolo blocco e non di una conferma
statisticamente sicura, data da almeno 5 blocchi
concatenati ad esso nella chain. 5 A LTRE ARCHITETTURE
Questo parametro varia principalmente con il
numero di nodi (e miners) attivi allinterno In questa sezione saranno presentate le ar-
della rete Bitcoin e con la difficulty; questul- chitetture di alcuni sistemi di valuta elettro-
tima, si ricorda, dipende dal numero di blocchi nica alternativi a Bitcoin, sottolineandone le
prodotti ogni 2 settimane e si adatta in maniera differenze principali e discutendone pregi e
direttamente proporzionale a tale parametro: limitazioni.
piu blocchi sono prodotti, maggiore sara la dif- Sebbene Bitcoin rimanga probabilmente la
ficolta nel produrre la serie successiva (questo piu utilizzata, esistono numerose criptovalute
spiega i bruschi sbalzi nella linea del grafico). derivate.
Il guadagno medio per transazione e pari a 44 Litecoin, per esempio, modifica il processo di
USD per lultima stima effettuata (20 Aprile mining utilizzando scrypt al posto di SHA-256:
2014); la media dellultimo anno e pari a 27 una funzione di derivazione di chiave basata
USD, con picchi minimi e massimi di circa 6 e su password che richiede una notevole quantita
90 USD, rispettivamente. di memoria ma minore sforzo computazionale,
Questo parametro non e solo influenzato dal rispetto alla controparte Bitcoin. Vertcoin mo-
numero di transazioni in circolo nella rete e difica ulteriormente il processo aggiungendo
dalle transaction fee al loro interno (utiliz- una modifica adattiva nella memoria richiesta
zate come incentivo per alcuni miners), ma per computare scrypt, al fine di favorire CPU
principalmente dal valore del BTC in USD. mining rispetto a quello tramite ASICs (3.3.5),
Probabilmente anche il fallimento di alcuni dotati di memoria limitata.
providers (Mt.Gox agli inizi del 2014) ha com- Namecoin integra larchitettura Bitcoin con un
portato una notevole fluttuazione nel suddetto DNS distribuito, consentendo di associare un
ARCHITETTURE SOFTWARE, A.A. 2013/2014 24

nome di dominio ad ogni blocco (in questo


senso, la proof-of-work serve a validare anche
il nome di dominio).
In aggiunta a queste leggere variazioni, esisto-
no alternative a Bitcoin che propongono solu-
zioni molto differenti o specializzate in deter-
minati aspetti; segue una descrizione di due
delle piu famose.

5.1 Ripple

Ideato da Ryan Fugger nel 2004 e attualmente


mantenuto dal progetto Opencoin, Ripple [GR] Figura 21. Ripple come sistema di pagamento
rappresenta una delle alternative di maggiore federato
successo a Bitcoin: un sistema monetario de-
centralizzato basato sul concetto di trust tra
peers.
Ripple puo essere utilizzato per scambiare qua-
lunque tipo di moneta, fisica o virtuale (EUR, Una volta costruita questa lista, un nodo puo
USD, BTC, . . .), includendo la propria valuta: i utilizzarla per raggiungere il consenso colletti-
ripples (XRP). vo: se riceve una nuova transazione dalla rete,
Come Bitcoin, Ripple e una criptovaluta: le gli basta verificare che la maggioranza di peers
transazioni sono condotte mediante crittogra- nella sua UNL labbia accettata.
fia asimmetrica e firme digitali (ECDSA) e gli Se una transazione e valida per un nodo (non e
indirizzi corrispondono alle chiavi pubbliche un tentativo di double-spending, per esempio)
degli utenti. La differenza principale risiede nel e lo e per la maggioranza della sua UNL,
fatto che esse siano accettate dal beneficiario questa viene propagata ad altri: in questo modo
solo qualora il mittente sia nella sua lista di il nodo esprime il suo voto positivo.
peers fidati; questa lista puo essere estesa Poiche non esiste attivita di mining, il sistema
in qualunque momento e considera leventuale non prevede che i ripples siano prodotti dai
presenza di uno o piu intermediari fidati fra le peers: un totale di 100,000,000,000 XRP sono
due parti. stati creati da Opencoin (premined) e, in pic-
Per facilitare le transazioni di utenti nuovi alla cola parte, distribuiti al pubblico, al fine di
rete Ripple, e previsto luso di gateway: servizi promuoverne luso.
commerciali che fungono da intermediari fidati Vale anche la pena menzionare che per creare
nelle transazioni. un account e necessario depositarvi almeno
Sebbene il registro di tutte le transazioni effet- 200 XRP (mediante conversione da altre valu-
tuate sia pubblico e condiviso fra i nodi della te, per esempio): questo limita notevolmente i
rete, Ripple non utilizza uno schema proof-of- meccanismi a supporto della privacy, quali lo
work per consentire ad un peer di attestare la schema 1 a 1 per coppie di chiavi e transazioni
validita di una o piu transazioni, a differenza utilizzato da Bitcoin.
di Bitcoin. Sebbene Ripple sembri essere finalizzato a pro-
Ogni utente possiede una Unique Node List muovere operazioni piu veloci e meno dispen-
(UNL): lista di entita distinte che, con alta pro- diose di computazione, eliminando del tutto il
babilita, non coopererebbero nella falsificazione meccanismo di mining utilizzato da Bitcoin, la
di una transazione. Ogni singola entita nella necessita di trust negli altri peers potrebbe rap-
UNL potrebbe essere mossa da intenti fraudo- presentare un suo punto debole, insieme alla
lenti, ma la loro presenza nella lista assicura che controversa scelta di centralizzare, allocando
non lavorerebbero in gruppo per sovvertire la fin da subito lintero capitale nelle mani degli
coerenza del registro. sviluppatori, la produzione di ripples.
ARCHITETTURE SOFTWARE, A.A. 2013/2014 25

5.2 Ethereum

Presentata dal ventenne Vitalik Buterin alla fine


del 2013 [But13], Ethereum consiste in una
piattaforma software per gestione decentraliz-
zata di transazioni tra utenti, inclusiva della
criptovaluta ether.
Ethereum riprende numerosi concetti introdot-
ti da Bitcoin: transazioni firmate digitalmen-
te, proof-of-work, block chain, disseminazione Figura 22. Cambiamenti di stato della block
delle informazioni fra i peers della rete, consen- chain in Ethereum
so collettivo per validare transazioni e diversi
schemi transazionali tramite scripting. Questo consente ad un client di memorizzare
In particolar modo e questultimo concetto solo lo stato attuale (ethers posseduti da ogni
(contracts, vedi 3.5.3) che viene ampliato note- indirizzo che abbia beneficiato di transazioni)
volmente: Ethereum utilizza un linguaggio di e gli headers dei blocchi ricevuti, riducendo
scripting Turing-completo incorporato al suo notevolmente il consumo di memoria.
interno, permettendo la creazione di contracts Lobiettivo ultimo di Ethereum sembra essere
complessi e applicazioni decentralizzate che quello di estendere il ridotto potere espressivo
specificano regole arbitrarie per il possesso di Bitcoin nel definire complesse modalita di
degli ethers. pagamento, nonche approntare alcune ottimiz-
Il codice nei contracts e scritto in questo zazioni tecniche. Questo applicativo e anco-
linguaggio bytecode stack-based, denominato ra giovane, ma puo rappresentare un valido
Ethereum virtual machine code (EVMC), il quale concorrente a Bitcoin in futuro.
consente costrutti preclusi a quello utilizzato da
Bitcoin, quali i loops.
Le transazioni non sono costituite da input 6 C ONCLUSIONI
ed output, bens dalla firma che identifica il
mittente, un importo in ethers, un program- Lobiettivo di questo documento e stato quello
ma scritto in EVMC e due parametri chiamati di fornire una rappresentazione di Bitcoin da
STARTGAS e GASPRICE; il primo rappresenta un punto di vista architetturale.
il limite di steps computazionali riservati al- Come prima cosa e stato descritto il contesto
lesecuzione del programma (onde evitare cicli di utilizzo di Bitcoin, con i principali attori
infiniti) e il secondo e la fee da pagare al miner (utenti comuni, miners, providers di servizi) e
per ogni step. Se il limite viene superato tutti proprieta rilevanti.
i cambiamenti derivati dalla transazione sono E stata in seguito descritta la struttura di
annullati. un applicativo partecipante alla rete Bitcoin,
A ricezione e accettazione di un blocco, un comprensivo dei componenti necessari alla
nodo esegue i programmi EVMC contenuti comunicazione con altri peers, gestione dei
allinterno di ogni transazione nellapposita bitcoins posseduti dallutente, visualizzazione
macchina virtuale incorporata nel client. Que- della block chain e mining.
sti programmi alterano lo stato della block Sono state brevemente introdotte alcune varia-
chain, a differenza di quanto accade in Bitcoin, zioni del client originale, comprensive di deter-
modificando le transazioni nei precedenti (per minati sottoinsiemi dei suoi componenti e rap-
esempio sottraendo una quantita allimporto in presentanti una deviazione dal modello peer-
ethers o alterando altre variabili). to-peer decentralizzato originale: headers-only,
In sostanza la block chain passa da uno stato signing-only, thin e mining clients.
allaltro, eseguendo gli scripts contenuti allin- E quindi seguita una descrizione delle opera-
terno delle transazioni in ogni nuovo blocco. zioni principali compiute dal client: bootstrap-
ARCHITETTURE SOFTWARE, A.A. 2013/2014 26

ping, discovery di altri peers, gestione delle [GR] Patrick Griffin and Philip Rapoport.
transazioni e mining. Ripple: A Primer.
Per concludere lanalisi dellarchitettura ne e [Nak08] Satoshi Nakamoto. Bitcoin: A
stato discusso il razionale ed e stato fatto cenno peer-to-peer electronic cash system.
ad alcuni aspetti analitici. Consulted, 1:2012, 2008.
Infine, sono state presentati alcuni sistemi di [OKH13] Micha Ober, Stefan Katzenbeisser,
valute elettroniche alternative e maggiormente and Kay Hamacher. Structure and
diffuse: Ripple ed Ethereum. anonymity of the bitcoin transaction
E possibile quindi affermare che levoluzione graph. Future Internet, 5(2):237250,
di Bitcoin, al fine di continuare a permetterne 2013.
lutilizzo a singoli utenti e senza lappoggio [RH13] Fergal Reid and Martin Harrigan.
di servizi esterni per la gestione dei wallets, An analysis of anonymity in the bit-
presentera numerose sfide: prima fra tutte la coin system. In Security and Privacy
necessita di trovare un compromesso piu ade- in Social Networks, pages 197223.
guato fra efficienza operativa e mantenimento Springer, 2013.
della decentralizzazione che lo ha reso cos [Sku12] Rostislav Skudnov. Bitcoin clien-
popolare. ts. B.s. thesis, Turku University of
Applied Sciences, 2012.
10 maggio 2014.
S ITOGRAFIA
B IBLIOGRAFIA [12] Bitcoin wiki. https://en.bitcoin.it/wiki,
+
[AKR 13] Elli Androulaki, Ghassan O Kara- 2014. [Online; accessed 14-April-2014].
me, Marc Roeschlin, Tobias Scherer, [13] Ken Shirriff. Bitcoins the hard
and Srdjan Capkun. Evaluating user way: using the raw bitcoin protocol.
privacy in bitcoin. In Financial Cryp- http://www.righto.com/2014/02/
tography and Data Security, pages bitcoins-hard-way-using-raw-bitcoin.
3451. Springer, 2013. html, 2014. [Online; accessed
[Ara14] Giulia Aranguena. Bitcoin. Lal- 22-April-2014].
tra faccia della moneta, volume 8. [14] Charlie Stross. Why i want bitcoin to
goWare, 2014. die in a fire. http://www.antipope.
[But13] Vitalik Buterin. [English] White Pa- org/charlie/blog-static/2013/12/
per: A Next-Generation Smart Con- why-i-want-bitcoin-to-die-in-a.html,
tract and Decentralized Application 2013. [Online; accessed 12-April-2014].
Platform. ethereum / wiki on [15] Wikipedia. Bitcoin wikipedia,
GitHub (Self-published), 2013. the free encyclopedia. http:
[DPSHJ] Joan Antoni Donet Donet, Cristi- //en.wikipedia.org/w/index.php?title=
na Perez-Sola, and Jordi Herrera- Bitcoin&oldid=606742319, 2014. [Online;
Joancomart. The Bitcoin P2P accessed 10-April-2014].
network.
[DW13] Christian Decker and Roger Watte-
nhofer. Information propagation in
the bitcoin network. In Peer-to-Peer
Computing (P2P), 2013 IEEE Thir-
teenth International Conference on,
pages 110. IEEE, 2013.
[GKCC] Arthur Gervais, Ghassan Karame,
Srdjan Capkun, and Vedran Ca-
pkun. Is Bitcoin a Decentralized
Currency?

Das könnte Ihnen auch gefallen