24
Sab, Ott
181 New Articles

Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Nelle prime due lezioni abbiamo detto che una blockchain è un registro condiviso che non si può modificare di nascosto. Ma come si ottiene, in pratica, un registro "a prova di matita"? La risposta sta in due ingredienti: un'impronta digitale matematica chiamata hash e il modo in cui i blocchi vengono agganciati uno all'altro. Niente paura: si capisce benissimo anche senza formule.

Corso "Blockchain per nerd" – Lezione 3 di 12

L'hash: l'impronta digitale dei dati

Un hash è il risultato di una funzione matematica che prende qualsiasi contenuto, una parola, un libro intero o un film, e lo trasforma in una sequenza di lettere e numeri sempre della stessa lunghezza. È come un'impronta digitale: identifica quel contenuto in modo praticamente unico.

Vediamo un esempio reale, con la funzione SHA-256 usata da Bitcoin:

  • ciao diventa b133a0c0e9bee3be20163d2ad31d6248db292aa6dcb1ee087a2aa50e0fc75ae2
  • Ciao (con la C maiuscola) diventa 25c73520e69f4bf229811e8e46ffe7d80471544b9bee15ed25044b86be4115ad
  • ciao! (con il punto esclamativo) diventa eefe92e093e75943262d57ef18211898f0b29f2f80c4d0e5bee36a63bdb13c30

Basta cambiare una sola lettera perché l'impronta cambi completamente. È proprio questa la proprietà che ci serve.

Le quattro "regole d'oro" dell'hash

Una buona funzione di hash ha quattro caratteristiche:

  1. È sempre uguale: lo stesso contenuto produce sempre la stessa impronta, su qualsiasi computer del mondo.
  2. È velocissima da calcolare: un computer ne produce milioni al secondo.
  3. Non si torna indietro: dall'impronta è impossibile ricostruire il contenuto originale, così come da un'impronta digitale non si ricostruisce la persona.
  4. Un minimo cambiamento la stravolge: come abbiamo visto con "ciao" e "Ciao", non c'è alcuna somiglianza tra le impronte di due contenuti quasi uguali.

Un'applicazione quotidiana? Quando scaricate un programma, alcuni siti affiancano al file il suo hash: calcolandolo sul file scaricato potete verificare che sia identico all'originale e non sia stato manomesso.

🤓 Per i più curiosi: quanto è difficile "falsificare" un hash?

SHA-256 produce un numero di 256 bit, scritto con 64 caratteri esadecimali (le cifre da 0 a 9 e le lettere da a ad f). Le impronte possibili sono circa 1077, un numero vicino a quello stimato degli atomi dell'universo osservabile. Trovare due contenuti diversi con la stessa impronta, o un contenuto che produca un'impronta scelta in anticipo, richiederebbe con i computer attuali tempi enormemente più lunghi dell'età dell'universo. Potete provare voi stessi: su Linux e Mac basta il comando shasum -a 256, su Windows certutil -hashfile nomefile SHA256.

Il blocco: una pagina del registro

Un blocco è come una pagina del quaderno dei conti. Contiene essenzialmente tre cose:

  • i dati: per esempio l'elenco dei pagamenti avvenuti negli ultimi minuti;
  • l'hash del blocco precedente: l'impronta della pagina che viene prima;
  • il proprio hash: l'impronta calcolata su tutto il contenuto del blocco, compreso l'hash del precedente.

Ogni blocco contiene inoltre la data e l'ora in cui è stato creato, così il registro ha un ordine cronologico preciso.

La catena: perché non si può barare

Ora mettiamo insieme i pezzi. Il blocco 2 contiene l'impronta del blocco 1, il blocco 3 contiene l'impronta del blocco 2, e così via. Ogni pagina "ricorda" quella precedente.

Supponiamo che qualcuno voglia modificare un pagamento scritto nel blocco 100, per esempio cambiare "Anna paga 10 a Bruno" in "Anna paga 1.000 a Bruno". Cosa succede?

  1. Il contenuto del blocco 100 cambia, quindi cambia anche la sua impronta.
  2. Il blocco 101 conteneva la vecchia impronta del blocco 100: ora non corrisponde più. La catena è spezzata.
  3. Per rimediare, l'imbroglione dovrebbe ricalcolare il blocco 101, poi il 102, poi il 103, fino all'ultimo.
  4. E dovrebbe farlo su più della metà delle copie del registro sparse nel mondo, più in fretta di tutti gli altri che nel frattempo continuano ad aggiungere blocchi onesti.

Nella lezione 5 vedremo che le blockchain pubbliche rendono questo ricalcolo volutamente lentissimo e costoso. Il risultato è che più un blocco è vecchio, più è sicuro: per modificarlo bisognerebbe rifare tutto il lavoro che è venuto dopo.

Il primo anello: il blocco genesi

Ogni catena ha un primo anello, che non ha un blocco precedente a cui agganciarsi. Si chiama blocco genesi. Quello di Bitcoin fu creato il 3 gennaio 2009 e contiene un messaggio nascosto: il titolo in prima pagina del quotidiano britannico The Times di quel giorno, "Chancellor on brink of second bailout for banks", cioè "Il Cancelliere sull'orlo di un secondo salvataggio per le banche". Un modo per fissare la data e, secondo molti, una frecciata al sistema finanziario in piena crisi.

🤓 Per i più curiosi: l'albero di Merkle

Un blocco di Bitcoin può contenere migliaia di transazioni. Per non dover rileggere tutto, le transazioni vengono riassunte con un albero di Merkle: si calcola l'hash di ogni transazione, poi si uniscono a coppie e si calcola l'hash di ogni coppia, poi si uniscono quelli a coppie, e così via, fino a ottenere un'unica impronta finale, la "radice". Basta questa radice nell'intestazione del blocco per garantire che nessuna transazione sia stata toccata. Il vantaggio pratico è che un telefono può verificare che un pagamento sia incluso in un blocco scaricando solo pochi hash invece dell'intero blocco.

📌 Ricapitolando

  • L'hash è un'impronta digitale matematica: identifica un contenuto e cambia completamente se il contenuto cambia anche di poco.
  • Dall'hash non si risale al contenuto originale.
  • Ogni blocco contiene i dati, la data e l'impronta del blocco precedente.
  • Modificare un blocco vecchio spezza la catena: bisognerebbe ricalcolare tutti i blocchi successivi, sulla maggioranza delle copie.
  • Il primo blocco si chiama blocco genesi; quello di Bitcoin risale al 3 gennaio 2009.

Nella prossima lezione vedremo come si dimostra che un pagamento l'abbiamo autorizzato proprio noi: chiavi private, chiavi pubbliche e firme digitali.

Il commento di PINET

Gli hash non sono un'invenzione della blockchain: li usiamo da decenni per verificare i file scaricati, proteggere le password nei database e controllare l'integrità dei backup. Proprio quest'ultimo uso è un buon esempio per chi gestisce dati aziendali: un sistema di backup serio verifica con gli hash che le copie siano identiche agli originali. La genialità della blockchain sta nell'aver concatenato queste impronte, trasformando un vecchio strumento della sicurezza informatica nella base di un registro che nessuno può riscrivere da solo.