This is a demo reliable broadcast channel. The demo is for chatting -- each user can broadcast messages to all the other users, and if any of the users get the message all non byzantine nodes will also have recieved that message.
A Reliable Broadcast channel ensures that all honest parties deliver the same broadcasted message or none at all.
A Reliable Broadcast channel will work in the face of t
byzantine faults as long as t < n / 3
. Byzantine faults
are when nodes can lie or go down. This is a networking primitive that is required for many MPC applications, such as
threshold signatures schemes
Specifically, this project is an implementation of the Bracha Broadcast algorithm in Go.
This system is a fully connected graph. All nodes maintain mTLS connections with all other nodes, if the nodes
are up. The system supports nodes leaving and coming back in, but if t < n / 3
the system will not make progress
and messages during that time won't be delivered.
You need cfssl (https://github.com/cloudflare/cfssl) which this project uses to manage keys. Do the following to install it:
go get -u github.com/cloudflare/cfssl/cmd/...
Then specify the configuration of clients in config.json
. There should be 3f + 1
clients, where
f
is the number of byzantine nodes supported
To run the demo (which will build everything then run each client in a tmux window) run
make run
To do things manually, run make
-- it will generate all the required keys for you and build the binary
Then run:
client -config config.json -id $CLI_ID
This will run a particular client