Open
Description
It appears that we are using echo-broadcasting for two separate purposes:
- To simulate a verifiable broadcast. This is a common primitive required e.g. by CGGMP. While this worked fine for n-of-n scenarios, attempting to add threshold to the picture results in issues when faulty/malicious nodes are involved (see Proper threshold support #95).
- To collect data for a possible generation of an evidence of malicious behavior. For example, some check of an incoming message from a node
j
may use a value assembled from messages received from all nodes during one of the previous rounds. If the check fails, we can only use the data signed byj
in the evidence; this meansj
must echo all the received messages in that previous round so that during the evidence verification we could assemble the required value using only the data signed byj
.
We may also want one more similar functionality:
3. Ensure that all nodes agree on the total set of nodes that is still considered active. This can be used to make e.g. the returned key shares each contain the same set of public shares. Is that necessary?
These purposes need to have separate APIs associated with them, and they will probably have to use separate algorithms since we need different guarantees in either case.
Open question: for item 1, do we need reliable broadcast (Bracha's algorithm etc) or verifiable broadcast (more complicated)? Or perhaps abortable broadcast (https://arxiv.org/abs/2410.22080)? What does CGGMP need?
More links:
- Bracha's reliable broadcast: https://decentralizedthoughts.github.io/2020-09-19-living-with-asynchrony-brachas-reliable-broadcast/
- Verifiable information dispersal: https://decentralizedthoughts.github.io/2024-08-08-vid/
- A modern reliable broadcast scheme: https://arxiv.org/pdf/2404.08070v2