Lessons 1/4 · 20 min
Crash or Byzantine fault: what can be observed
The starting question
Seven cashiers, in seven cities, each keep a copy of the same ledger. One morning, one of them stops answering. Another answers, but says "yes" to the Douala cashier and "no" to the Garoua cashier for the same question. Do these two incidents look alike? Treating them the same way would be a serious mistake.
The types of faults
| Type | Behaviour | What can be observed |
|---|---|---|
| Crash fault | the node stops and does nothing more | silence; never a false message |
| Omission | the node loses or ignores some messages | intermittent silences |
| Byzantine fault | arbitrary behaviour: lying, silence, different messages depending on the recipient, collusion with other faulty nodes | messages that look correct but contradict each other |
The name comes from the "Byzantine generals problem" (Lamport, Shostak and Pease, 1982): generals must decide together whether to attack, while some are traitors and lie.
A Byzantine fault is not necessarily malicious: a corrupted bit in memory, a software bug or a wrong configuration also produce arbitrary behaviour. But in security we assume the worst: an adversary who knows the protocol.
Why the second costs more
Facing a crash, a reliable node can reason: "what it told me was true". It may only lack information. Facing a Byzantine node, nothing it says is trustworthy, and it can say different things to each peer (this is called equivocation). You must cross-check testimonies, and you need more of them.
A worked example: three nodes, without signatures
Three nodes A, B, C exchanging oral messages (no signatures: each relays what it heard, without proof). A wants to know whether C voted "yes" or "no".
- If C crashed: A hears nothing from C. A knows one voice is missing.
- If C is Byzantine: C says "yes" to A and "no" to B. A asks B: B answers "C told me no". A sees two versions, but cannot know whether C or B is lying: from A's viewpoint the contradiction is symmetric. Without signatures, with three nodes and one faulty, it is impossible to decide. With signatures the diagnosis becomes possible (see below), but lesson 3 shows that a quorum-based protocol still needs at least 4 nodes.
The role of signatures (workshop 105)
If messages are signed, B cannot lie about what C said: it can only present messages really signed by C. But that does not stop C from signing "yes" for A and "no" for B. A signature proves who said what, not that what is said is true or unique. On the other hand, two contradictory messages signed by C constitute a proof of equivocation: anyone can verify that C contradicted itself. This is the basis of automatic punishment (slashing) in some protocols. With signatures, A can therefore establish C's contradiction, but only after the fact: the decision may have been taken in the meantime.
Tolerating crashes: 2f + 1
If we assume only crashes, a majority suffices: with n = 2f + 1 nodes, f can fall and the remaining f + 1 still form a majority. Three nodes tolerate 1 crash; five tolerate 2. This is the model of replication protocols such as Paxos or Raft. It assumes that no node lies.
Your turn
In quorum-sim, set 7 validators and switch one to "offline", then another to "Byzantine". Compare the quorum's behaviour: the offline node removes a voice; the Byzantine one can supply a false or contradictory one.
What this does NOT guarantee
Classifying an incident as a crash is an assumption: a silent node can be Byzantine (it keeps quiet on purpose), and a slow node can pass for dead (lesson 1 of workshop 107).
Recap
- Crash: the node goes quiet, does not lie. Byzantine: arbitrary behaviour, including saying different things to each peer.
- Signatures attribute messages but do not prevent equivocation; they make it provable.
- Crashes only: 2f + 1 nodes. Byzantine faults: more, as we shall see.
Interactive tool
BFT quorum simulator
Click a validator to change its state: honest, offline, then Byzantine (malicious or arbitrarily faulty).
n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5
7 honest, 0 offline, 0 Byzantine.
✓ Can decide: 7 honest online validators ≥ quorum 5. The network can gather a quorum and finalise blocks.
✓ Safety guaranteed by the model: 0 Byzantine ≤ f = 2. Any two quorums overlap in at least one honest validator, so no conflicting decisions.
Classic BFT model: n ≥ 3f + 1 validators tolerate up to f faulty ones (offline or Byzantine). A quorum is 2f + 1 votes. Losing liveness = the network stops making progress, but nothing wrong is decided. Losing safety = conflicting decisions become possible, which is worse. Liveness additionally assumes a network that eventually delivers messages. This is only a model: real protocols have other assumptions and thresholds.
