Open jalora opened 6 years ago
Problem statement: A commanding general must send an order to his n - 1
lieutenant generals s.t. the following interactive consistency conditions are met:
Impossibility: Byz consensus cannot be achieved if 1/3 or more generals are traitors.
3m
or fewer generals (w/ m
traitors) by allowing at most m
generals to be simulated by each general in the 3-generals model. Essentially, transform m-generals problem to 3-generals problem.Byzantine Assumptions
m
traitors)Unsigned Messages: OM(m)
<1/3
traitors, since it allows traitors to lie about the message they pass (regardless if the message was passed from a loyal or traitorous general)Algorithm
i
propagates received values to all other lieutenants (not including himself)
(n-1)...(n-m)
times once algorithm unfoldsn
generals (P(n-1,m) = (n-1)!/(n-m-1)!
) after m
executionsSigned Messages: SM(m)
m
traitors and m+2
or more loyal generalsAlgorithm
i
v
is from commander, send to v:0:i
to all other lieutenants, and set V_i = {v}v:0:j_1:...:j_k
), set V_i + {v} if {v} not in V_i
k < m
, send message v:0:j_1:...:j_k:i
to all other lieutenants not in {j_1,...,j_k}choice(V_i)
OM(m)
can be extended to 3m-regular
graphs of generals
3m+1
generals, then this is basically a completely connected graphOM(m,p)
(Extension of OM(m)
to a p-regular
graph):
i
i
propagates his values to all his neighbors, with each neighbor lieutenant j
executing OM(m-1, p-1)
(modified graph that removes original commander and makes lieutenant i
the new commander)i
executes the majority orderSM(m)
can be extended to allow for the least amount of connectivity
SM(m)
i
sends signed message to only other neighboring lieutenantsSM(n-2)
, for any n
generals, and any number m
traitors, solves the BG problem if all loyal generals are connected.
SM(m+d-1)
(where d
is the furthest distance from a loyal general to another) still solves the BG problemm
adversariesSM(m+d-1)
handles this general case through m
and d
(if the communication path between non-adversarial systems are broken)mu
tau
if T_ij in [T_0, T_0 + mu + tau] then "valid message", else "sender faulty"
where T_i
is time to generate and send message from system i
to system j
and T_0
is a universal time between i
and j
Overview: Show that the lower bound time complexity for a t-resilient crash consensus protocol is t+1
rounds. Detail protocol specifications and a BG algorithm that solves problem.
Weak Byzantine General's Problem:
note:
round = 1) send 2) receive
[r+1] = 1...r+1
r
(Lemma 1)Defn 3, part 4
, and after it sends its message.r-Regularity
(Definition 5
)s in [r + 1]
i.e. |CR[S](s)| <= s - 1
round 1
r-Regularity
implies that at most 1 process can fail per round (assuming continuous fault) at each round = this is k-fault.f+1
= f-fault. e.g. CR[S](2) = 1, CR[S](3) = 1, CR[S](4) = 3
then it will resolve in round 2Theorem 1: There does not exist a t-crash resilient
, t-round
Weak Byzantine General's Algorithm.
t-crash resilient
, t-round
Weak Byzantine General's Algorithm.there exists S^j s.t. Val_p[S^j] = {v: if p <= k, u: if p > j} and C[S^j] = {}
S^0 = u
and S^k = v
, implying that there exists p
s.t. S^{p-1}
and S^p
have different public values. (Contradiction Criteria)S^{p-1}
and S^p
can continue their execution through round k
and only have some process p
fail during round 1
. (note: S^{p-1}
and S^p
are 1-regular
scenarios.)p
is the only process that crashes in these two scenarios, by Lemma 2 part B, the execution should look the same for all non-crashed processes between S^{p-1}
and S^p
.S^{p-1}
and S^p
must be the same (Contradiction).See very sketch proof on page 26. Essentially, in the worst case, there exists no algorithm that can achieve consensus after t
rounds in a t-crash
protocol since only t
processors (through which v
passes through) out of the total k
will be in consensus, while k-t
pick different values.
**Round 1:** Process 1 sends value 'v' to all processes
**Round r, where 1 < r <= t+1:** Each process
1. If it received 'v' in {0, 1} from **any** process in r-1 then...
- Choose 'v' as public value, i.e. V = {v}
- send 'v' to all other processes
- halt
2. if it received an "I don't know" from **every** other process then...
- Choose 'null' as public value, i.e. V = {null}
- send 'null' to all other processes
- halt
3. Send an "I don't know" to all processes
t+1
rounds to come to consensus, but it is possible for consensus to be achieved faster (e.g. v
is sent to some process that doesn't fail in the next round)t+1
rounds because there must exist a round where no process fails s.t. v
can be sent to all other processes.
September 2018