Byzantinische Fehlertoleranz (BFT) ist eines der wichtigsten Konzepte in der Blockchain und vielleicht eines der am wenigsten bekannten. Ohne sie wäre die Blockchain-Technologie, wie wir sie kennen, nicht möglich.
Edie Laufzeit von byzantinischer Fehler, ist abgeleitet von Problem der byzantinischen Generäle (PGB). Dieses logische Problem bedeutet, kurz gesagt, das Die Akteure müssen sich auf eine konzertierte Strategie einigen, um einen katastrophalen Systemausfall zu verhindern. Es besteht jedoch die Möglichkeit, dass es innerhalb des Systems Akteure gibt, die möglicherweise nicht vertrauenswürdig sind. Vor diesem Hintergrund muss das System Mechanismen schaffen, die garantieren, dass diese böswilligen Akteure nicht ohne andere Abhilfemaßnahmen zum Scheitern führen können. Gerade die Schaffung dieser Mechanismen gewährt Toleranz gegenüber byzantinischen Fehlschlägen.
Es mag einfach klingen, aber die Realität sieht ganz anders aus. Das Erreichen byzantinischer Fehlertoleranz ist eine der schwierigsten Herausforderungen in der Informatik. Bis zu dem Punkt, dass der erste Entwurf, der das Problem zufriedenstellend löste, der war Bitcoin, de Satoshi Nakamoto. Damit markierte er einen Meilenstein, der die Blockchain-Technologie bisher begleitet hat.
La Byzantinische Fehlertoleranzist die Fähigkeit eines verteilten Computersystems, byzantinischen Fehlern zu widerstehen.
Diese Fehler können sein:
- Konsensfehler.
- Validierungsfehler.
- Fehler bei der Datenüberprüfung.
- Fehler im Antwortprotokoll als Reaktion auf Netzwerksituationen.
Diese Toleranz hängt mit der Fähigkeit des Netzwerks als Ganzes zusammen, einen Mechanismus zu schaffen Zustimmung. Der Zweck besteht darin, eine kohärente Reaktion auf Systemausfälle bereitzustellen.
Wie funktioniert die byzantinische Fehlertoleranz?
Byzantinische Fehlertoleranz funktioniert durch die Definition einer Reihe von Regeln, die die Lösung des Problems der byzantinischen Generäle ermöglichen auf eine zufriedenstellende Art und Weise. Dies zu erreichen ist komplex, da diese Art von Ausfällen keine Einschränkungen mit sich bringt. Diese Situation macht das Problem komplexer und schwieriger zu behandeln. In vielen Computersystemen ist diese Toleranz jedoch eine Voraussetzung. Um dieses Ziel zu erreichen, muss ein byzantinisches fehlertolerantes System daher mindestens Folgendes erfüllen:
- Jeder Prozess muss mit einem unentschlossenen Status (weder JA noch NEIN) gestartet werden. An diesem Punkt schlägt das Netzwerk eine Reihe deterministischer Werte vor, die auf den Prozess anwendbar sind.
- Um die Werte zu teilen, eine Kommunikationsmöglichkeit muss gewährleistet sein. Dies dient dazu, Nachrichten sicher bereitzustellen. Das Medium dient auch der eindeutigen Kommunikation und Identifizierung der Parteien.
- An diesem Punkt, Die Knoten berechnen die Werte und gehen in einen entschiedenen Zustand (JA oder NEIN). Jeder Knoten Es muss seinen eigenen Zustand erzeugen, was Teil eines rein deterministischen Prozesses ist.
- Einmal entschieden, Sie summieren sich und der Staat mit den meisten Ja-Entscheidungen gewinnt.
Diese vier Punkte definieren die grundlegende Funktionsweise eines byzantinischen fehlertoleranten Algorithmus.
Eine nähere Erklärung
Sicherlich kann der vorherige Fall etwas komplex sein. Daher gilt eine einfachere Erklärung für die Blockchain würde:
Stellen wir uns vor, dass Juan eine Bitcoin-Transaktion durchführt.
Jeder Knoten Im Netzwerk beginnt es mit der Kompilierung der Transaktion in einem unentschlossenen Zustand (unbestätigte TX). Die Bestätigung dieser Transaktion erfolgt durch eine Arbeit von Minería (unser Konsensprotokoll). Der Mining-Prozess überprüft, ob die Hash- der Transaktion korrekt ist und sie in einen Block einfügt.
Dieser Verifizierungsprozess ist rechenintensiv und nur mit deterministischen Mitteln möglich. Mit jeder neuen Bestätigung (Entscheidungsstatus) der Transaktion durch den Großteil des Netzwerks kann Juan sicher sein, dass die Transaktion als gültig angesehen wurde.
Anwendungsfälle der byzantinischen Fehlertoleranz
Byzantinische Fehlertoleranz Es hat die Fähigkeit, verschiedene Probleme zu lösen. Unter diesen werden wir über einige der relevantesten sprechen, um etwas mehr über ihren breiten Nutzen zu verstehen:
Fall Nr. 1: Verwendung in Software-Compilern
Un Compiler Quellcode ist eines der komplexesten Computerwerkzeuge, die wir kennen können. Compiler haben die Fähigkeit, den Quellcode eines Programms in eine Binärdatei umzuwandeln, die vom Computer ausgeführt werden kann. Das bedeutet, dass sie etwas, das der menschlichen Sprache ähnelt (wie C/C++ oder Go), in eine Maschinen- oder Binärsprache umwandeln.
Inmitten all dessen Compiler „Sie beschießen“ seine Fähigkeit in verschiedenen Unterprogrammen, die folgenden Aktionen ausführen zu können:
- Übersetzen Sie den Quellcode in die gewünschte Prozessorarchitektur. Wir können beispielsweise entscheiden, ob wir für x86-32 (PC) oder ARM (mobil) kompilieren möchten. In diesem Beispiel wählen wir x86-32.
- Passt die Parameter an die Fähigkeiten der Zielprozessorfamilie oder -generation an. Dies ist zu beachten, da Code aus einer höheren Generation möglicherweise nicht in einer früheren ausgeführt werden kann. Zu diesem Zeitpunkt haben wir beschlossen, Code für den Core i3 der 2. Generation zu erstellen.
- Es beginnt mit der Kompilierung des Codes und alle Unterprogramme wandeln ihn in Maschinencode um. Parallel dazu entscheiden Applets, wo optimiert werden soll und welche Optimierungen auf den Code angewendet werden sollen. Das Endergebnis ist unser Programm, das bereits kompiliert und zur Ausführung bereit ist.
In diesem Prozess ist die byzantinische Fehlertoleranz von entscheidender Bedeutung, da sie Folgendes garantiert:
- Dass Applets werden korrekt angewendet die Parameter und Optimierungen für die gewählte Architektur und Generation. Wenn Sie dies nicht tun, weist das Endergebnis Fehler auf und schlägt fehl.
- Die Anwendung von Optimierungen muss sicherstellen, dass sie das nicht meinen Datenvervielfältigung. Aber auch die Deduplizierung auf Binärebene sollte die Funktionsfähigkeit der Teile der Binärdatei nicht beeinträchtigen. An diesem Punkt ist eine byzantinische Fehleranalyse erforderlich und Compiler sollten in der Lage sein, diese zu analysieren.
Fall Nr. 2: Datenspeichersysteme
Ein weiterer Anwendungsfall für byzantinische Fehlertoleranz ist die Datenspeichersysteme. Viele Datenbanksysteme und sogar Dateisysteme implementieren es, um die Zuverlässigkeit der gespeicherten Daten zu verbessern. Ein Beispiel hierfür ist das Dateisystem ZFS. Dieses Archivierungssystem ist in der Lage, erweitertes Hashing, Replikation, Deduplizierung, Fehlerkorrektur sowie die Verarbeitung und Speicherung großer Datenmengen durchzuführen.
Um das zu erreichen, ZFS nutzt byzantinische Fehlertoleranzschemata, um Folgendes sicherzustellen:
- La Nichtauslassung elementarer Prozesse für Behandlung der gespeicherte Daten oder durch Speicherung im Dateisystem. Beispielsweise die Anwendung von Hashes auf Daten und Metadaten, Komprimierung, Fehlerkorrektur oder Deduplizierung.
- Dass bei der Datenverarbeitung keine unerwünschten Schritte unternommen werden. Beispielsweise eine Deduplizierung, die zum Verlust von Daten im System führt. Oder eine Fehlerbehebung, die Informationen beschädigt.
- Die Erstellen, Lesen und Schreiben von Prozessen in verschachtelten ZFS-Strukturen Sie verwenden diese Art von Techniken, um sicherzustellen, dass sie jederzeit konsistent sind.
Dank all dessen bewahrt ZFS die in seiner Struktur gespeicherten Daten sicher auf. Aus diesem Grund gilt es als das sicherste und fortschrittlichste Dateisystem der Computerwelt.
Fall Nr. 3: Avioniksysteme
Dies ist beim Flugzeug-Informationsmanagementsystem der Fall. Ein System, das in Echtzeit arbeitet und über byzantinische Fehlertoleranz verfügt.
Jeder Sensor des Flugzeugs kommuniziert mit den Befehls- und Kontrollsystemen und liefert Informationen in Echtzeit. Der Ausfall eines Sensors sollte zu keinem Zeitpunkt einen katastrophalen Ausfall für das Flugzeug bedeuten. Um dies zu erreichen, wird die byzantinische Fehlertoleranz verwendet. Dies dient dazu, die Daten des beschädigten Sensors oder der beschädigten Systeme zu kompensieren und die Sicherheit des Flugzeugs zu gewährleisten.
Tatsächlich ist die Anwendung der byzantinischen Fehlertoleranz an diesem Punkt eine ziemliche Herausforderung. Aufgrund der Anzahl der Systeme und der unterschiedlichen zu bewältigenden Szenarien. Die Avionik muss Fälle wie Rekonfiguration, Duplizierung oder den Ausfall ganzer Systeme berücksichtigen und dennoch Widerstand gegen diese Art von Ausfällen bieten. Auch wenn ein hundertprozentiger Widerstand unmöglich ist, leisten Ingenieure und Programmierer in dieser Hinsicht hervorragende Arbeit.
Fall Nr. 4: Blockchain-Konsensprotokolle
Konsensprotokolle in der Blockchain wie z PoW Sie sind tolerant gegenüber byzantinischen Fehlern. Diese ermöglichen es einem verteilten Netzwerk, unter byzantinischen Bedingungen einen Konsens zu erzielen. Wann Satoshi Nakamoto hat Bitcoin entworfen, berücksichtigte diese Art von Toleranz. Zu diesem Zweck erstellte er eine Reihe von Regeln und wandte das PoW-Konsensprotokoll an, um Software mit byzantinischer Fehlertoleranz zu erstellen. Allerdings beträgt diese Toleranz nicht 100 %.
Dennoch hat sich PoW als eine der sichersten und zuverlässigsten Implementierungen für Blockchain-Netzwerke erwiesen. In diesem Sinne wird der von Satoshi Nakamoto entwickelte Proof-of-Work-Konsensalgorithmus von vielen als eine der besten Lösungen für byzantinische Fehler angesehen. Po y DPoS Sie ihrerseits sind gegenüber byzantinischen Fehlern nicht völlig tolerant, weshalb sie meist durch andere Sicherheitsmaßnahmen ergänzt werden.
Vorteile und Nachteile
Vorteil
- Fähigkeit, die Korrektheit von Daten und Informationen in verteilten Systemen zu gewährleisten. Dies selbst unter feindlichen Szenarien für solche Aufgaben.
- Es löst das Problem der Informationsverarbeitung in heterogenen Umgebungen.
- Hohe Effizienz in rechnerischer und energetischer Hinsicht.
- Es bietet Implementierungen, die sich positiv auf die Skalierbarkeit auswirken, wenn sie gut aufgebaut sind.
- Je mehr Knoten die byzantinische Fehlertoleranz anwenden, desto sicherer ist das Modell.
Nachteile
- Die Erstellung dieser Lösungen ist komplex. Dies kann bei der Implementierung zu weiteren Sicherheitsproblemen führen.
- Um sein korrektes Funktionieren zu gewährleisten, ist eine zunehmende Verbreitung des Systems erforderlich. Je mehr Knoten den Prozess anwenden, desto sicherer ist er. Dies wirkt sich aber auch negativ auf die Skalierbarkeit und Bandbreite des Netzwerks aus.