Blockchain Databases

Una forte attenzione mediatica hanno ricevuto di recente i database basati sulle Blockchain. In questa paginetta cerchiamo di accennare alle tecnologie su cui si basano e che, vedremo, erano gia' disponibili da tempo. I Blockchain database sono stati sfruttati per le criptovalute, tra cui i famigerati Bitcoin. Ma le tecniche ed i concetti sono tuttavia generali e consentono di realizzare anche altro.

Nel seguito sono riportate le informazioni di interesse organizzate in paragrafi specifici: Introduzione, Blockchain, Cryptovalute, Blockchain Databases, Algoritmi, ...

Introduzione

I database distribuiti sono da sempre una frontiera tra le piu' interessanti da esplorare. Un esempio storico e' il DNS (Domain Name System) che altro non e' se non un database distruibuito delle associazioni tra indirizzi IP e domini Internet. Molto piu' recenti sono il teorema di CAP, i database noSQL, l'algoritmo di Paxos, ...

Una forte attenzione mediatica hanno ricevuto di recente i database basati sulle Blockchain. In questa paginetta cerchiamo di accennare alle tecnologie su cui si basano. Dal punto di vista tecnico Nihil sub sole novum... ovvero non c'e' nulla di nuovo, ma solo un uso intelligente delle tecnologie disponibili che ha consentito la creazione e la forte forte crescita dei database blockchain a cui abbiamo assistito in questi ultimi anni.

Blockchain

L'idea di base di una base dati blockchain e' che il database contiene tutte le transazioni avvenute. Tutto qui.

Il blockchain e' un database costituito da blocchi di transazioni. Ogni transazione contiene un timestamp, ogni blocco contiene l'hash del blocco precedente. L'intera catena e' accessibile a tutti i server, tipicamente pubblici, garantendo cosi' la completa trasparenza su ogni operazione e le transazioni non hanno costi (o quasi).

In realta' la generazione di un nuovo blocco richiede complessi calcoli di crittografia. Tale attivita' viene chiamata mining poiche' chi "scava" viene rimborsato con la criptomoneta stessa. I costi sono comunque di ordini di grandezza inferiori rispetto a quelli usuali.
La tecnica utilizzata per proteggere i blocchi e' quella degli Hash Tree [NdE chiamati anche Merkle tree] in cui un blocco padre mantiene un hash di tutti i blocchi figli. Le funzioni di crittografia sono utilizzate per impedire la modifica dei dati e non per nascondere le informazioni, almeno e' cosi' nella maggioranza delle implementazioni. Chiunque e' in grado di risalire a tutte le transazioni occorse e tra quali account.

Una base dati in blockchain e' adatta a diversi utilizzi ma fino ad adesso la tecnologia blockchain e' stata utilizzata sopratutto... per i soldi!

Criptovalute su Blockchain

La tabella seguente riporta alcune cryptovalute basate su blockchain.

Nome Icona Sigla Data Note
BitcoinBitcoin logo BTC2009 E' la prima criptovaluta per creazione, diffusione e notorieta'. Creata dal fantomatico Satoshi Nakamoto e' l'implementazione della prima blockchain: il bin-log delle transazioni, distribuito e criptato. Tecnicamente e' limitata a 21 milioni di Bitcoin ed, ad oggi [NdA 2018-01], ne e' stato estratto (mining) circa l'80%.
Litecoin xxx logo LTC2011 Utilizza un algoritmo di generazione dei blocchi di velocita' superiore a quello dei Bitcoin.
Ripple xxx logo XRP2012 Non richiede il mining e le sue transazioni sono piu' veloci. E' la criptomoneta piu' apprezzata dal mondo finanziario tradizionale.
Dash Dash logo DASH2014 Difficilmente tracciabile.
Monero xxx logo XRM2014 Sicuro, privato e non rintracciabile. Ed anche famigerato poiche' utilizzato da molti bot di mining...
EthereumEthereum logo ETH2015 A differenza dei Bitcoin non ha un limite strutturale al circolante ma sopratutto si distingue per la possibilita' di effettuare Smart Contract. Gli Smart Contract sono programmi realizzati con in linguaggio Solidity che vengono eseguiti in una sandbox e sono memorizzati sulla Blockchain.
Zcash Zcash logo ZEC2016 Informazioni pubbliche ma... crittografate.
Bitcoin Cashxxx logo BCH2017Nato da un fork da Bitcoin con alcune differenze tecniche (eg. Blocksize 8MB).

La tabella e' necessariamente incompleta: dato il forte interesse in moltissimi cercano di entrare in questo nuovo mondo.

Le criptovalute valute presentano diversi punti critici: sono utilizzate spesso per traffici illeciti (eg. ricatti ransomware), il mining richiede una notevole quantita' di energia, sono a forte rischio di truffe piramidali, sono possibili errori negli algoritmi, le quotazioni sono spesso soggette a bolle speculative o a cadute repentine, ...

Nonostante questi rischi le criptomonete stanno consolidando sempre di piu' il loro ruolo nel complesso mondo finanziario.

Blockchain Databases

Un blockchain database ha una struttura particolare poiche' e' costituito da una serie di blocchi che riportano tutte le transazioni occorse. Tuttavia, a parte l'utilizzo dei puntatori e della crittografia per garantire l'immutabilita' dei dati, non ci sono grandi differenze concettuali rispetto ai classici bin-log, redo-log, wal, ... che tutti conoscono.

La vera differenza dei Blockchain Databases e' che tutto il loro contenuto e' pubblico. Ovvero non esiste un solo nodo centrale che mantiene la base dati e ne assicura la consistenza ma la base dati e' decentralizzata e mantenuta su molteplici nodi (tipicamente migliaia).
Quando viene eseguita una nuova transazione questa viene controllata e distribuita su tutti i nodi.

La struttura di una base dati blockchain e' fissa: non e' possibile creare nuove strutture dati, definire utenti, ... Tutti i nodi utilizzano gli stessi algoritmi e spesso lo stesso programma nella stessa versione, per mantenere il Database [NdA in realta' sono possibili fork che richiedono pero' una procedura complessa e la partecipazione coordinata della maggioranza dei nodi].

La distribuzione dei dati e' una forza dei Blockchain database ma e' anche una loro debolezza: il grande numero di nodi da aggiornare li rende inutilizzabili quando il numero di transazioni diventa troppo elevato. I blockchain database sono quindi utilizzabili solo in contesti ben precisi in cui la distribuzione e la trasparenza dei dati diventano un valore aggiunto: transazioni economiche, verifica di identita', sistemi di votazione, ...

Curve ellittiche (TL;DR)

Sono basate sulle curve ellittiche le piu' recenti funzioni di crittografia utilizzate per le Blockchain. La teoria degli algoritmi di crittografia e' complessa e richiede basi matematiche appropriate, quindi non e' il caso di approfondirla... Ma lo facciamo lo stesso!

Gli algoritmi di cifratura si basano su un'idea fondamentale: calcoli facili da fare ma difficili da disfare!
L'esempio classico e' quello della moltiplicazione di due numeri, operazione facile e veloce da fare (si impara alle scuole elementari) che per essere disfatta richiede l'operazione di scomposizione in fattori primi (che si impara alle scuole medie). I matematici parlano di funzioni e di funzioni inverse... La scomposizione in fattori primi non e' complessa (gia' gli antichi Greci la conoscevano e ne avevano scoperto alcuni algoritmi fondamentali) ma richiede molto tempo con numeri di grandi dimensioni perche' in pratica bisogna provarle tutte.
In realta' l'utilizzo dei numeri primi e la moltiplicazione non e' solo un esempio di funzione... e' utilizzata dai principali algoritmi di cifratura e di scambio di chiavi!

EC Per i blockchain pero' e' stata utilizzata una nuova classe di algoritmi basati sulle curve ellittiche [NdE introdotte nel 1985 da Neal Koblitz, Victor S. Miller]. A dispetto del nome le curve ellittiche non contengono ellissi ma si tratta di una funzione cubica della forma:
  y2=x3+ax+b

Si tratta di curve simmetriche rispetto all'asse delle ascisse da cui vanno escluse quelle con punti singolari, cosa che avviene quando il discriminante 4a3+27b2 ≠ 0.
In questo modo la caratteristica geometrica di queste curve e' che dati due punti sulla curva la retta passante tra essi tocchera' la curva in uno ed un solo altro punto.

EC Sfruttando tale caratteristica possono essere definite le operazioni di somma e di moltiplicazione per uno scalare. La somma C di due punti A e B e' data dalla riflessione dell'intersezione della retta passante A e B. La somma di un punto con se stesso, che se applicata piu' volte corrisponde alla moltiplicazione per un numero scalare, e' definite dalla riflessione dell'intersezione della tangente passante per il punto. A dirlo sembra difficile ma graficamente e' banale (cfr. immagine a sinistra).

EC La curva mantiene le stesse caratteristiche matematiche se applicata ad un campo finito di interi limitati a P, dove P e' un numero primo. Semplicemente le operazioni avvengono in modulo P. La rappresentazione non sara' piu' quella di una curva ma di una serie di coppie punti su una matrice PxP. Calcolare le radici in modulo non e' banale... ma eseguire il quadrato di y e' semplice e quindi semplici sono i calcoli per ottenere i punti della curva ellittica su campo finito.

La curva ellitica utilizzata per i Bitcoin, la piu' nota delle criptovalute, e' la secp256kl che utilizza a=0 b=7 su un campo finito basato su un numero primo di 256 cifre: y2=x3+7 su F2256-232-977. Ecco la rappresentazione della somma su tale funzione nel campo reale e su F97 [cfr. ECC gentle introduction]:

EC EC

Oltre che per le Blockchain gli algoritmi basati sulle curve ellittiche sono utilizzate anche su altri protocolli di sicurezza (eg. ECDH: Elliptic curve Diffie-Hellman) perche', a partita' di lunghezza della chiave, risultano notevolmente piu' complessi da attaccare rispetto agli algoritmi basati sulla fattorizzazione dei numeri primi. Una chiave EC a 228 bit corrisponde ad una chiave RSA a 2380 bit (livello di sicurezza: earth water security, ovvero serve la stessa energia necessaria a far bollire tutta l'acqua della terra). Di converso la rottura di una chiave RSA a 228 richiede solo il livello teaspoon water security.
Finalmente e' chiaro perche' alla macchinetta del CED il te viene sempre cosi' bollente!

Varie ed eventuali

Wikipedia!


Titolo: Blockchain Databases
Livello: Medio (2/5)
Data: 1 Gennaio 2018
Versione: 1.0.0 - 1 Gennaio 2018
Autori: mail [AT] meo.bogliolo.name