Rabin, M.
Luis Manuel Román García
Proceedings of Twenty - Fourth IEEE Annual Symposium on Foundations of Computer Science, pp. 403 - 409, 1983.
Let be processes and lets assume that every can communicate with every via messages
Every has a message , called 's initial message and they have to agree on a common value for the message.
As long as a computes according to it is called proper. Once a process deviates from it is faulty.
The processes in a set are said to reach an agreement about the value of the message if each , does stop, and at the end of the execution of their protocols, message(i) = message(j)
We say that the proper processes have reached Byzantine Agreement if:
Let n and t < n be integers. A set of protocols for the processes , is a solution for the Byzantine Generals problem for (n, t) if the following holds:
Let S be a system of processes computing according to and assume that no more than t processes become faulty. Then, whenever the processes have initial messages, the proper will reach Byzantine Agreement.
A phase in the computation of a proper , is the time interval between 's request for information from k other processes, and receipt of at least k-t replies. The computation time required by , once the information is received, is also included in the phase.
We assume that each process has a local phase-clock
, and that assigns at the end of each phase.
One implementation is to have a public directory holding for each participant B a public key . When the participant needs to authenticate a message M, he employs a secret key to compute another message .
Every user can recover M from N by using
To avoid fraudulent message passing, every process incorporates its current reading . Therefore sending a message:
The public key directory is part of the data in each and must be incorporated by a non-faulty "dealer" at the creation of the processes
Eleven scientists are working on a secret project. They wish to lock up the documents in a cabinet so that the cabinet can be opened only if more than half (at least six) of the scientists are present. What is the smallest number of locks needed? What is the smallest number of keys to the locks each scientist must carry?
It is not hard to see....
456 locks
252 keys per scientist
More general problem:
The secret is some data D, our goal is to divide D into pieces in such a way that:
Idea:
Pick a random polynomial q(x) of degree k-1. in which
Evaluate
We are going to suppose a dealer that is a non-faulty process D which prepares in advance the programs for the individual 's. The dealer D takes k = t+1 to be the bound on the number of faulty processes.
It randomly and independently generates a sequence
where each or
Then the dealer computes
And sends to every process the sequence:
When playing lottery(m), requests from 2t other processes their
begin
message(i) :=Mi; {Gi's initial message}
For k = I to k = R
do {k local to Pi}
begin
Polling; {k is a parameter of Polling}
Lottery; {k is a parameter of Lottery}
Decision
end {For}
end; {BAP}
begin
send sigma_i(message(i),k) to all;
request the k-th version of message(j) from all;
collect incoming sigma_j(message(j),k), until n - t values received;
temp (i) := that M which occurred most often among the received
(message(j) ,k);
count (i) := |{j : (message (j) ,k) = (temp(i) ,k) }|
end;
begin
ask for E_j_k from all;
send E_i_k to all;
wait until t different values of E_j_k have arrived;
compute s_k from E_i_k and the available E_j_k;
end;
begin
s:=s_k; {s_k is the current secret for G_i}
if (s = 0 and n/2 <= count(i)) or (s = 1 and n-2t <= count(i)) then
message(i):=temp(i)
else
message(i):="system faulty"
end;
Let . All the proper processes will end their execution of BAP. If the system is proper and the initial message of every proper process is M, then at the end of BAP we shall have message(i) = M for all proper .
If the system is faulty then at the end of BAP, with probability at least all proper processes will have the same value for message(i).
Key observation, if the proper processes enter the k-th iteration of the For statement of BAP in a state where all have the same value V, then they will end that iteration with the value message(i)=V.
Key observation, if the proper processes enter the k-th iteration of the For statement of BAP in a state where all have the same value V, then they will end that iteration with the value message(i)=V.
begin
send sigma_i(message(i),k) to all;
request the k-th version of message(j) from all;
collect incoming sigma_j(message(j),k), until n - t values received;
temp (i) := that M which occurred most often among the received
(message(j) ,k);
count (i) := |{j : (message (j) ,k) = (temp(i) ,k) }|
end;
In particular, if the system is proper and its initial message is M for all proper processes, then all proper will have message(i)=M at the end of BAP.
Consider the first proper process to have finished its k-th iteration of Polling. Let (w.l.o.g)
Be the set of proper processes of whom received a response
And let be any proper process.
Suppose now that not all proper processes in H have the same initial message.
Suppose there exists a V such that for at least n-4t proper processes message(j) = V.
CASE 1:
Hence at the end of it's polling phase, would have received at least n - 5t messages from of the form message(j) = V.
Therefore:
temp(m) = V and
With probability we have that independently of the condition on H.
Therefore:
With probability we have that message(m) = V
Since is an arbitrary proper process, this is true for every proper process. Hence we reach an agreement.
Suppose
CASE 2
There are at least n-3t responses that receives from H. Therefore at most 2t responses from outside.
CASE 2
Even if all these responses are of the form , we have that:
If now then at the end of the k-th invocation message(m)="system faulty"
CASE 2
In both cases the probability of not reaching and agreement is of hence after R independent lotteries, the probability of not reaching an agreement is . Hence the probability of reaching an agreement after R lotteries is
Key observation:
If some process finds that then necessarily every other proper will have
. Hence message(j) = temp(j) at the end of Decision.
begin
s:= s_k_i;
if(s = 0 and n/2 <= count(i)) or (s = 1 and n-2t <= count(i)) then
message(i):= temp(i)
else
message(i):="system faulty";
if(s = 0 and n-2t <= count(i)) then
send sigma_i ("agreement reached on V") to all Gj;
k(i) := k(i) + 1 {update the index of the secret to be shared}
end;
begin
inround(i) := true;
k(i):=1;
message(i) := Mi {the initial message for Gi}
repeat
begin
Polling;
Lottery;
Decisionproof {increase k(i) by 1 each time}
end
end;{ETBAP}
begin
repeat
If received new sigma_j("agreement reached on V") {Gi's own
comunication of this form is included. V may differ for faulty
Gi}
then send sigma_j("agreement reached V")
to all
until t + 1 communications with the same V are counted;
message(i):=V;
inround(i):=false;
end;{Closefinish}
Within an expected number of four rounds of iterations of the loop ETBAP, every proper will send
("agreement reached on V") for some V
This algorithm covers fully the asynchronous case of BGP.
The solution as written here requires a total of messages. This can be readily reduced to
Under appropriate assumptions the solution is resilient. Transient failures of processes in agreement round do not affect subsequent rounds.