Home / Guide / Protocolli di consenso delle criptovalute
Protocollo proof-of-work
L'algoritmo basato sul Proof-of-work è semplice e decisamente stabile.

Protocolli di consenso delle criptovalute

All’interno del sistema di ogni criptovaluta esistono continue interazioni e lunghe righe di codici alfanumerici. Gli utenti e le singole transazioni, hanno la necessità di convalidarsi e di provare la loro identità all’interno di un sistema vasto e spesso ignoto. Queste convalide devono essere effettuate rendendo pubbliche le minori informazioni possibili, per evitare furti d’identità o di dati sensibili.

I protocolli di consenso permettono ad ogni utente di dimostrare di possedere un certo quantitativo di criptovaluta e quindi di poterla spenderla o trasferirla. Di seguito verranno presentati i principali protocolli di consenso attualmente in circolazione, cercando di darne una semplice ma esaustiva descrizione.

Proof-of-work

Protocollo proof-of-work
L’algoritmo basato sul Proof-of-work è semplice e decisamente stabile.

Il più famoso sistema di consenso è il proof-of-work, utilizzato per la prima volta dalla criptovaluta Bitcoin. Questa tipologia di algoritmo viene utilizzata nel mining delle criptovalute per certificare le transazioni e comporre la blockchain.

I miner competono tra loro, ed il più rapido a minare il blocco riceva una ricompensa generando nuova criptovaluta che prima non esisteva: questa è la “cripto-alternativa” al sistema con cui le banche prendono liquidità in prestito dalle banche centrali. Più transazioni devono essere inserite in un blocco, fino ad una dimensione che, nel caso di Bitcoin, equivale ad 1 Mb; le transazioni devono essere ordinate secondo un algoritmo complesso di verifica, tale per cui molta potenza di calcolo e altrettanta energia elettrica sono coinvolte nel processo.

Il protocollo proof-of-work, letteralmente tradotto come “Prova del lavoro”, viene utilizzato per elargire un premio ai miner della rete sulla base della competizione tra i miners stessi. I blocchi sono difficili da creare e richiedono molteplici tentativi per poter essere ultimati. Per minare Bitcoin è necessaria dunque un’enorme potenza di calcolo, tale per cui molto spesso i miner si uniscono in gruppi  chiamati mining pools.  Le più grandi del mondo sono AntPool, BTCC Pool e F2 Pool: queste tre insieme rappresentano il 62% della potenza di calcolo dell’intero network Bitcoin.

Questo protocollo di verifica è molto sicuro ed è stato introdotto pensando ad una rete ristretta di nodi; era d’altronde impossibile prevedere che le criptovalute uscissero dal sistema in cui sono nate, ovvero quello di SilkRoad e del deep web in generale. All’aumentare delle persone coinvolte, tuttavia, questo sistema mostra problemi evidenti di scalabilità dovuti all’impatto ambientale e sociale che il mining richiede.

Proof-of-stake

Questa tipologia di algoritmo viene utilizzato nel mining di criptovalute come Ethereum. Il protocollo proof-of-stake (“prova di possesso”) funziona utilizzando molta meno energia rispetto all’algoritmo precedente ed ha caratteristiche differenti. In questo modello, maggiore è la detenzione di criptovaluta, maggiori sono le possibilità di essere “scelti” per la creazione del blocco. In pratica, i nodi che creano maggiori transazioni in termini di volume, si qualificano per essere i prescelti a minare il blocco in cui quelle transazioni sono coinvolte.

La scelta di utilizzare gli utenti più “ricchi” è dovuta ad un duplice motivo. In primis, maggiore è la partecipazione di un utente al sistema della criptovaluta, minori sono le possibilità che quest’ultimo stia tentando di violare il sistema. In secondo luogo, più un utente è esposto economicamente ad una criptovaluta, più è probabile che si comporti in modo ottimale.

I blocchi della proof-of-stake non vengono estratti, ma coniati. Questo li rende molto più semplici da risolvere. Le risorse richieste per il mining sono di molto più basse rispetto alla proof-of-work. Ad esempio, per il mining di Ethereum basterà possedere un computer con almeno 8 Gb di RAM che si trova facilmente in commercio per cifre intorno ai 500 euro. Per il mining di Bitcoin, invece, alcuni detengono server farm ricolme di schede grafiche che arrivano a costare centinaia di migliaia di euro.

All’interno dei sistemi che utilizzano questo protocollo, non esistono premi per la creazione dei blocchi. L’incentivo per i miners è rappresentato dalle commissioni di transazione pagate dagli utenti, che vengono assegnate a coloro ai quali è delegata la soluzione del blocco stesso.

I principali vantaggi, come già accennato, riguardano il minor consumo di energia e un numero maggiore di blocchi creati. Per contro, l’algoritmo proof-of-stake risulta più complesso e meno robusto rispetto al proof-of-work e necessita di correzioni per evitare un accentramento della rete. La community, in questo senso, deve essere attenta a non accentrare eccessivamente la ricchezza nelle mani di pochi nodi per evitare che il sistema diventi antidemocratico e monopolista.

Raft

Raft è un algoritmo di consenso progettato appositamente per essere facile da capire e funzionale al suo scopo. Questo protocollo scompone il codice in sottoproblemi relativamente indipendenti tra loro e affronta ogni “pezzo” singolarmente.

Lo scopo principale di Raft è quello di rendere il consenso disponibile ad un pubblico sempre più vasto e che quest’ultimo sarà in grado di sviluppare nuovi sistemi basati sul consenso.

raft criptovalute come funziona
Il protocollo di consenso Raft divide i nodi in tre categorie

Definizione di consenso

Il consenso, all’interno delle reti crittografate, è un problema che coinvolge più server che lavorano assieme. Quando ad esempio un server deve dare il consenso per una transazione, ha bisogno di determinate informazioni. In assenza di queste, la transazione non verrà accettata.

Il consenso quindi coinvolge più server che devono concordare su determinati valori. Una volta raggiunta una decisione su un valore, questa è inamovibile, definitiva.

Esempio di consenso distribuito

In un ipotetico sistema a nodo singolo, il funzionamento della rete è piuttosto semplice da capire. Il client invia un valore al server, questo lo accetta ed invia il suo consenso al client. In mezzo si interpone il sistema di crittografia SSL che impedisce ad un terzo di intromettersi nella comunicazione per sottrarre informazioni illegittimamente ai due interlocutori.

Nel caso delle reti peer-to-peer, esistono all’interno della rete più nodi ed il consenso deve quindi arrivare da un numero maggiore di elementi. Questo viene definito come il problema del consenso distribuito. Raft cerca di risolvere questo problema nella maniera più semplice possibile.

Un nodo può trovarsi in uno di tre stati differenti: Follower, Candidato e Leader.

Inizialmente, tutti i nodi sono nello stato di follower. Se un nodo non riceve ordini da nessun leader, diventa un candidato. Quest’ultimo inizierà a chiedere voti ad altri nodi. I nodi, rispondendo, daranno il proprio voto al candidato. Il processo di elezione del leader termina quando un nodo ottiene la maggioranza dei voti.

Da questo momento in avanti, tutte le modifiche al sistema passano attraverso il leader. Ogni nuova modifica viene proposta da un client al leader. Questo, non aggiornerà immediatamente il valore del nodo ma invierà la proposta ai nodi follower. Il leader attenderà una risposta dalla maggior parte dei lollower prima di modificare il valore del nodo, che determina la quantità di valuta posseduta dal nodo stesso.

Dopo aver inviato l’accettazione al client, il leader notificherà ai follower l’avvenuta modifica al nodo. Questo processo viene chiamato Log Replication.

Regole di sicurezza in Raft

All’interno del protocollo Raft esistono alcune regole fondamentali che permettono il regolare svolgimento dell’attività ai nodi:

  • Un solo leader può essere eletto in un nodo. Questa regola evita la duplicazione dei leader ed un dispendio maggiore di energia;
  • Il leader può solo aggiungere nuovi voci al registro, non può quindi né sovrascrivere né eliminare voci;
  • Se due log contengono la stessa voce e lo stesso indice, i log verranno etichettati come identici;
  • Se una voce del registro è impegnata in una determinata operazione, questa sarà presente nei log del leader.

Federated Consensus

Il Federated Consensus è un meccanismo che garantisce che tutti i partecipanti ad una rete vengano coordinati su un singolo registro di transazioni. Questo protocollo impedisce la “duplicazione” della blockchain, evitando quindi una biforcazione che darebbe due problemi fondamentali: duplicazione di risorse necessarie al funzionamento e blocchi orfani. I blocchi orfani sono quelli della biforcazione della blockchain che verrà poi abortita, in quanto l’essenza stessa della blockchain non prevede biforcazioni della catena di blocchi; tutte le transazioni contenute in questo tipo di blocco, una volta abortito il ramo, vengono annullate. Al contrario dei protocolli di validazione della blockchain, che specificano la validità di una determinata blockchain, il protocollo di consenso assicura che ci sia solo una blockchain valida su una data rete.

Attraverso l’utilizzo del protocollo del Federated Consensus, i blocchi vengono considerati accettati dopo essere stati firmati da un certo numero di firmatari specifici. Dopo che il sistema riceve le accettazioni da sufficienti firmatari di blocchi (come definito dal programma del blocco precedente), pubblica il blocco sulla rete. Tutti i partecipanti alla rete, compresi i firmatari del blocco, convalidano tale blocco e aggiornano il loro stato.

La continuità del funzionamento del sistema è garantita finché il generatore dei blocchi non cessa di funzionare. Se il generatore si blocca o diventa non disponibile, la rete non può generare nuovi blocchi. Questo affidamento su un singolo generatore specifico è insolito per i moderni protocolli di consenso. Tuttavia, offre molti vantaggi in termini di efficienza e semplicità.

Se il generatore viene intenzionalmente spento dall’operatore di rete, o se cessa di eseguire correttamente il protocollo (a causa di un hack, un bug o un intento malevolo da parte del suo operatore), la rete può fermarsi tranquillamente fino all’intervento manuale.

Zero-knowledge proof

Come noto, tutte le criptovalute funzionano all’interno di un sistema di reti crittografate. In crittografia, viene definita knowledge proof una dimostrazione effettuata da un soggetto per verificare la correttezza di una affermazione senza rivelare nient’altro oltre alla veridicità della stessa.

Caratteristiche del protocollo

Nell’ambito dei protocolli di scambio di informazione tra un “Dimostratore” e un “Verificatore” lo schema matematico dello zero-knowledge viene utilizzato per non inviare eccessive infomazioni (strettamente personali) del Dimostratore.

In linea generale, i due interlocutori possono essere:

  • Onesti: il Dimostratore e il Verificatore seguono esattamente il protocollo concordato e il Dimostratore possiede effettivamente la conoscenza affermata;
  • Disonesti: uno dei due attori non segue il protocollo e/o il Dimostratore tenta di fregare il Verificatore.

Dopo aver premesso ciò, è necessario affermare che un protocollo knowledge proof possiede le seguenti proprietà:

  1. Completezza: se l’affermazione è vera, un dimostratore onesto potrà convincere del fatto un verificatore onesto e quest’ultimo ne accetterà sempre la dimostrazione;
  2. Correttezza: se l’affermazione è falsa, nessun dimostratore che voglia imbrogliare potrà convincere un verificatore onesto che essa è vera. O meglio, le probabilità di riuscirci sono estremamente basse e il Verificatore stesso potrà renderle basse a piacere;
  3. Conoscenza zero: se l’affermazione è vera, il Verificatore avrà come unica informazione la veridicità di quanto attestato dal Dimostratore.

Solitamente, la caratteristica più difficilmente dimostrabile è la terza. Quest’ultima è la caratteristica specifica per le dimostrazioni a conoscenza zero.

Esempio pratico

zero conoscenza
Grazie a questo semplice esempio è più chiaro capire l’importanza del protocollo.

Louis Guillou, all’interno del suo articolo “How to Explain Zero-Knowledge Protocols to Your Children” racconta una storia che serve a far capire a chiunque il concetto.

Un soggetto, che chiameremo Alice, deve dimostrare a Bob di essere in grado di aprire la porta di una caverna, senza rivelare a Bob la parola segreta per aprirla.

La forma della caverna è particolare: essa infatti è suddivisa in due rami che si riuniscono in un punto diametralmente opposto all’entrata. Nel punto in cui i due rami si riuniscono si trova la porta. Il protocollo da eseguire è il seguente:

  1. Alice entra nella caverna senza che Bob possa vedere quale ramo ha scelto;
  2. Bob si affaccia all’ingresso della caverna e chiede ad Alice di uscire da uno dei lati, quello destro o quello sinistro;
  3. Se Alice è onesta ed effettivamente conosce la parola segreta, uscirà dal lato giusto.

Ovviamente il procedimento deve essere ripetuto più volte, in quanto Alice potrebbe aver avuto la fortuna che Bob le abbia chiesto di uscire dal lato in cui lei è entrata. Maggiori sono le esecuzioni che vengono effettuate, minori sono le probabilità che Alice stia imbrogliando Bob.

Con questo semplice esempio si può comprendere la funzionalità del protocollo Zero-knowledge proof: Bob non ha appreso la parola segreta e Alice ha dimostrato di essere onesta e di conoscere il segreto.

About Matteo Barosso

Copywriter freelance e appassionato di criptovalute; sempre al passo con le novità che arrivano dalle start-up, con un sogno... vivere nella Silicon Valley per vivere i cambiamenti mentre accadono.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *