← back to distributed systems

Byzantine Fault Tolerance

Lamport, Shostak, Pease 1982 · Castro & Liskov 1999 · wpWikipedia

The Byzantine generals problem: nodes can send contradictory messages. To tolerate f Byzantine faults, you need at least 3f + 1 nodes. With fewer, a traitor can make honest nodes disagree. PBFT (Practical Byzantine Fault Tolerance) makes this work in practice with three rounds of communication.

Byzantine generals problem

Generals surround a city. They must agree to attack or retreat. Some generals are traitors who send conflicting messages. The loyal generals must all reach the same decision, and if they all start with the same preference, that preference must win. With fewer than 3f + 1 generals, f traitors can prevent agreement.

G1 loyal G2 loyal G3 loyal G4 traitor attack attack attack retreat
Scheme

PBFT overview

Practical BFT (Castro and Liskov, 1999) works in three phases: pre-prepare (leader assigns sequence number), prepare (2f+1 nodes agree on order), commit (2f+1 nodes confirm). Total messages per request: O(n^2). Expensive, but it works with Byzantine faults and has been deployed in production systems.

Scheme
Neighbors

Cross-references