Byzantine Fault Tolerance, o BFT per il suo acronimo in inglese, è uno dei concetti più importanti della blockchain e forse uno dei meno conosciuti. Senza di essa, la tecnologia blockchain come la conosciamo non sarebbe possibile.
El termine di colpa bizantina, è derivato da Problema dei generali bizantini (PGB). Questo problema logico presuppone, in poche parole, quello le parti interessate devono concordare una strategia concertata per evitare guasti catastrofici del sistema. Ma c'è la possibilità che ci siano attori all'interno del sistema che potrebbero non essere affidabili. Dato questo fatto, il sistema deve creare meccanismi che garantiscano che questi malintenzionati non possano portare al fallimento senza altri rimedi. La creazione di questi meccanismi è precisamente ciò che dà tolleranza ai difetti bizantini.
Può sembrare semplice, ma la realtà è molto diversa. Raggiungere la tolleranza agli errori bizantina è una delle sfide più difficili nell'informatica. Al punto che il primo progetto a risolverlo in modo soddisfacente è stato il Bitcoin, de Satoshi Nakamoto. Questo ha segnato una pietra miliare, che ha accompagnato la tecnologia blockchain fino ad ora.
La Tolleranza agli errori bizantini, è la capacità di un sistema informatico distribuito di resistere ai difetti bizantini.
Questi difetti possono essere:
- Fallimenti del consenso.
- Validazione non riuscita.
- Mancata verifica dei dati.
- Errori nel protocollo di risposta a fronte di situazioni di rete.
Questa tolleranza è legata alla capacità di cui la rete, nel suo insieme, può creare un meccanismo consenso. Lo scopo di ciò è dare una risposta coerente al fallimento del sistema.
Come funziona la tolleranza agli errori bizantina?
Tolleranza agli errori bizantini funziona definendo un insieme di regole che permette di risolvere il problema dei generali bizantini in modo soddisfacente. Raggiungere questo obiettivo è complesso, poiché queste classi di errori non implicano restrizioni. Questa situazione rende il problema più complesso e difficile da trattare. Tuttavia, in molti sistemi informatici questa tolleranza è un requisito. Pertanto, per raggiungere questo obiettivo, un sistema bizantino tollerante ai guasti deve soddisfare almeno quanto segue:
- Ogni processo deve essere avviato con uno stato indeciso (né SI, né NO). A questo punto, la rete propone una serie di valori deterministici applicabili al processo.
- Per condividere i valori, deve essere garantito un mezzo di comunicazione. Questo per visualizzare i messaggi in modo sicuro. Il mezzo servirà anche per comunicare e identificare inequivocabilmente le parti.
- A questo punto, i nodi calcolano i valori e passano a uno stato deciso (SI o NO). ogni nodo deve generare il proprio stato, che fa parte di un processo puramente deterministico.
- Una volta deciso, totale e vince lo Stato con il maggior numero di decisioni a favore.
Questi quattro punti definiscono il funzionamento di base di un algoritmo bizantino a tolleranza di errore.
Una spiegazione più approfondita
Certamente il caso precedente può essere un po 'complesso. Pertanto, una spiegazione più semplice applicata al blockchain voluto:
Immaginiamo che Juan esegua una transazione Bitcoin.
ogni nodo sulla rete, inizia a compilare la transazione in uno stato indeciso (TX non confermato). La conferma di tale transazione passa attraverso un lavoro di mining (il nostro protocollo di consenso). Il processo di mining verifica che il file hash della transazione è corretta e la include in un blocco.
Questo processo di verifica è intensivo dal punto di vista computazionale ed è possibile solo con mezzi deterministici. Ad ogni nuova conferma (stato deciso) della transazione data dalla maggior parte della rete, Juan può essere sicuro che la transazione è stata considerata valida.
Casi d'uso bizantini di tolleranza agli errori
Tolleranza agli errori bizantini ha la capacità di risolvere vari problemi. Tra questi, parleremo di alcuni dei più rilevanti per capire un po 'di più la sua ampia utilità:
Caso n. 1: utilizzo nei compilatori software
Un compilatore il codice sorgente è uno degli strumenti informatici più complessi che possiamo conoscere. I compilatori hanno la capacità di convertire il codice sorgente di un programma in un binario in grado di essere eseguito dal computer. Ciò significa che convertono qualcosa di simile al linguaggio umano (come C / C ++ o Go) in linguaggio macchina o binario.
In mezzo a tutto questo, i compilatori "Bobina" la sua capacità in diversi sottoprogrammi di essere in grado di eseguire le seguenti azioni:
- Tradurre il codice sorgente nell'architettura del processore desiderata. Ad esempio, possiamo decidere se compilare per x86-32 (PC) o ARM (mobile). In questo esempio, scegliamo x86-32.
- Adatta i parametri alle capacità della famiglia o generazione di processori di destinazione. Un punto da tenere in considerazione, poiché il codice di una generazione superiore potrebbe non essere eseguito in una precedente. A questo punto, abbiamo deciso di programmare per i Core i3 di seconda generazione.
- Comincia a compilare il codice e tutti i sottoprogrammi lo trasformano in codice macchina. Parallelamente, le applet decidono dove ottimizzare e quali ottimizzazioni applicare al codice. Il risultato finale è il nostro programma già compilato e pronto per essere eseguito.
In questo processo, la tolleranza agli errori bizantina è fondamentale, poiché garantisce quanto segue:
- Che gli applet si applicano correttamente i parametri e le ottimizzazioni per l'architettura e la generazione scelte. In caso contrario, si verificheranno errori e il risultato finale non sarà superato.
- Applicazione delle ottimizzazioni deve garantire che non intendono il duplicazione dei dati. Ma anche la deduplicazione a livello binario non dovrebbe influire sul funzionamento delle parti del binario. A questo punto, è necessaria un'analisi dei guasti bizantina e i compilatori dovrebbero essere in grado di analizzarla.
Caso n. 2: sistemi di archiviazione dati
Un altro caso d'uso della tolleranza agli errori bizantina applica l'estensione Sistemi di archiviazione dati. Molti sistemi di database e persino file system lo implementano per migliorare l'affidabilità dei dati memorizzati. Un esempio di ciò è il file system ZFS. Questo sistema di archiviazione è in grado di replicare l'hashing avanzato, la replica, la deduplicazione, la correzione degli errori, la gestione e l'archiviazione di grandi quantità di dati.
Per realizzare questo, ZFS fa uso di schemi bizantini di tolleranza ai guasti per garantire:
- La nessuna omissione di processi elementari per trattamento della dati memorizzati o essendo archiviati nel file system. Ad esempio, l'applicazione di hash ai dati e ai metadati, compressione, correzione di errori o deduplicazione degli stessi.
- Che non vengano intraprese azioni indesiderate nell'elaborazione dei dati. Come deduplicazione che porta alla perdita di dati nel sistema. O una correzione di bug che danneggia le informazioni.
- I creare, leggere e scrivere processi in strutture ZFS annidate Usano questi tipi di tecniche per garantire che siano coerenti in ogni momento.
Grazie a tutto ciò, ZFS conserva i dati archiviati nella sua struttura in modo sicuro. Ecco perché è noto come il file system più sicuro e avanzato nel mondo dei computer.
Caso n. 3: sistemi avionici
Questo è il caso del sistema di gestione delle informazioni sugli aeromobili. Un sistema che funziona in tempo reale e tollera i difetti bizantini.
Ciascuno dei sensori del velivolo comunica con i sistemi di comando e controllo fornendo informazioni in tempo reale. Il guasto di un sensore non dovrebbe mai significare un guasto catastrofico per l'aereo. Per ottenere ciò, viene utilizzata la tolleranza ai guasti bizantina. Ciò per compensare i dati dei sensori o i sistemi danneggiati e mantenere il velivolo al sicuro.
In effetti, applicare la tolleranza ai guasti bizantina a questo punto è una vera sfida. A causa del numero di sistemi e dei diversi scenari da gestire. L'avionica deve tenere conto di casi come riconfigurazione, duplicazione, guasto di interi sistemi e offrire comunque resistenza a questi tipi di guasti. Sebbene la resistenza al 100% sia impossibile, ingegneri e programmatori fanno un lavoro straordinario in questo senso.
Caso n. 4: protocolli di consenso Blockchain
Protocolli di consenso in blockchain come PoW tollerano i difetti bizantini. Questi consentono a una rete distribuita di raggiungere il consenso in condizioni bizantine. quando Satoshi Nakamoto ha progettato Bitcoin, ha tenuto conto di questo tipo di tolleranza. Per fare questo, ha creato una serie di regole e applicato il protocollo di consenso PoW per creare software bizantino a tolleranza di errore. Tuttavia, questa tolleranza non è del 100%.
Nonostante ciò, PoW ha dimostrato di essere una delle implementazioni più sicure e affidabili per le reti blockchain. In questo senso, l'algoritmo di consenso proof-of-work, progettato da Satoshi Nakamoto, è considerato da molti una delle migliori soluzioni per i difetti bizantini. PoS y DPOS da parte loro, non tollerano completamente i difetti bizantini, motivo per cui sono solitamente integrati con altre misure di sicurezza.
Vantaggi e svantaggi
Vantaggi
- Capacità di garantire la correttezza dei dati e delle informazioni, nei sistemi distribuiti. Questo anche in scenari ostili per tali compiti.
- Risolve il problema dell'elaborazione delle informazioni in ambienti eterogenei.
- Alta efficienza in termini computazionali ed energetici.
- Offre implementazioni che hanno un impatto positivo sulla scalabilità se sono ben costruite.
- Più nodi applicano la tolleranza agli errori bizantina, più sicuro è il modello.
Svantaggi
- La creazione di queste soluzioni è complessa. Ciò può bloccare altri problemi di sicurezza nella tua implementazione.
- Garantirne il corretto funzionamento richiede che la distribuzione dell'impianto sia in crescita. Più nodi applicano il processo, più è sicuro. Ma questo ha anche un impatto negativo sulla scalabilità e sulla larghezza di banda della rete.