Title: Byzantine fault tolerance
1Byzantine fault tolerance
- Jinyang Li
- With PBFT slides from Liskov
2What weve learnt so fartolerate fail-stop
failures
- Traditional RSM tolerates benign failures
- Node crashes
- Network partitions
- A RSM w/ 2f1 replicas can tolerate f
simultaneous crashes
3Byzantine faults
- Nodes fail arbitrarily
- Failed node performs incorrect computation
- Failed nodes collude
- Causes attacks, software/hardware errors
- Examples
- Client asks bank to deposit 100, a Byzantine
bank server substracts 100 instead. - Client asks file system to store f1aaa. A
Byzantine server returns f1bbb to clients.
4Strawman defense
- Clients sign inputs.
- Clients verify computation based on signed
inputs. - Example C stores signed file f1aaa with
server. C verifies that returned f1 is signed
correctly. - Problems
- Byzantine node can return stale/correct
computation - E.g. Client stores signed f1aaa and later
stores signed f1bbb, a Byzantine node can
always return f1aaa. - Inefficient clients have to perform computations!
5PBFT ideas
- PBFT, Practical Byzantine Fault Tolerance, M.
Castro and B. Liskov, SOSP 1999 - Replicate service across many nodes
- Assumption only a small fraction of nodes are
Byzantine - Rely on a super-majority of votes to decide on
correct computation. - PBFT property tolerates ltf failures using a RSM
with 3f1 replicas
6Why doesnt traditional RSM work with Byzantine
nodes?
- Cannot rely on the primary to assign seqno
- Malicious primary can assign the same seqno to
different requests! - Cannot use Paxos for view change
- Paxos uses a majority accept-quorum to tolerate f
benign faults out of 2f1 nodes - Does the intersection of two quorums always
contain one honest node? - Bad node tells different things to different
quorums! - E.g. tell N1 acceptval1 and tell N2 acceptval2
7Paxos under Byzantine faults
Prepare vid1, mynN01 OK valnull
N2
N0
N1
nhN01
nhN01
Prepare vid1, mynN01 OK valnull
8Paxos under Byzantine faults
accept vid1, mynN01, valxyz OK
N2
X
N0
N1
N0 decides on Vid1xyz
nhN01
nhN01
9Paxos under Byzantine faults
prepare vid1, mynN11, valabc OK valnull
N2
X
N0
N1
N0 decides on Vid1xyz
nhN01
nhN01
10Paxos under Byzantine faults
accept vid1, mynN11, valabc OK
N2
X
N0
N1
N0 decides on Vid1xyz
nhN11
nhN01
N1 decides on Vid1abc
11PBFT main ideas
- Static configuration (same 3f1 nodes)
- To deal with malicious primary
- Use a 3-phase protocol to agree on sequence
number - To deal with loss of agreement
- Use a bigger quorum (2f1 out of 3f1 nodes)
- Need to authenticate communications
12BFT requires a 2f1 quorum out of 3f1 nodes
1. State
2. State
3. State
4. State
A
A
A
Servers
X
write A
write A
write A
write A
Clients
For liveness, the quorum size must be at most N -
f
13BFT Quorums
1. State
2. State
3. State
4. State
A
A
B
B
B
Servers
X
write B
write B
write B
write B
Clients
For correctness, any two quorums must intersect
at least one honest node (N-f) (N-f) - N gt
f1 N gt 3f1
14PBFT Strategy
- Primary runs the protocol in the normal case
- Replicas watch the primary and do a view change
if it fails
15Replica state
- A replica id i (between 0 and N-1)
- Replica 0, replica 1,
- A view number v, initially 0
- Primary is the replica with id
- i v mod N
- A log of ltop, seq, statusgt entries
- Status pre-prepared or prepared or committed
16Normal Case
- Client sends request to primary
- or to all
17Normal Case
- Primary sends pre-prepare message to all
- Pre-prepare contains ltv,seq,opgt
- Records operation in log as pre-prepared
- Keep in mind that primary might be malicious
- Send different seq for the same op to different
replicas - Use a duplicate seq for op
18Normal Case
- Replicas check the pre-prepare and if it is ok
- Record operation in log as pre-prepared
- Send prepare messages to all
- Prepare contains lti,v,seq,opgt
- All to all communication
19Normal Case
- Replicas wait for 2f1 matching prepares
- Record operation in log as prepared
- Send commit message to all
- Commit contains lti,v,seq,opgt
- What does this stage achieve
- All honest nodes that are prepared prepare the
same value
20Normal Case
- Replicas wait for 2f1 matching commits
- Record operation in log as committed
- Execute the operation
- Send result to the client
21Normal Case
- Client waits for f1 matching replies
22BFT
23View Change
- Replicas watch the primary
- Request a view change
- Commit point when 2f1 replicas have prepared
24View Change
- Replicas watch the primary
- Request a view change
- send a do-viewchange request to all
- new primary requires 2f1 requests
- sends new-view with this certificate
- Rest is similar
25Additional Issues
- State transfer
- Checkpoints (garbage collection of the log)
- Selection of the primary
- Timing of view changes
26Possible improvements
- Lower latency for writes (4 messages)
- Replicas respond at prepare
- Client waits for 2f1 matching responses
- Fast reads (one round trip)
- Client sends to all they respond immediately
- Client waits for 2f1 matching responses
27PBFT inspires much follow-on work
- BASE Using abstraction to improve fault
tolerance, R. Rodrigo et al, SOSP 2001 - R.Kotla and M. Dahlin, High Throughput Byzantine
Fault tolerance. DSN 2004 - J. Li and D. Mazieres, Beyond one-third faulty
replicas in Byzantine fault tolerant systems,
NSDI 07 - Abd-El-Malek et al, Fault-scalable Byzantine
fault-tolerant services, SOSP 05 - J. Cowling et al, HQ replication a hybrid quorum
protocol for Byzantine Fault tolerance, OSDI 06 - Zyzzyva Speculative Byzantine fault tolerance
SOSP 07 - Tolerating Byzantine faults in database systems
using commit barrier scheduling SOSP 07 - Low-overhead Byzantine fault-tolerant storage
SOSP 07 - Attested append-only memory making adversaries
stick to their word SOSP 07
28Practical limitations of BFTs
- Expensive
- Protection is achieved only when lt f nodes fail
- Is 1 node more or less secure than 4 nodes?
- Does not prevent many classes attacks
- Turn a machine into a botnet node
- Steal SSNs from servers