In principio fu la rete: capire la blockchain al di là di ogni ragionevole crypto

Dalle reti peer-to-peer al double spending

Genesi — Primo giorno di Bocchi Liliana Mabel

Come già evidenziato nel primo post di questa serie, l’interesse che ruota intorno al mondo delle blockchain è in costante crescita così come la confusione, di termini e concetti in primis, che può scaturire nei neofiti e non solo.

Siamo travolti da tonnellate di informazioni che continuano a spostare il nostro focus da un aspetto all'altro spesso non consentendoci di fermarci per riflettere sui concetti chiave: ma realmente che cosa è la blockchain? Tecnologicamente come nasce? Che problemi può risolvere?

Proprio per rispondere a queste domande e per far sì che il modello tecnologico rappresentato dalla blockchain e il suo impatto sul mondo attuale possa essere compreso indipendentemente dalle cryptovalute, abbiamo deciso di partire dalle basi agganciando un blocco dopo l’altro.

Per evitare il solito errore che consiste nel dire tutto e subito senza lasciare spazio a chi legge di elaborare quanto visto, le basi saranno spalmate su due post di cui questo costituisce la prima parte.

Argomento di questo post saranno i seguenti concetti chiave:

  • Integrità
  • Architetture centralizzate e distribuite
  • Sistemi peer-to-peer e disintermediazione
  • Trust e Integrità in un sistema distribuito
  • Una prima definizione di blockchain
  • Ownership e Witness
  • Ownership e blockchain
  • Double Spending

Integrità

In genere i sistemi software possono essere analizzati dividendoli in strati:

  • Applicativi con il focus sulle necessità dell’utente
  • Implementativi con il focus sul realizzare e risolvere tali necessità

e in aspetti:

  • Funzionali: cosa fa il sistema (visibile agli utenti)
  • Non Funzionali: come le cose sono fatte (invisibile agli utenti)

L’integrità è un importante aspetto non funzionale dei sistemi e coinvolge a sua volta:

  • L’integrità dei dati
  • L’integrità del comportamento
  • La sicurezza

La maggior parte delle falle nei sistemi software, come perdita dei dati, comportamenti strani e accessi non consentiti ai dati sono il risultato della violazione dell’integrità del sistema.

Architetture centralizzate e distribuite

Esistono in generale, escludendo i sistemi ibridi che non sono altro che derivazioni, due categorie di architetture:

  • Centralizzate
  • Distribuite

Quando si costruisce un software, chi lo fa può decidere che “stile” di architettura adottare indipendentemente dagli aspetti funzionali dello strato applicativo. In pratica si può creare un sistema centralizzato piuttosto che distribuito che presenti le stesse identiche funzionalità applicative.

Naturalmente entrambe le architetture hanno vantaggi e svantaggi e soprattutto un modo specifico, dipendente dalla loro natura, di come fare le cose.

In particolare un modo diametralmente opposto di assicurare l’integrità del sistema. Proprio a questo punto entra in gioco la blockchain che è parte dello strato implementativo di un sistema distribuito garantendone uno specifico aspetto non funzionale e cioè il raggiungimento e il mantenimento dell’integrità del sistema.

Teniamo bene in mente la seguente definizione di sistema distribuito:

Un sistema distribuito consiste in un numero di computer indipendenti che cooperano, sfruttando un mezzo di comunicazione, senza che ci sia un elemento centralizzato che faccia da controllore o coordinatore.

Sistemi peer-to-peer e disintermediazione

Tutto ebbe inizio con Napster il sistema di music sharing che vide la luce negli anni 2000 in cui una rete peer-to-peer fatta di utenti, ognuno col proprio computer, si “scambiava la musica” senza l’intermediazione delle Major della music industry.

Un sistema peer-to-peer è un sistema software distribuito formato da nodi, singoli computer, che mettono direttamente a disposizione le loro risorse di calcolo a un altro partecipante la rete. Quando un utente entra a far parte di un sistema peer-to-peer “trasforma” il suo computer in un nodo del sistema acquisendo gli stessi diritti e ruolo degli altri. Sebbene ovviamente esista un concetto di bit-diversità dovuto e rapportato alle risorse che il nodo mette a disposizione, tutti i nodi nel sistema hanno le stesse capacità e responsabilità. Da qui tutti i computer che fanno parte di una rete peer-to-peer sono sia produttori che consumatori di risorse.

Le potenzialità dei sistemi peer-to-peer sono mostruose! Qualsiasi industria che opera da intermediario tra produttori e consumatori di beni digitali e/o servizi può essere sostituita da un sistema peer-to-peer.

Non pensiamo solo al settore finanziario con le immancabili crypto ma guardiamoci intorno: certificati, patenti di guida, carte di identità, certificazione della qualità di un prodotto…

Il vantaggio maggiore di un sistema così realizzato rispetto al classico sistema centralizzato è che essendoci interazione diretta tra “le parti in causa” di un determinato contratto, senza la necessità di un intermediario, tale interazione/scambio prende meno tempo e costa molto meno.

Il processo che “fa fuori” l’intermediario, conosciuto anche come disintermediazione, è considerato una seria minaccia da tutte quelle compagnie che agiscono da intermediario appunto in tutti i rapporti commerciali e non della vita quotidiana.

La relazione tra un sistema peer-to-peer e la blockchain è che quest’ultima è il mezzo per raggiungere e mantenere l’integrità: un fattore importantissimo se si vuole sostituire un sistema centralizzato con uno distribuito e soprattutto senza intermediario.

Trust e Integrità in un sistema distribuito

Trust e Integrità sono due facce della stessa medaglia. L’integrità è l’aspetto non funzionale di un software che ne indica la sicurezza, la completezza, la consistenza, la correttezza e l’assenza di eventuali errori. Trust, fiducia, è più un aspetto che riguarda l’uomo, e che consiste nel fidarsi di qualcuno o qualcosa senza “prove evidenti”.

In rapporto a un sistema peer-to-peer ciò sta a significare che le persone continueranno a contribuire al sistema se credono in esso e se la continua interazione con quest’ultimo conferma e rafforza la fiducia. L’integrità è dunque necessaria per far sì che le aspettative degli utenti vengano confermate e di conseguenza rafforzano la fiducia.

Se infatti la fiducia in un sistema non viene confermata a causa di mancanza o perdita di integrità questo porterà via via all'abbandono degli utilizzatori e di conseguenza alla fine del sistema.

Mantenere l’integrità in un sistema peer-to-peer dipende da vari fattori di cui i più importanti, che rappresentano anche le migliori condizioni, sono:

  • Conoscenza del numero dei nodi
  • Conoscenza dell’attendibilità dei nodi

A queste condizioni mantenere l’integrità è davvero semplice: la vera sfida consiste nel mantenerla nelle peggiori delle condizioni.

E’ proprio questo il problema che la blockchain risolve.

Mantenere l’integrità in un sistema peer-to -peer che consiste in un numero sconosciuto di nodi di cui non si conosce a priori l’attendibilità.

Una prima definizione di blockchain

Sicuramente l’uso del termine blockchain è ambiguo e può assumere differenti significati e valori a seconda del contesto cui ci si riferisce o legati alla sensibilità di chi tratta l’argomento facendone emergere un aspetto piuttosto che un altro.

In genere col termine blockchain può essere indicato:

  • Una struttura dati
  • Un algoritmo
  • Un insieme, suite, di tecnologie
  • Un gruppo di sistemi peer-to-peer con un’area applicativa condivisa

Dunque indicheremo con il termine blockchain una suite di tecnologie che sfruttando algoritmi e strutture dati in seno a un gruppo di sistemi peer-to-peer garantisce l’integrità in una specifica e condivisa area applicativa. Prima fra tutte la gestione della proprietà — ownership -.

Un pò più formalmente:

La blockchain è un sistema peer-to-peer di ledgers, libri mastri anche se in Italiano rende male, che utilizza un software, un algoritmo, che negozia informazioni tra blocchi, ordinati e connessi, garantendo l’integrità attraverso la crittografia e “accorgimenti” di sicurezza.

OwnershipWitness

Proprietà e testimonianza in italiano. Cerchiamo di capire di cosa si tratta con un semplice esempio.

Pensiamo di entrare in un supermercato con una borsa in cui all'interno avevamo una mela. Compriamo delle altre cose e ci avviamo alla cassa. Poggiamo sul nastro tutte le altre cose eccetto la mela, che è già nostra. Il cassiere si accorge però che in fondo alla borsa è rimasta appunto la mela che è esattamente dello stesso tipo di quelle vendute nel supermercato. Cosa penserà in quel momento? Probabilmente che abbiamo rubato la mela. Se non ci fossero telecamere e tu fossi l’unico cliente del supermercato in quel momento come faresti a dimostrare che la mela era già tua e che non l’hai rubata?

Probabilmente in questo caso specifico “basterebbe” dimostrare la propria innocenza, ma si tratterebbe solo di essere sollevato dal sospetto di essere un ladro e non di una prova di essere realmente il proprietario della mela.

La cosa migliore sarebbe avere a disposizione qualcuno che possa testimoniare che tu eri già il proprietario della mela prima di entrare al supermercato. Magari potresti ricordare il posto dove in precedenza avevi comprato la mela e quell'impiegato potrebbe testimoniare in tuo favore. Dovrebbe però essere in grado di:

  • Ricordare la mela che ti ha venduto
  • Identificare la mela nella tua borsa con quella che ti ha venduto
  • Dovrebbe identificarti esattamente come la persona cui ha venduto quella specifica mela

Da tutto ciò si comprende che l’avere un testimone può essere d’aiuto ma averne più di uno, indipendenti, sarebbe molto meglio e convincerebbe chi ti accusa della tua definitiva innocenza e proprietà.

Questo punto è estremamente importante: più testimoni indipendenti hai a disposizione che possano testimoniare lo stesso fatto, più alte saranno le probabilità che il fatto possa essere ritenuto vero.

Questa idea costituisce uno dei concetti più importanti della blockchain.

Ritornando a noi, sono dunque tre gli elementi che costituiscono la prova di ownership:

  • L’identificazione del proprietario
  • L’identificazione dell’oggetto posseduto
  • Un collegamento fra proprietario e oggetto posseduto

In genere identifichiamo una persona dalla carta di identità o da un certificato attendibile, un oggetto da un certificato di produzione o da un numero di serie. Questi documenti non cambiano una volta che sono stati creati perché, in genere, le persone e gli oggetti non cambiano.

Il collegamento fra il proprietario e l’oggetto è in genere effettuato, iscritto, con un libro mastro, ledger, o registro. Questo documento non resta immutato una volta creato perché va aggiornato a ogni trasferimento di proprietà per far si che la sua validità come strumento per dimostrare la reale appartenenza -ownership- rimanga immutata.

L’importanza di avere un ledger sempre aggiornato ha fatto si che venissero creati specifici enti che li gestissero: più alto è il valore dell’oggetto più è probabile che esista un ente regolato dai governi che certifichi la proprietà di tale oggetto.

Molti di questi registri sono pubblici e chiunque può effettuare delle ricerche per verificare l’ownership di un determinato bene.

Verificare la proprietà di un oggetto dunque quando tali registri sono pubblici è davvero molto semplice. La trasparenza è alle basi di una efficace dimostrazione di proprietà (lettura del registro). D’altro canto il trasferimento di proprietà non è appannaggio di tutti ma solo di determinati enti giuridici che operano in sicurezza. Dunque la privacy è alla base del trasferimento di proprietà (scrittura del registro).

I concetti di trasparenza/privacy, dimostrare/trasferire la proprietà, leggere/scrivere sul registro si ritrovano tutti sulla blockchain che assume dunque la forma di gigantesco registro distribuito peer-to-peer che può essere letto da chiunque.

Ownership e blockchain

Una testimonianza sotto forma di un registro -ledger- regolato dai governi è la chiave per verificare/chiarire la proprietà di un determinato bene.

Cosa accadrebbe se tale registro si danneggiasse o andasse distrutto? Se qualcuno responsabile dell’aggiornamento commettesse un errore, in buona o cattiva fede?

Se una di queste situazioni si verificasse il registro non rispecchierebbe più la realtà.

Il problema di avere un solo registro è molto simile a quello di avere un solo testimone già visto in precedenza e può essere “risolto” nello stesso identico modo.

Piuttosto che mantenere un unico registro che può essere in ogni caso manomesso, pensate alla base di dati unica anche se distribuita e di proprietà del committente nei rapporti di fornitura delle supply chain, potrebbe essere utilizzato un sistema peer-to-peer di registri che dimostrano la proprietà usando la “versione della realtà” che la maggioranza dei nodi concorda.

Vediamo adesso il collegamento tra tutti questi concetti e la blockchain:

  • Un singolo registro utilizzato per mantenere le informazioni relative all’ownership può essere visto come un singola struttura dati della blockchain che risiede su un nodo del sistema peer-to-peer.
  • L’algoritmo della blockchain, il consenso, è responsabile del consentire ai singoli nodi di arrivare a una versione consistente della dimostrazione di proprietà sulla quale è poi basato il verdetto finale.
  • L’integrità consiste nel creare dichiarazioni vere che riguardino l’effettiva proprietà.
  • La crittografia è necessaria per garantire la sicurezza.

In un software in genere il concetto di sicurezza può essere riassunto in questi tre passi:

  • Identificazione
  • Autenticazione
  • Autorizzazione

L’identificazione indica il fatto che qualcuno fornisce un nome o qualcos'altro , identificativo, che può essere usato per identificarlo.

L’autenticazione serve a prevenire il fatto che qualcuno possa dire di essere qualcun’altro. Significa provare di essere realmente chi si dice di essere. E’ importante che la prova esibita sia univocamente collegata a chi la presenta (foto, impronte, ecc..).

L’autorizzazione indica l’accesso alle risorse specifiche di una determinata identità. E’ il risultato di autenticazione andata a buon fine una volta provata l’identità dichiarata durante il passaggio di identificazione.

Double Spending

Un esempio può aiutarci a introdurre il problema.

Immaginiamo che Alice voglia vendere a Bob un Rolex. Il trasferimento di proprietà è documentato su un registro, nodo, del sistema peer-to-peer. Questo nodo ha la necessità di informare gli altri nodi della transazione avvenuta, in modo tale che via via tutti i partecipanti siano a conoscenza dell’affare fatto da Alice e Bob.

Supponiamo che Alice, con dolo, velocemente cerchi di contattare un altro registro per vendere il Rolex a Caio. Se il nodo non è stato ancora informato della transazione avvenuta tra Alice e Bob avvenuta in precedenza approverà il trasferimento di proprietà dello stesso Rolex da Alice a Caio.

Dunque Alice è stata in grado di vendere lo stesso oggetto sia Bob che a Caio sfruttando il fatto che il sistema peer-to-peer non fosse ancora interamente sincronizzato. Ma Bob e Caio non possono essere contemporaneamente proprietari dello stesso Rolex: solo uno di essi deve esserlo.

Questa situazione prende il nome di problema del double spending.

Il double spending relazionato a un sistema peer-to-peer si riferisce dunque al fatto che il trasferimento di informazioni verso tutti i nodi richiede del tempo, cosicché non tutti i nodi hanno le stesse informazioni relative all’ownership nello stesso momento. Essendo non per tutti le informazioni aggiornate, chi le possiede può cercare di hackerare il sistema trasferendo la proprietà più di una volta.

Come vedremo nei prossimi articoli la blockchain è una delle soluzioni per scongiurare questo problema.

Block#1 delivered.

Block#0 link

Credits: 
- Blockchain Basics di Daniel Drescher