lunedì 18 aprile 2022

Il Problema Dei Generali Bizantini e Bitcoin

Il problema dei generali bizantini ruota attorno al meccanismo di consenso di molte blockchain ed è stato implementato originariamente su Bitcoin. Quest'ultimo ha l'obiettivo di eliminare la fiducia verso le terze parti durante una transazione. Il Byzantine Fault Tolerance (BFT) è utilizzato anche su blockchain Proof Of Stake come Terra e Cosmos ad esempio (è detto Tendermint BFT). Si tratta di un problema che è stato teorizzato dai matematici Leslie Lamport, Marshall Pease e Robert Shostak nel 1982. Quello dei generali bizantini è un caso di studio molto noto nell’ambito dei sistemi distribuiti. 


IL PROBLEMA DEI GENERALI BIZANTINI
Il problema parte dal fatto che dei generali hanno assediato una città nemica. Ogni generale comanda il proprio esercito e sono sparsi per la città. Non esiste un comando centrale, quindi ogni esercito è praticamente autonomo. Nel problema dei generali bizantini, il coordinamento o la sua mancanza determina l'esito di una situazione, in questo caso un accordo per attaccare il nemico o tradire e battere in ritirata. Quando attaccare o mantenere la tua posizione? Ciò richiede la formulazione di una strategia per determinare il successo o il fallimento di un sistema distribuito decentralizzato .
Non essendoci un collegamento diretto alla comunicazione tra i generali non esiste coordinamento.
Anche se ci fossero dei collegamenti, essi non sono attendibili poiché non abbiamo alcuna garanzia che il messaggio raggiunga la sua destinazione. Diciamo che ci sono diversi generali pronti ad attaccare la città ma non sono direttamente vicini l'uno all'altro, quindi c'è una certa distanza tra gli eserciti. Il coordinamento è necessario per portare a termine il piano di attacco quindi in qualche modo devono comunicare. Ogni generale prende ordini dal loro re e formula comandi che devono essere obbediti. Si supponga che il re avesse emesso un ordine per attaccare la città. Affinché il messaggio venga trasmesso, il re invia 2 messaggeri a ciascun generale (per un totale di 10 messaggeri, se ci sono 5 generali). Il secondo messaggero è in realtà un backup del primo messaggero. Ora qui sta il problema. E se i messaggeri fossero spie e invece di consegnare il messaggio di attacco, lo cambiassero dicendo di battere in ritirata? E se tutti i messaggeri o alcuni dei messaggeri cadessero in un'imboscata e alcuni o tutti i generali non ricevessero il messaggio per attaccare?
E se uno o più generali fosse un traditore e decidesse di non attaccare o addirittura di attaccare i suoi compagni aiutando il nemico? Nel caso in cui non venga ricevuto alcun messaggio per attaccare, il generale dovrebbe comunque attaccare? La logica direbbe no ma se non attacchi potresti perdere un'opportunità per farlo. Se non attacchi, ma gli altri si, sarai sottoposto a subordinazione per non aver obbedito agli ordini del re. Il generale può essere punito severamente, ecco perché il pensiero critico diventa importante in situazioni come queste.


SOLUZIONE DEL PROBLEMA
La soluzione al problema è disporre di un protocollo che utilizzi misure di tolleranza ai guasti. L'adozione di un protocollo tra i generali è il modo migliore per prendere decisioni di fronte all'incertezza. Pertanto, diventa probabilistico piuttosto che deterministico poiché non vi è alcuna garanzia su ciò che accadrà. Questo è esattamente il caso in cui si ha una comunicazione tra colleghi e ciascuno è indipendente dall'altro. Ogni generale si trova in una posizione diversa, quindi c'è una distanza fisica tra loro.
Ecco alcune azioni che i generali potrebbero eseguire:
- Nessun generale ha ricevuto un messaggio ufficiale dal re per attaccare, ciò significa mantenere la posizione e non attaccare. Dopo che è trascorso un certo periodo e non è stato ricevuto alcun messaggio, i generali possono ritirarsi. Possono ancora esserci eccezioni a questa regola.
- Al fine di verificare l'ordine del re di attaccare, il generale può verificare il messaggio del messaggero chiedendo una frase segreta (che solo i generali e il re conoscono, a parte i messaggeri) utile a dimostrare che era il re che ha emesso l'ordine. Tuttavia, il messaggio deve essere ricevuto da almeno uno dei due messaggeri inviati dal re.
Per coordinare un'azione, un cavaliere potrebbe usare uno stendardo rialzato che indica di attaccare a tutti gli altri generali. Ciò significa che uno stendardo identifica ogni esercito. Il problema qui è cosa succede se c'è un esercito che non ha ricevuto un messaggio di attacco? I generali potrebbero convenire che se almeno 3 dei 5 generali alzano lo stendardo, l'ordine di attacco è legittimo. Quindi procedono con l'attacco alla città.


COSA SUCCEDE?
I generali leali obbediranno agli ordini del loro re e realizzeranno il piano. Più messaggeri hai, maggiore è la probabilità che il messaggio arrivi ai generali. Se ci sono generali più fedeli che eseguono gli ordini, migliore sarà il risultato. Se la maggior parte dei generali riceve il messaggio, migliore sarà il risultato (indipendentemente da un attacco o una ritirata).


BITCOIN E LA RISOLUZIONE DEL PROBLEMA
Ciò che rende Bitcoin innovativo non è solo fornire una piattaforma decentralizzata per effettuare pagamenti ma esso ha risolto anche il problema di utilizzare un sistema affidabile e senza autorizzazione. Ciò che Satoshi Nakamoto ha sviluppato è stato un modo per implementare la soluzione al problema del generale bizantino in una rete elettronica digitale utilizzando la sicurezza crittografica e la crittografia a chiave pubblica. La sicurezza crittografica implica un processo di codifica chiamato hashing  per impedire la manomissione dei dati (ogni hashing rappresenta un certa stringa alfanumerica, variare un solo carattere, modifica la sequenza). La crittografia a chiave pubblica verifica l'identità di un utente sulla rete. Una transazione è inserita in un blocco che si connette ad altri blocchi tramite il suo valore hash. Tutti gli hash possono essere ricondotti ad un blocco iniziale che è la radice di tutti gli hash. Questo è diventato noto come blockchain e utilizza un Merkle Tree per verificare gli hash che hanno origine da un blocco primordiale. Ogni blocco che ha origine dal blocco genesis (il primo) è valido sulla rete. I blocchi sono convalidati da nodi chiamati miners, che competono con altri miners per risolvere enigmi crittografici per produrre blocchi come parte di un meccanismo di consenso chiamato Proof Of Work. Il miner che è in grado di risolvere il problema beccando l'hash esatto, riceve una ricompensa per il suo contributo come incentivo.
Gli utenti che fanno parte di questa rete devono disporre di una coppia di chiavi composta da una chiave privata e una chiave pubblica per verificare la propria identità. La chiave privata viene utilizzata per le firme digitali che autorizzano una transazione. Solo il titolare della chiave privata ha questo privilegio e nessun altro utente. Le chiavi private sono uniche e da queste deriva la chiave pubblica. La chiave pubblica viene utilizzata per creare un indirizzo pubblico che è il modo in cui l'utente viene identificato sulla rete. Il Nakamoto Consensus (cioè Proof Of Work) è un meccanismo che prova a risolvere problemi in un ambiente senza fiducia e senza autorizzazione.
Nella versione di Satoshi della blockchain (sistema distribuito), il problema del generale bizantino viene risolto dai miners che rappresentano i generali. Ogni nodo convalida le transazioni, che sono come i messaggi inviati ai generali. Il nemico può essere considerato un hacker o miner malevolo che vuole rubare i messaggi o attaccare la rete.
I messaggi utilizzano la crittografia in modo che gli hacker (ad esempio Man-In-The-Middle) non possano attaccare facilmente la blockchain. I messaggi o le transazioni vengono impacchettati in blocchi e quindi sottoposti ad hashing per evitare manomissioni. Satoshi rende le cose più probabilistiche facendo competere i miners tra loro per provare a convalidare i blocchi. Ciò lo rende più decentralizzato poiché nessun miner può monopolizzare la convalida per guadagnare tutti i premi. Invece i miners devono competere tra loro usando le loro risorse di calcolo chiamate hash rate per risolvere un puzzle. Maggiore è il tasso di hash di un minatore, più è probabile che possa risolvere il puzzle. Ciò dipende anche dal coefficiente di difficoltà.
Poiché ci sono molti miners, la rete è protetta attraverso il loro meccanismo di consenso. I blocchi convalidati diventano immutabili e protetti dall'hash in modo che i tentativi di modifica delle transazioni possano essere prevenuti. Il consenso si ottiene quando il miner che ha risolto il problema lo trasmette alla rete, tutti gli altri minatori devono convalidare o negare se il valore non è corretto. Il valore corretto deve essere uguale o inferiore a quello che viene chiamato coefficiente di difficoltà appunto. L'hashing in questo caso è formato anche da una parte variabile, chiamata "nonce". Minare sostanzialmente vuol dire trovare un' hashing sotto una determinata soglia e spendere energia (produzione di lavoro che porta alla sicurezza della rete). Fare mining porta quindi alla risoluzione della condizione imposta dal coefficiente di difficoltà. La verifica avviene tramite il "nonce" inserito nel blocco: dall'input viene verificato l'hash dell'output (cioè viene validato il blocco). L'unità di misura del network è il terahash/secondo (almeno 10 alla 12 operazioni in un secondo, da parte di ogni miner). Più miners vuol dire più hashrate e quindi maggiore probabilità di trovare il nonce corretto. L'incentivo a tutto ciò, è Bitcoin. All'aumentare dell'hashrate (hash al secondo), aumenta la difficoltà.
La blockchain è anche decentralizzata, il che significa che non dovrebbe esserci alcun punto centrale/guida nel sistema. I blocchi vengono memorizzati in un database distribuito che viene copiato su altri computer della rete. Questa ridondanza aiuta a fornire anche la tolleranza agli errori, in modo che nessun computer guasto possa arrestare l'intero sistema. È come avere più messaggeri nel caso in cui un messaggero subisca un'imboscata da parte del nemico. Il messaggio non andrà perso perché altri messaggeri ne avranno una copia. Nel mondo reale, le transazioni avvengono principalmente tra persone che non si conoscono o non si fidano l'una dell'altra.
Una blockchain fornisce un livello di cui non c'è bisogno di doversi fidare di una persona. Ciò avviene grazie al consenso di una rete di nodi che convalida la verità prima che venga registrata. Se il generale non è sicuro del contenuto del messaggio, può essere verificato dagli altri generali in base a ciò che sanno. Una volta registrato su un nodo, una copia viene inviata ad altri nodi che fanno parte della rete in modo che le informazioni diventino ridondanti. Questo è lo scopo dell'algoritmo di consenso PoW.
Le informazioni non sono sempre perfette e i cattivi cercheranno sempre di ingannare il sistema. In questo caso si è resa necessaria la crittografia in modo che non sia consentito modificare i messaggi. Il sistema fornisce coppie di chiavi per firmare digitalmente un messaggio e per verificare l'identità come prova che proviene da chi afferma di essere. Una volta convalidati, i messaggi vengono registrati per sempre, il che fornisce una prova storica di quella responsabilità. Il controllo della rete avverrebbe con un 51% attack  (ovvero avendo il 51% dell'hashpower) e questo porta alla spesa di somme enormi (miliardi all'ora). All'aumentare dell'hashpower complessivo, Bitcoin diventa sempre più sicuro perchè aumenta la spesa di energia per eseguirlo.

5 commenti:

  1. Sei ossessionato dai bitcoin in pratica da come far soldi,riempi ste pagine di pubblicità, strano che ti sei dimenticato come si scrive perché eppure eri perfetto?? Un blog abbastanza noioso e ripetitivo e inutile

    RispondiElimina
  2. Ti credi un super informatico avanguardista super tecnologico, alla fine sei un super copione che va elemosinando gli occhi dei visitatori per monetizzare

    RispondiElimina
    Risposte
    1. Commenti del genere sono privi di senso. Non li cancello solo per educazione ma non sono critiche costruttive quindi privi di valore e significato.

      Elimina
    2. Vedi di costruttivo per te non c era niente

      Elimina
    3. Fatto piazza pulita di questi messaggi spam. Attieniti a commentare, rimanendo in topic, tutto il resto verrà cancellato.

      Elimina