Blockchain: crittografia e funzioni hash nel dettaglio (seconda parte)

– Dalla rubrica di Gaetano Matarese, “Inside Blockchain” –

Nel quarto articolo della rubrica intitolato “Blockchain: crittografia e funzioni hash nel dettaglio” abbiamo visto nel dettaglio il funzionamento delle catene di blocchi.

Per illustrare le singole funzioni generali della Blockchain ero partito dall’elenco redatto da Lorenzo Foti autore del libro “capire la blockchain”:

  1. Saper dire chi è proprietario di un bene
  2. Difendere le proprietà di un bene
  3. Memorizzare tutte le transazioni
  4. Proteggere i dati
  5. Far avere le informazioni ai registri
  6. Aggiungere le transazioni ai registri
  7. Decidere in caso di non allineamento dei registri quale sia quello con l’informazione corretta

L’ultima volta ci siamo fermati però ad analizzare solo le prime due funzioni ed ho introdotto i concetti di crittografia e procedura hash.

Ho fatto diversi ragionamenti ed esempi per spiegare tutto quindi ti consiglio di riprendere la lettura dell’articolo precedente prima di proseguire.

Ti metto il link qui così hai meno scuse.

Hai già letto/riletto la prima parte o ritieni che proprio non ti serva?

Possiamo proseguire con le altre funzioni.

Ci sono diverse cose da vedere quindi oggi te ne illustrerò solo altre due: la 3 e la 4.

Iniziamo con la memorizzazione delle transazioni.

Memorizzare tutte le transazioni

Se non è la prima volta che senti parlare di tecnologia Blockchain conoscerai i suoi “cavalli di battaglia”, le caratteristiche che l’hanno resa celebre: Immutabilità e trasparenza.

In altre parole ogni dato inserito in una rete Blockchain pubblica è destinato ad essere:

  1. Immodificabile
  2. Trasparente perché visualizzabile da tutti

Ad esempio se vuoi andare a vedere la prima transazione avvenuta in Bitcoin puoi andare nell’explorer della Blockchain e scoprire diversi dati interessanti.

Le transazioni non sono in chiaro ma se hai letto l’articolo precedente sulle funzioni hash dovresti già sapere anche come “tradurre” le informazioni.

Torniamo a noi.

La possibilità di ripercorrere la storia delle transazioni avviene, in primo luogo, grazie alla capacità di una rete Blockchain di memorizzare tutte le transazioni.

Se ogni transazione non venisse accuratamente memorizzata infatti non si potrebbe attribuire l’esatta proprietà di un bene.

Torniamo all’esempio di Bitcoin per rendere più chiaro il concetto.

Abbiamo visto negli articoli precedenti come avviene il passaggio di bitcoin (o altre criptovalute) da un nodo all’altro.

Tutta una questione di addizioni e sottrazioni.

  • A ha 10 BTC; B ha 1 BTC
  • A invia 5 BTC a B; B riceve 5 BTC da A
  • A ha (10 – 5) BTC;B ha (1+5)BTC

Ovviamente tutte le operazioni vengono datate in modo che si sappia esattamente quando A ha smesso di avere 10 BTC e quando B ha iniziato ad avere 6 BTC.

 Grazie alla corretta memorizzazione di tutte queste informazioni chiunque può sapere in qualsiasi momento quanti BTC ha A e quanti ne ha B.

Se in una transazione successiva A provasse a trasferire BTC che non ha la transazione non verrebbe validata.

Se così non fosse A si ritroverebbe a poter spendere BTC che non ha.

Le informazioni quindi devono essere memorizzate:

  • con tutti gli elementi
  • in ordine cronologico (bisogna sempre sapere cosa era successo nella transazione precedente di quel nodo)

Vediamo come fa una blockchain a memorizzare tutte le informazioni in ordine cronologico.

Ad ogni transazione viene attribuito un codice che è l’hash del contenuto della transazione (spiego dettagliatamente cos’è un hash nel precedente articolo) e del codice della transazione precedente.

Allo stesso modo viene attribuito un codice anche ai blocchi.

Ogni blocco quindi sarà costituito da:

  1. Una o più transazioni
  2. “codice blocco”
  3. “referenza al precedente”

Una struttura del genere rende molto molto molto (aggiungete “molto” a piacere) difficile contraffarre una transazione o addirittura un blocco.

Passiamo ora a vedere un’altra funzione:la protezione dei dati.

Proteggere i dati

Abbiamo visto prima che per falsificare i dati si dovrebbero modificare tutti i blocchi della catena e i rispettivi codici di referenza.

In tale modo l’aggiunta o la modifica di un blocco risultano complesse ed estremamente costose(i costi superano di gran lunga i benefici) perché per farle è necessario usare computer potentissimi in grado di fare una miriade di calcoli in brevissimo tempo.

Un ulteriore costo oltre a quello temporale consiste in quello dell’elettricità necessaria ad utilizzare i processori che devono risolvere i cosiddetti “Hash puzzle”, problemi matematici irrisolvibili a mente che utilizzano le funzioni di hash.

Un esempio: trovare quel numero che, aggiunto ai dati del blocco, fa sì che l’hash del totale inizi con 0000.

L’unico modo per trovare una soluzione è modificare il contenuto attraverso l’aggiunta di un numero finché l’hash non restituisce quattro zeri iniziali.

Nell’articolo precedente ti ho fatto vedere come fare l’hash di una frase.

Rifacciamolo adesso immaginando di dover trovare l’hash con quattro zeri iniziali.

Dovremmo prendere la frase”sto leggendo la rubrica Inside Blockchain” e calcolare l’hash.

Per farlo utilizzo il sito www.onlinemd5.com

Il risultato è:

DFBA732CECF7CB219400BDD5A7D811786679A89272962F5583BB529317EB8B83

Soddisfa il nostro desiderio?

No allora dobbiamo modificare il contenuto da sottoporre alla funzione hash.

Non vogliamo stravolgere il senso della frase quindi aggiungeremo un numero alla fine.

” sto leggendo la rubrica Inside Blockchain 1“

Non viene.

Proviamo ad aggiungere un altro numero.

Dovremmo provare ad aggiungere numeri fino a quando non otteniamo il risultato desiderato.

Come vedi una procedura non proprio agevole da fare manualmente.

Altro discorso con un elaboratore che però viene sottoposto ad un dispendio di elettricità incredibile.

Il meccanismo degli hash puzzle sono alla base del mining di criptovalute (quelle che utilizzano la POW, Proof of Work nella validazione dei blocchi).

In quel caso ogni hash puzzle ha un tempo predefinito di risoluzione.

Bitcoin ad esempio ha 10 minuti.

Torniamo al nostro discorso di base e vediamo le caratteristiche di un “hash puzzle”.

Caratteristiche di un “hash puzzle”

Un “hash puzzle” che si rispetti deve avere 3 caratteristiche fondamentali:

  1. Livelli di difficoltà variabili:a seconda del livello di difficoltà varia il tempo di aggiunta del blocco.
  2. Soluzioni facili da verificare una volta trovate:più avanti scoprirai quanto sarà facile verificarla
  3. Un’unica soluzione

A questo punto credo sia più che chiaro che cos’è un problema hash e quali sono le caratteristiche che deve avere.

Manca da trattare un ulteriore aspetto importante:di che cosa viene fatto l’hash?

Elementi su cui fare hash

Al fine di rispettare tutte le caratteristiche di un “hash puzzle” l’hash deve contenere specifici elementi.

Nello specifico sono 5:testo;soluzione;indicazione temporale di pubblicazione del problema;hash blocco precedente;livello di difficoltà del problema.

Come puoi vedere il contenuto dell’hash rende ancora più difficile un’eventuale contraffazione.

Avviamoci alla conclusione.

Conclusione

Prima di lasciarti ti faccio un breve riepilogo di quello che abbiamo visto.

A livello generale l’articolo ha affrontato alcune delle funzioni della tecnologia blockchain.

Nello specifico abbiamo visto come funzionano la memorizzazione e la protezione dei dati.

Per quanto riguarda il primo aspetto è fondamentale una registrazione cronologica di tutti i dati in modo che ogni informazione sia facilmente reperibile.

In merito alla protezione è innegabile l’importanza della procedura di risoluzione degli “hash puzzle”, problemi matematici di complessità variabile che possono essere risolti solo con elaboratori.

Puoi contattarmi per eventuali richieste di chiarimento o approfondimenti.

Nel prossimo articolo continueremo ad analizzare le funzioni rimanenti.

 A presto.

Collegati con Gaetano Matarese su LinkedIn.