Parte I: Strutture dati e Sistemi 16
5. Strutture dati 27
5.2. Blockchain 31
La blockchain è una struttura dati a lista concatenata, in cui i nodi della rete registrano blocchi di informazioni secondo le regole proprie del sistema di attuazione. Allo stato dell’arte, quando si parla di blockchain, si fa riferimento alla blockchain del sistema Bitcoin, il modello
40 Cryptonote Technology, Ring signatures: Untraceable payments,
https://cryptonote.org/inside; Greg Maxwell, Confidential Transactions, 2013, https://www.weusecoins.com/confidential-transactions/; Shen Noether, Adam Mackenzie and Monero Core Team, Ring Confidential Transactions, 2016, https://www.ledgerjournal.org/ojs/index.php/ledger/article/download/34/61
41In una dimostrazione a conoscenza zero una delle parti dimostra all'altra di
possedere una determinata informazione senza svelarla ma ripetendo più volte un comportamento basato proprio sul possesso di quell'informazione, adottando un comportamento analogo a quello che nel mondo reale potrebbe essere aprire ripetutamente una porta, senza mostrare la chiave utilizzata. Vide: Jean-Jacques Quisquater, Louis Guillou, Marie Annick, Tom Berson: How to explain zero-knowledge
protocols to your children, 1989, CRYPTO '89, Proceedings on Advances in Cryptology,
pag 628-631.
42Zerocash: Decentralized Anonymous Payments from Bitcoin (extended version), Eli
Ben-Sasson, Alessandro Chiesay Christina Garmanz Matthew Greenz, Ian Miersz Eran Tromerx Madars Virzay, 2014, http://zerocash-project.org/paper
applicativo per antonomasia, che è anche un database distribuito: le considerazioni che svolgeremo in seguito seguiranno il medesimo schema di ragionamento, prendendo in considerazione le regole matematiche generali nella loro applicazione al caso specifico.
Si tratta di una catena logica: ogni blocco che viene aggiunto alla lista comprende un riferimento univoco al blocco che lo precede: la relazione fra blocchi consente così di percorrere l’intero database con la possibilità di risalire da ogni blocco fino al primo inserito. Per convenzione il c.d. Genesis Block presenta il valore “Null”, rappresentato con 256 bit consecutivi con valore 0, nella posizione riservata al riferimento al blocco precedente; in tutti i blocchi successivi questo valore è ottenuto calcolando due volte l’hash di una piccola porzione del blocco precedente, denominata intestazione, applicando l’algoritmo
SHA256. L’hash calcolato in questo modo è ancora una stringa di 256 bit, o 32 byte, che viene registrata nell’intestazione e pertanto diviene
parte integrante dei dati che serviranno a produrre l’hash identificativo del blocco stesso che verrà inserito nel blocco successivo; di conseguenza questa struttura oltre a determinare la concatenazione dei blocchi ne fissa con certezza i contenuti.
Figura 1: Struttura della blockchain
Modificando i dati registrati in un blocco il suo hash risulterebbe, infatti, completamente differente: dovendo riportare questo nuovo valore
nel blocco successivo, per mantenere la concatenazione si renderebbe necessario anche il ricalcolo di questo ulteriore hash poiché anche questo risulterebbe modificato: il ricalcolo degli hash necessario a preservare il collegamento matematico si propagherebbe così a tutti i blocchi successivi fino al raggiungimento dell’ultimo blocco della catena, rendendo l’operazione eccessivamente dispendiosa in termini di potenza di calcolo e di energia.
Il riferimento crittografico contenuto nei blockheader -basato su contenuto del blocco, marca temporale e blockheader precedente- viene considerato il modello di un nuovo tipo di firma di gruppo, la dynamic-
membership multiparty signature (DMMS) 43. Infatti, il sistema non pone limiti di ingresso alla competizione per il mining, impedendo di determinare a priori quali nodi parteciperanno; poiché i blocchi sono concatenati, la firma DMMS diviene cumulativa e la sua forza è direttamente proporzionale alla potenza computazionale globalmente impegnata.
Le dimensioni dei blocchi vengono liberamente determinate dal programma: ognuno di essi contiene un’intestazione che è formata da un numero fisso di dati e da un numero variabile, ma limitato, di transazioni e per aggiungere nuove operazioni al registro è necessario produrre nuovi blocchi da aggiungere alla struttura logica; le dimensioni della blockchain, invece, aumentano necessariamente nel tempo poiché la lista delle transazioni può solo essere integrata, senza possibilità di rimuovere alcuna voce. Nel sistema Bitcoin il programma
limita attualmente il peso complessivo del blocco a 1 Megabyte44: la
comunità Bitcoin sta valutando da tempo la possibilità di aumentare le dimensioni dei blocchi fino a un massimo di 16 Megabyte,
43 Adam Back, Matt Corallo, Luke Dashjr,Mark Friedenbach, Gregory Maxwell, Andrew
Miller, Andrew Poelstra, Jorge Timón, and Pieter Wuill, Enabling Blockchain Innovations with Pegged Sidechains, 2014, https://blockstream.com/sidechains.pdf
44 Ogni blocco si compone di un prefisso che indica le dimensioni del blocco, un
campo di 4 byte -che fissa per il blocco una dimensione massima di 232 byte-
un’eventualità che non è ancora stata realizzata per il timore delle conseguenze negative di una fork che potrebbe generare problemi in termini di certezza delle transazioni e di double spending come già è
accaduto nel caso della fork di Ethereum che analizzeremo in seguito45.
Poiché l’algoritmo che regola la difficoltà di calcolo diventa più complicato man mano che si aggiungono miner alla competizione, i nodi hanno un incentivo, in termini di risparmio energetico e impiego efficiente della potenza computazionale, a unirsi in mining pool. Ad
esempio, la blockchain Bitcoin conta al momento 6875 nodi46
concentrati in misura superiore all’80% in quattro mining pool cinesi47:
questa scelta operativa introduce un problema ulteriore legato a
eventuali attacchi all’Internet Provider48. Secondo un recente studio
svolto in collaborazione fra i ricercatori dell’ETH di Zurigo e
dell’Università Ebraica di Gerusalemme49, sarebbe sufficiente prendere
il controllo di meno di 100 prefissi BGP50 per isolare fino al 47% della
potenza computazionale, anche nel caso in cui la mining pool sia ridondata. Un attacco di questo genere riuscirebbe ad alterare il corso della blockchain, isolando i nodi di cui il Provider controlla la connettività e rallentando lo scambio di informazioni del protocollo, con tutte le conseguenze in tema di spreco di energia e double spending.
Alcuni dei rimedi suggeriti sul piano tecnico sono quelli di incrementare la ridondanza dei nodi, anche tramite VPN criptata;
45 Vide ultra sub Ethereum DAO
46 Global Bitcoin Nodes Distribution https://bitnodes.21.co/ 47 Naveen Joshi, 3 things to know about Bitcoin Blockchain, 2017,
https://www.linkedin.com/pulse/3-things-know-bitcoin-blockchain-naveen- joshi?trk=v-
feed&lipi=urn%3Ali%3Apage%3Ad_flagship3_feed%3BSOk75Q3zYBSq8FXP8dtdSg%3 D%3D
48Richard Chirgwin Evil ISPs could disrupt Bitcoin's blockchain, 2017,
https://www.theregister.co.uk/2017/04/11/evil_isps_could_disrupt_bitcoins_blockch ain/
49 Maria Apostolaki, Aviv Zohar, Laurent Vanbever , Hijacking Bitcoin: Routing Attacks
on Cryptocurrencies, 2016, https://arxiv.org/abs/1605.07524v2
50 Border Gateway Protocol, il protocollo standard di comunicazione fra router
disegnato per la comunicazione e lo scambio di informazioni sugli indirizzi di rete fra
controllare che le connessioni fra nodi, generate in maniera casuale dal sistema, non dipendano tutte dal medesimo Provider, eventualmente aumentandone il numero; tenere monitorati i tempi di latenza, quelli di connessione, la distribuzione dei nodi e le disconnessioni simultanee; accettare le connessioni random proposte dal network, scelta che però appare poco probabile, dato il conflitto con eventuali regole di firewall e
NAT51 configurate nel nodo.