The Byzantine Generals Problem

L. Lamport, R. Shostak and M. Pease. ACM Transactions on Programming Languages and Systems, 4(3):382-401, July 1982


Notes by Indranil Gupta, March 08, 1999.

Adapted from

Thanks to: Xun Wilson Huang, Lawrence Kesteloot.


Problem Statement: Byzantine Generals Problem(BGP)

The setting: There are n generals, one of them the commanding general. Generals can send (and receive) messages from other generals.

The problem: Develop a communication protocol for the commanding general to send an order to the n-1 lieutenant generals so that

  1. All loyal lieutenants obey the same order
  2. If the commanding general is loyal, every loyal lieutenant obeys the order he sends.

Adversary: Any of the generals could be traitors i.e., could send inconsistent messages regarding the order to other generals.


Impossibility Results


I. A solution with oral messages for n > 3m

A solution for BGP with n > 3m and upto m traitors, is given.

Oral message system properties:

Every general can send a message to every other general.

Solution in brief:

Note: If the commander is not a traitor, we can be done in 2 rounds. If the commander is a traitor, you may need upto m+1 rounds.

II. A solution with (unforgable) signed messages

The difficulty of BGP is in the ability of a traitor lieutenant to lie about the commander's order. If we can restrict this ability by making the following assumptions, BGP is solvable with any number of traitors as long as their maximum number is known.

Signed messages:

Again, assume a fully connected message graph among the generals.

Solution in brief:

Uses a majority-like function called choice.

The solution:

The algorithm is to make all loyal lieutenants keep the same set of V, thus choice(V) is the same. If the commander is loyal, the algorithm works because all loyal lieutenants have the correct order by round 1 and by unforgablity no more orders can be produced. If the commander is not loyal, by running the algorithm to round m+1, at least one loyal lieutenant will get the order before round m( because there are only m traitors). And that loyal lieutenant will send it to all others. In short, if one loyal lieutenant gets an order, all loyal lieutenants will get it in the next round.

III. IV. Relaxing the assumption on full-connectivity of the generals graph - extending above solutions

The previous 2 solutions can be extended to relax the assumption that the message graph among the generals is fully connected.


Practical use of BGP in building real life systems

The best way to provide faul-tolerant decision-making in redundant systems is by majority voting. A faulty input devices may generate meaningless inputs, but majority voting would ensure that the same meaningless values are used.

For majority voting to yield a reliable system, the following 2 conditions must be satisified

  1. All non-faulty processors  must use the same input value
  2. If input unit is non-faulty, then all non-faulty processes use the value it provides

But these are just the requirements of the BGP !

So we can apply the above solutions to the BGP in real-life. Now what about the practicality of the assumptions made by those solutions ?

About A1: In real life, link failures occur. However, link failures are indistinguishable with failures of processors, therefore we can count the link failures as one of the m. Signed message is insensitive to link failures because no message can be forged even if links fail.

About A2: What is actually required is that no traitor can forge a non-faulty process' message. A2 not needed in the solution with signed messages.

About A3: In an asynchronous system, this condition cannot be satisfied. It is usually implemented via time-outs.

About A4: Signing message has 2 aspects:


Further Observations


Critique and Questions


Further readings

Impossibility/necessity results

  1. Fischer, M. J., Lynch, N. A., and Paterson, M. S. ``Impossibility of Distributed Consensus with One Faulty Process,'' J. ACM 32, 2 (April 1985), 374--382.
  2. Dolev, D., Dwork, C., and Stockmeyer, L. ``On the Minimal Synchronism Needed for Distributed Consensus,'' J. ACM 34, 1 (January 1987), 77--97.

Approximate agreement

  1. Bracha, G. ``An O(log n) Expected Rounds Randomized Byzantine Generals Protocol,'' J. ACM 34, 4 (October 1987), 910--920.
  2. Bracha, G. and Toueg, S. ``Asynchronous Consensus and Broadcast Protocols,'' J. ACM 32, 4 (October 1985), 824--840.
  3. Ben-Or, M. ``Another Advantage of Free Choice: Completely Asynchronous Agreement Protocols,'' ACM Symposium on Principles of Distributed Computing, 1983, 27--30.
  4. Dolev, D., Lynch, N. A., Pinter, S. S., Stark, E. W., and Weihl, W. E. ``Reaching Approximate Agreement in the Presence of Faults,'' J. ACM 33, 3 (July 1986), 499--516.
  5. Dolev, D., Ruediger, R., and Strong, H. R. ``Early Stopping in Byzantine Agreement,'' J. ACM 37, 4 (October 1990), 720--741.
  6. Hadzilacos, V. and Halpern, J. Y. ``Message-Optimal Protocols for Byzantine Agreement,'' ACM Symposium on Principles of Distributed Computing, 1991, 309--323.
  7. Halpern, J. Y., Moses, Y., and Waarts, O. ``A Characterization of Eventual Byzantine Agreement,'' ACM Symposium on Principles of Distributed Computing, 1990, 333--346.

Failure detectors

  1. Chandra, T. D., Hadzilacos, V., and Toueg, S. ``The Weakest Failure Detector for Solving Consensus,'' ACM Symposium on Principles of Distributed Computing, 1992, 147--158.
  2. Chandra, T. D. and Toueg, S. ``Unreliable Failure Detectors for Asynchronous Systems,'' ACM Symposium on Principles of Distributed Computing, 1991, 325--340.