在此文中
Il blockchain è una nuova tecnologia che si è sviluppata negli ultimi decenni e sta prendendo piede in diversi ambiti per garantire l’autenticità e l’integrità dei dati in forma elettronica. Il percorso che ha portato alla nascita e uso del blockchain è lungo. È però solo a partire dal 2008 che questa tecnologia ha preso il nome di blockchain.
Qui si cerca di dare una visione degli elementi storici principali legati al tema. Ci sono però diverse opinioni al riguardo e si prega di usare il feedback qui in basso per suggerire precisazioni o cambiamenti.
Invenzione degli hash crittografici
Elemento centrale del blockchain sono gli hash crittografici.
- Nell'articolo Hans Peter Luhn and the Birth of the Hashing Algorithm sono esposti i primi passi nella nascita del concetto di hash.
- Published in 1976 by Diffie and Hellman, this is the earliest publicly known work that proposed the idea of a private key and a corresponding public key.
- Nel 1979, quando Ralph C. Merkle brevetta le funzioni crittografiche di hash.
- Nel 1991, Stuart Haber and W. Scott Stornetta, in How To Time-Stamp a Digital Document, indicano come usare gli hash crittografici per securizzare und documento.
Uso degli hash crittografici per proteggere dati
- Ralph C. Merkel inenta la struttura dati che sarà chiamata con il suo nome, Merkle Tree. L’albero di Merkle è una struttura dati ad albero che usa il concatenamento degli hash crittografici per assicurare l’integrità e l’accesso veloce a blocchi di dati.
- L'utilizzo degli hash per firmare i documenti e garantirne l'integrità si diffonde velocemente nella comunità scientifica.
- Nel 1991 Stuart Haber and W. Scott Stornetta, introducono un sistema di concatenazione di hash, che vengono pubblicati settimanalmente con una pubblicità sul New York times, così da rendere immutabile la sequenza.
- Nel 2000 Stefan Konst presenta il suo lavoro di diploma, Sichere Log-Dateien auf Grundlage kryptographisch verketteter Einträge (File di log sicuri basati su elementi concatenati criptograficamente).
Uso del blockchain in contabilità
Domenico Zucchetti, giurista e programmatore, creatore di Banana Contabilità, alla fine degli anni 1990 comincia a riflettere su come usare gli hash crittografici per certificare un giornale contabile a cui sono continuamente aggiunti dei nuovi movimenti. Sviluppa progressivamente l'idea di creare degli hash per i singoli movimenti e concatenarli fra di loro, creando degli hash che chiama progressivi.
- Nel 2002 deposita il brevetto "Method of certifying data containing a sequence of transactions" (US Patent No. 7,020,640).
- Il sistema certificazione è concepito per essere applicato a delle collezione di dati già esistenti.
Per ogni movimento contabile viene calcolato un hash crittografico che include l'hash del movimento precedente. Gli hash concatenati uno con l'altro così che l’hash di un movimento certifica il contenuto della transazione e anche l’insieme del giornale. Questa struttura permette di aggiungere dei nuovi movimenti, mantenendo l’integrità degli hash crittografici dei movimenti esistenti.
Il sistema è concepito per certificare base dati dove la sequenza dei record può anche cambiare (come i database SQL). I movimenti sono completati con un numero progressivo e un hash crittografico, calcolato anche tenendo conto del hash del record precedente. Il numero progressivo serve sia per la verifica degli hash sia per conformarsi a normative contabili nazionali che richiedono che i movimenti siano numerati progressivamente.- Securing acccounting Data (2002, pdf in inglese).
Introduzione alla tecnologia blockchain utilizzata nel software in Banana Contabilità.
- Securing acccounting Data (2002, pdf in inglese).
- Il metodo viene sottoposto a degli esperti per verificare la conformità alle normative di legge in Svizzera e Germania. Nota storica le nuove versioni del software usano il metodo di Hash SH256 e non più l'MD5 citato nei documenti.
- Ernst&Young verifica conformità con le norme svizzere (pdf in lingua tedesca)
Vedi: Ordinanza sulla tenuta e la conservazione dei libri di commercio del 24 aprile 2002. - Erns&Young verifica conformità con le norme germaniche (pdf in lingua tedesca).
- Ernst&Young verifica conformità con le norme svizzere (pdf in lingua tedesca)
- Il software Banana Contabilità introduce il sistema di hash crittografici concatenati per assicurare l’integrità dei movimenti contabili. L'obiettivo è quello di mettere avere un sistema che offre la facilità d'uso e la possibilità di modificare i movimenti e però anche il massimo grado di sicurezza e conformità con le normative di legge.
Prima avviene l'inserimento dei dati contabili e successivamente, con un comando apposito, si procedere all'attribuzione degli hash crittografici.
Altri impieghi del blockchain
L'utilizzo di hash crittografici concatenati, comincia ad essere usato in diversi ambiti.
- Nel 2005 Linus Torwald implementa il software Git, per la gestione del sorgente, dove i diversi blocchi di dati sono concatenati con degli hash crittografici.
Bitcoin e la nascita del termine blockchain
Nel 2008 il "fantomatico" Satoshi Nakamoto inventa la criptovaluta del Bitcoin basata su un giornale distribuito, dove ogni blocco di transazioni è concatenato crittograficamente con il precedente. Nel documento che definisce il funzionamento del sistema Bitcoin, si parla espressamente di blocchi di dati che sono concatenati. Si comincerà a usare il termine blockchain. Fino a quel momento si pensava che l'unico modo per preservare informazioni in formato digitale fosse quelli di custodirli in sistemi informatici inaccessibili. Il Bitcoin fa invece capire che è possibile custodire in modo sicuro dei valori monetari importanti, anche se i dati sono lasciati sulla rete. Il Bitcoin è un sistema molto sofisticato che impiega e combina diverse tecnologie: blockchain, indirizzi crittografici, giornale distribuito, consenso distribuito, prova del lavoro. ecc. In molte definizione del blockchain queste diverse tecnologie non sono separate, per cui il termine blockchain viene usato con significati più estesi, come sinonimo per giornali distribuiti, sistema di gestione dei valori, e anche per moneta virtuale.
Impieghi del blockchain
Il Blockchain viene utilizzato in vari modi. In primo luogo, viene impiegato nella conservazione di dati storici in crescita, di cui contenuti non devono essere modificati. L’esempio tipico è quello del giornale contabile.
In secondo luogo, le collezioni di dati blockchain sono particolarmente ideali per la condivisione dei giornali distribuiti (ad esempio quello dei Bitcoin) poiché riducono al minimo la necessità del trasferimento dei dati. È possibile verificare che i dati sono uguali semplicemente scambiandosi gli hash.
In questo modo si può sapere fino a quale numero di blocchi le due collezioni sono identiche.
Inoltre, per mettere in pari i contenuti è sufficiente trasmettere i dati dei blocchi mancanti.
Il blockchain in Bitcoin
Nel sistema Bitcoin gli ordini di trasferimento vengono raccolti dai minatori (miners), raggruppati e aggiunti in blocchi al giornale con una cadenza media di dieci minuti. Ogni blocco ha un identificatore che è il sigillo (hash) calcolato sul contenuto del blocco, all’interno del quale vi è anche l’identificatore del blocco precedente. Il sigillo del blocco è calcolato anche sul sigillo precedente, per cui diventa un sigillo progressivo, che serve a verificare l’integrità di tutti i dati dall’inizio fino e compreso il blocco stesso.
Qui di seguito è presentato uno schema molto sintetico di come è strutturato il giornale del Bitcoin.
I blocchi formano una catena criptografica, che sarà valida solo se i contenuti sono gli stessi. Se un blocco viene modificato, l’hash sarà diverso. Il blocco successivo risulterà scollegato dal precedente e la catena crittografica risulterà interrotta. L’esistenza della catena è la prova che i dati sono integri.
Nel sistema Bitcoin il sigillo viene calcolato quando il blocco di dati viene composto, per cui il blockchain è parte della struttura dati. Se il contenuto cambia, cambia anche l’identificativo del blocco e tutti gli identificatori dei blocchi successivi. Nel giornale del Bitcoin il blockchain non può essere rimosso, perché il blocco perderebbe l’identificatore e verrebbe meno anche la sequenza. In Bitcoin la successione dei blocchi viene ricostruita partendo dall’ultimo, andando al precedente e poi al precedente, fino a risalire al primo blocco. Questo sistema non è molto congeniale per le persone, per cui ogni blocco viene anche individuato con il numero di blocco progressivo, partendo dal primo che è indicato con lo zero. Nel sistema Bitcoin il numero di sequenza è chiamato altezza.
Il sistema Bitcoin richiede che i sigilli dei blocchi debbano obbligatoriamente iniziare con un certo numero di zeri. Quando si calcola un hash è molto raro che risultino tanti zeri iniziali. Per ottenere il sigillo con il numero di zeri voluto si deve quindi aggiungere un numero (nonce) al contenuto, che in combinazione con gli altri dati darà il sigillo con il numero di zeri iniziali necessari. Non potendo costruire il contenuto partendo dal sigillo, si deve calcolare il sigillo. Si calcola l’hash con il nonce a zero e poi si ripete l’operazione aumentando il nonce di uno, fino che non si trova il sigillo che ha il numero di zeri richiesto. Si richiedono miliardi e miliardi di tentativi e computer molto potenti per riuscire a calcolare il sigillo con il numero di zeri richiesto in tempi brevi.
Il Bitcoin è un sistema aperto dove tutti possono inviare degli ordini di trasferimento (le transazioni). Ci sono operazioni lecite, ma ovviamente anche tentativi di spendere più volte il denaro. I minatori (miners) hanno il compito di verificare le transazioni, svolgono pertanto la funzione di notai. Sono loro che preparano i blocchi di transazioni da aggiungere al giornale. Raccolgono gli ordini di trasferimento (transazioni) e controllano che questi siano corretti, che la firma digitale sia valida e che siano effettivamente in possesso dei fondi. Assemblano le transazioni verificate in un blocco, aggiungendovi anche un’operazione con cui il minatore si auto-assegna il compenso previsto. Devono poi completare il blocco calcolando il sigillo con il numero di zeri richiesto. Il minatore/notaio più veloce sarà quello con maggiori possibilità di vedere il proprio blocco aggiunto al giornale del Bitcoin e diventare titolare del compenso. Il calcolo del sigillo è quindi un sistema che mette i notai/minatori in competizione per lavorare bene e in modo onesto. Devono calcolare il sigillo molto velocemente. Solo quelli con grandi capacità di lavoro/calcolo (proof of work) riescono a competere.
Il sistema tende a fare in modo che ci vogliano in media 10 minuti per completare un blocco. Se in due settimane la media si abbassa, il software di gestione del Bitcoin rende il lavoro ancora più difficile, aumentando il numero di zeri iniziali richiesti. I sigilli dei primi blocchi del giornale del Bitcoin avevano 8 zeri iniziali, ora se ne richiedono 18. Sono necessarie capacità di calcolo notevoli, che richiedono ingenti investimenti in computer ed energia. I notai sono stimolati a lavorare bene, perché se fanno errori o barano, il loro blocco verrà scartato e tutto il lavoro fatto sarà stato inutile.
Una volta assegnato il nonce, il calcolo dell’hash del blocco avviene quindi in maniera normale e veloce. Anche la verifica dell’integrità dei dati è semplice in quanto si deve semplicemente ricalcolare l’hash dei diversi blocchi. Il fatto che il sigillo debba iniziare con un certo numero di zeri richiede un numero elevatissimo di tentativi per calcolarlo. Questa particolarità del sigillo che inizia con degli zeri rende la procedura di generazione del sigillo più complessa e più difficile da comprendere. Il sistema di calcolo utilizzato in Banana Contabilità è più lineare e il funzionamento più facilmente comprensibile.
Nonostante queste differenze di calcolo, il blockchain di Bitcoin e di Banana Contabilità serve comunque allo stesso scopo, che è quello di avere una sequenza di dati, certificati con i sigilli e la cui integrità può quindi essere verificata.