CS251_Final_Exam_2021-stanford.edu-2
Problem 2. [20 points]: Byzantine broadcast.
Consider n parties, where n ≥ 3, and where one of the parties is designated as a sender. The sender has a bit b ∈ {0, 1}. A broadcast protocol is a protocol where the parties send messages to one another, and eventually every party outputs a bit bi , for i = 1, . . . , n, or outputs nothing.
We say that the protocol has consistency if for every two honest parties, if one party outputs b and the other outputs b’ , then b = b’ .
We say that the protocol has validity if when the sender is honest, the output of all honest parties is equal to the sender’s input bit b.
We say that the protocol has totality if whenever some honest party outputs a bit, then eventually all honest parties output a bit.
A reliable broadcast protocol (RBC) is a broadcast protocol that satisfies all three properties. Let us assume that there is a public key infrastructure (PKI), meaning that every party has a secret signing key, and every party knows the correct public signature verification key for every other party.
In a synchronous network, consider the following broadcast protocol:
step 0: The sender sends its input bit b (along with its signature) to all other parties. The sender then outputs its bit b and terminates.
step 1: Every non-sender party i echoes what it heard from the sender to all the other non-sender parties (with i’s signature added). If the party heard nothing from the sender, it does nothing in this step. Similarly, the party does nothing in this step if the sender’s message is malformed: for example, if the sender’s signature is invalid, or the message is not a single bit.
step 2: Every non-sender party collects all the messages it received (up to n−1 messages, with at most one from the sender in step 0 and at most one from each non-sender party in step 1). If some two of the received messages contain a valid signature by the sender, but for opposite bits (i.e., in one signed message the bit is 0 and in the other signed message the bit is 1) then the sender is dishonest and the party outputs 0 and terminates. Otherwise, all the properly signed bits from the sender are the same, and the party outputs that bit. If the non-sender received no messages, it outputs nothing.
For each of the following questions, describe an attack or explain why there is no attack.
A) If there is at most one dishonest party, does the protocol have consistency?
answer - a dishonest party have options as below in step 1 & 2 to cheat a honest part:
don’t answer / response;
broke sender’s signature but cannot make a fake/wrong bit b, because broken signature cannot verify correct.
broke node’s signature itself.
If the sender is a dishonest party, in step 0, dishonest part can send b to some parties, and send a different b’ to other parties. Then it don’t have consistency. If the sender is a honest part, the dishonest party don’t response, so other nodes can’t accumulate “all the properly signed bits from the sender are the same, and the party outputs that bit”, then other nodes have no response. Then it still don’t have consistency.
B) If there is at most one dishonest party, does the protocol have validity?
answer - dishonest party don’t response any message , and make other nodes cannot reach “all the properly signed bits from the sender are the same, and the party outputs that bit.” So this protocol don’t have validity.
C) If there are at most two dishonest parties, show that the protocol does not have consistency.
answer - As answer A)
D) If there are at most two dishonest parties, does the protocol have validity?
answer - two dishonest parties can send out the same dishonest message or they don’t response, and make other nodes cannot reach “all the properly signed bits from the sender are the same, and the party outputs that bit.” So this protocol don’t have validity.
E) Does the protocol have totality (for any number of dishonest parties)?
answer - It assume that this protocol run in a reliable broadcast protocol (RBC). But the dishonest party can send a (or some) correct response to one (or some other) party, but don’t response any message to one (or some other) party in step 1. Dishonest party also can do the same in step 0. So these honest party cannot have the same result. Then this protocol don’t have totality.