I am studying the Algorand protocol. While reading about the theoretical BBA* protocol described by Micali in Byzantine Agreement, Made Trivial, I learned that a powerful adversary could send conflicting messages on behalf of a node. For instance, on behalf of node C, it could send ‘0’ to node A and ‘1’ to node B without being detected.
However, in the implementation of this protocol within the Algorand ecosystem, a gossip protocol is used. Therefore, theoretically, the powerful adversary should not be able to carry out this attack, right?
The protocol implementation has evolved quite a bit with respect to the one defined in the original research papers you shared.
For example, in that paper, the agreement protocol was based just on a rounds and steps(r,s) state machine and on a Binary Byzantine Agreement , named BBA⋆, that could lead to the proposal of a block or an empty block for a given round.
The notion of period used in the latest papers and in the implementation (i.e., new consensus attempt for the same round) replaces the outcome of BBA⋆ over an empty block for a round.