Come funziona una Blockchain
Daniele Favi è ingegnere informatico, programmatore ed esperto di Blockchain. Per comprarebitcoin.com tiene in esclusiva la sua rubrica personale “Lo Spiegone Informatico”, dove tratta concetti informatici avanzati in maniera semplice e comprensibile anche dai non esperti.
In questo articolo parleremo dei concetti che stanno alla base della blockchain; questi concetti saranno fondamentali per capire temi di cui parleremo nel prossimo articolo come proof-of-work, perché il mining richiede tanta potenza di calcolo e come fanno i dati nella blockchain a diventare immodificabili.
Come funziona la Blockchain?
Alla base di ogni blockchain c’è una funzione matematica chiamata hash che genera un codice lungo 64 caratteri formato da lettere e numeri.
Il codice hash identifica il blocco nella blockchain e ne protegge il suo contenuto.
Il codice hash per un blocco della blockchain è come il codice fiscale per una persona: se in un documento viene falsificata la data di nascita anche il codice fiscale cambia. Nella blockchain succede la stessa cosa: se viene manomesso il contenuto di un blocco cambia anche il suo codice hash.
Che cos’è l’Hash?
L’hash è una funzione matematica che dato un input (come un testo) genera una stringa in output; per lo stesso input la stringa in output non cambia mai. L’hash è una funzione a senso unico: è facile da generare ma, partendo da un codice hash, è molto difficile risalire alla stringa originale.
Facciamo un esempio pratico: questo è il link al mio sito dove puoi trovare il generatore di hash https://www.danielefavi.com/sha256-hash-calculator/
nel campo di testo Data digita “test” e quindi premi il tasto Calculate SHA256 hash. Il codice generato è questo:
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
adesso nel campo di testo Data digita “test.” (aggiungi solo un punto) e premi ancora il tasto Calculate SHA256 hash. L’hash generato è questo:
4ee3df88f682d376531d8803f2ccbee56d075cd248fc300f55dfe8596a7354b7
Con l’aggiunta di un solo un punto, il codice hash di “test” è totalmente diverso dal codice di “test.”. Anche con l’aggiunta di uno spazio, un ritorno a capo o una maiuscola l’hash cambia totalmente, fate una prova!
Calcolare l’hash è facile, ma partendo da un codice hash è difficile risalire alla parola originale. Ad esempio ti sfido a trovare la parola che corrisponde al seguente codice hash:
3866daf66ad5f7e6dbf8c983b06287d7ad254336a172d8f34eb1cb4f25f12b70
Puoi riuscire ad indovinare la parola originale facendo innumerevoli tentativi a caso fino a trovare la parola corrispondente (metodo chiamato brute-force).
Creiamo una semplice blockchain (per capire a che cosa serve l’Hash)
La nostra blockchain contiene informazioni molto semplici: una lista di persone con il loro nome ed età; il nome ed età sono separati da un trattino in questo modo:
- Blocco 1: Giovanna-28
- Blocco 2: Mario-45
- Blocco 3: Paolo-21
- Blocco 4: Clara-67
Ogni blocco deve avere un codice identificativo: questo codice verrà calcolato attraverso hash.
Per formare una catena di blocchi si deve collegare un blocco al suo predecessore: per fare questo ogni blocco deve avere al suo interno il codice identificativo del blocco precedente.
Iniziamo a costruire la nostra blockchain
Iniziamo dal primo blocco: dato che il blocco 1 non ha nessun predecessore metti come hash del blocco precedente uno zero: 0-Giovanna-28
Ora vai sul generatore di hash (link) e calcola l’hash di 0-Giovanna-28; il codice generato è
2739fffebfe125d040de3701c039c891162ab903025989f58781a21f91041e78
Per renderci la vita facile prendi solo le prime 5 cifre di questo codice e mettile all’inizio del blocco 2 (Mario-45); così il contenuto del blocco 2 è 2739f-Mario-45
Vai di nuovo sul generatore di hash e calcolate l’hash di 2739f-Mario-45; l’hash generato è
dcdef06e1936011de4d8f1849406ef8224731da09c9b51db4af5d530305c451b
Prendi ancora solo le prime 5 cifre di questo codice e mettile all’inizio del blocco 3 (Paolo-21) ottenendo così dcdef-Paolo-21.
Ripeti questo procedimento anche per il blocco 3 e 4; la catena formata è la seguente:
Proviamo a manomettere il contenuto di un blocco!
La nostra amica Giovanna cambia l’età da 28 a 25 nel blocco 1; così facendo il contenuto del blocco diventa 0-Giovanna-25 e le prime 5 cifre del nuovo codice hash è fdee7.
Dato che il codice identificativo del blocco 1 è cambiato (prima era 2739f ora è fdee7) si deve aggiornare il codice hash dentro il blocco 2 che fa riferimento al blocco 1. Con questo aggiornamento il contenuto del blocco 2 cambia (ora è fdee7-Mario-45) quindi si deve ricalcolare il codice hash del blocco 2: le prime 5 cifre del codice hash di fdee7-Mario-45 è 77e83.
Il codice hash del blocco 2 è cambiato, quindi cambia anche il contenuto del blocco 3 facendolo diventare 77e83-Paolo-21.
Come avrai intuito, dato che il contenuto del blocco 3 è cambato si deve ricalcolare il suo hash che a sua volta fa cambiare il contenuto del blocco 4 e il suo hash.
Cambiare il contenuto di un blocco invalida l’hash del blocco stesso ed inoltre causa una reazione a catena invalidando tutti i blocchi che seguono fino all’ultimo blocco inserito.
In questo esempio abbiamo visto come è strutturata una blockchain. Nel prossimo articolo vedremo come rendere la blockchain difficile da modificare.
Daniele Favi è ingegnere informatico e programmatore esperto di Blockchain. Per comprarebitcoin.com tiene in esclusiva la sua rubrica personale “Lo Spiegone Informatico” , potete trovare i suoi articoli in lingua inglese su DanieleFavi.com
Articolo precedente
Poloniex Recensione ed opinioni | La guida completa del 2021Articolo successivo
Come fare il mining di Bitcoin?