Resources
CS198.2x Week - Byzantine Fault Tolerance
Involved parties must agree on a single strategy to avoid complete a complete failure, but some of the involved parties may be corrupt or unreliable. The corrupt/unreliable nodes are called Byzantine nodes and there's no solution to the problem when >= 1/3 nodes are byzantine.
paper CS198.2x Week 1 - Practical Byzantine Fault Tolerance
PBFT handles < 1/3 byzantine faults/nodes. Has three phases: "pre-prepare", "prepare", and "commit"
client
sends information to primary node (e.g. derrick
)nadir
drops out due to network troublesrustie
, gloria
, nadir
)(f are adversarial nodes, but how do we know the # of f? maybe assume 1/3?)
PBFT considers consensus but not sybil attacks. I.e. in the generals problem, N byzantine nodes could be the same corrupt general. Nakamoto Consensus handles sybil attacks via requiring block generation ability to be proportional to computational power available through the proof-of-work mechanism (i.e. it's a unique consensus mechanism because it's baked in, but PBFT and many other consensus mechanisms don't have baked in Sybil resistance).
There are however straightforward solutions like using "weighted users"1