# Byzantinischer Fehler

Als byzantinische Fehler bezeichnet man in der Informationstechnik Fehler, bei denen sich ein System beliebig falsch verhält. Beispielsweise schickt ein Server gelegentlich falsche Antworten und erreicht gelegentlich falsche Systemzustände. Ein byzantinischer Fehler beschreibt im Allgemeinen ein schwer zu erfassendes Fehlermodell.
In Mehrprozessor-Systemen bezeichnet der byzantinische Fehler eine Fehlerklasse. Falls eine Komponente an verschiedene Prozessoren unterschiedliche (protokollkonforme) Ergebnisse liefert, spricht man von einem byzantinischen Fehler. Bei der Planung wird davon ausgegangen, dass $x$ Prozessoren bösartig arbeiten und das System maximal stören wollen.

## Herkunft der Bezeichnung

Das Adjektiv byzantinisch bezieht sich auf das Problem der byzantinischen Generäle. Bei der Belagerung einer Stadt haben mehrere Generäle ein Kommunikationsproblem. Wegen der starken Befestigung ist es notwendig, dass die Generäle mit ihren Truppen die Stadt gleichzeitig aus verschiedenen Richtungen angreifen. Die Generäle können über Boten miteinander kommunizieren. Allerdings intrigieren einige der Generäle gegen andere. Ihr Ziel ist es, ihre Konkurrenten in Misskredit zu bringen – beispielsweise dadurch, dass sie die anderen durch geschickt gestreute Fehlinformationen zu einem verfrühten Angriff treiben wollen. Keiner der Generäle weiß nun, welche Information authentisch ist und wem er vertrauen kann.
Es geht also um ein Problem der Übereinkunft, welches darin besteht, dass die Heerführer einstimmig beschließen müssen, ob sie angreifen oder nicht. Kompliziert wird das Problem durch die räumliche Trennung der Befehlshaber; sie müssen also Boten hin- und herschicken. Außerdem kommt die Möglichkeit hinzu, dass sich unter den Generälen Verräter befinden können, die an die anderen Generäle absichtlich irreführende Informationen schicken können.
Mathematisch zeigte sich, dass die loyalen Generäle unter diesen Voraussetzungen nur dann eine Einigungschance haben, wenn der Anteil der Intriganten kleiner als ein Drittel ist. Somit gab es insbesondere bei drei Generälen, von denen einer ein Intrigant ist, keine Lösung – jedenfalls nicht mit Hilfe klassischer Kommunikationsmethoden wie Boten.

## Lösungen

Die erste Veröffentlichung mit Lösungen zum Problem der byzantinischen Generäle geht zurück auf Leslie Lamport, Robert Shostak und Marshall Pease im Jahr 1982. Sie führten das Problem auf ein Problem von Befehlshaber und Leutnant zurück, wobei alle loyalen Leutnants in Einklang handeln müssen und ihre Aktionen mit den Befehlen des Befehlshabers übereinstimmen müssen, wenn dieser loyal ist. Kurz, der General wählt, indem er alle anderen Befehle als Wahlstimmen behandelt.
* Eine erläuterte Lösung beachtet das Szenario, bei dem Nachrichten gefälscht werden. Solange der Anteil der verräterischen Generäle kleiner als ein Drittel ist, ist diese Lösung tolerant gegenüber einem byzantinischen Fehler. Die Unmöglichkeit, mit einem Drittel oder mehr Verrätern umgehen zu können, reduziert das Problem auf den Beweis, dass der Fall mit einem Befehlshaber und zwei Leutnants nicht lösbar ist, wenn der Befehlshaber ein Verräter ist. Wenn es drei Befehlshaber $(A,B,C)$ gibt, wobei $A$ der Verräter ist und $B$ von $A$ die Nachricht „Angriff“ und $C$ von $A$ die Nachricht „Rückzug“ erhält, dann können weder $B$ noch $C$ bestimmen, wer der Verräter ist, wenn sie sich gegenseitig die Nachricht von $A$ senden. $A$ muss nicht unbedingt der Verräter sein, da ja auch $B$ oder $C$ die Nachricht von $A$ verändert haben kann.
    Wenn $n$ die Anzahl der Generäle ist und $t$ die Anzahl der Verräter innerhalb von $n$ ist, gibt es nur eine Lösung, wenn $n\geq 3\cdot t+1$ ist. D. h., dass es bei einem Verräter erst bei vier Generälen eine Lösung gibt, da: $n\geq 3\cdot 1+1\Rightarrow n\geq 4$. Bei zwei Verrätern braucht man also bereits mindestens sieben Generäle, da: $n\geq 3\cdot 2+1\Rightarrow n\geq 7$
* Eine zweite Lösung benötigt nicht fälschbare Signaturen (in modernen Computersystemen wird das durch Public-Key-Kryptographie erreicht). Diese erhält Fehlertoleranz bei beliebiger Anzahl verräterischer Generäle. Eine mit dieser Lösung verwandte Implementierung ist die Blockchain.
* Eine weitere Lösung ist eine Variation der ersten beiden Lösungen, die Byzantinischer-Fehler-Toleranz erreicht, wenn nicht alle Generäle direkt miteinander kommunizieren können.