[Design]: Redesign of Distributed Key Generation #1286
Labels
design
making a design decision.
key rotation
The functionality to rotate a private key for a signer in sBTC-v1.
sbtc signer binary
The sBTC Bootstrap Signer.
signer coordination
The actions executed by the signer coordinator.
Milestone
Design - Redesign of Distributed Key Generation
1. Summary
We should redesign Distributed Key Generation (DKG) so that it always finishes successfully when all signers are behaving honestly, while removing the role of a coordinator.
2. Context & Purpose
Right now, Distributed Key Generation (DKG) is not something that can be done reliably. There are two main issues:
Issue (1) is quite bad, because it could lead to a partial failure. It would be better to have all signers fail or succeed at DKG. Lastly, we would like to remove any special privileges of the coordinator. There is nothing inherently wrong with having a coordinator, but removing the need for one during DKG allows for some simplification and probably enhances security.
Relevant Research Discussions
External Resources
The current DKG flow follows what is laid out in the FROST protocol RFC 9591. The FROST paper, found in https://eprint.iacr.org/2020/852, speaks about a coordinator algorithm, but does not actually require a coordinator participant for either DKG or signing rounds.
3. Design
3.1 Proposed Component Design
The proposal is to:
The above proposals can be refined into several “small” proposals for the new DKG design.
dkg_shares
table. Run DKG if there is no row in thedkg_shares
table with block height greater than or equal to thedkg_min_bitcoin_block_height
parameter. Remove thedkg_target_rounds
config parameter.SignerState
object. Also store the current canonical bitcoin chain tip in the state object.SignerStateMachine
andCoordinatorStateMachine
.DkgBegin
messages from other signers at any time, but only feed it to the state machine if thedkg_id
aligns with a currently ongoing DKG round and DKG is allowed.dkg_id
when starting DKG rounds.DkgBegin
state after receivingdkg_begin_threshold
distinctDkgBegin
messages.dkg_begin_threshold
distinctDkgEnd(Success)
messages.DkgPrivateBegin
andDkgEndBegin
messages.Some notes:
dkg_id
.DkgBegin
message from another signer. We currently do a database look up for each of these messages.The above looks like a lot of work, but we can do 1, 5, 6, and 8 and be happy with fixing our known bugs.
3.1.1 Design Diagram
Below is a protocol diagram for how DKG will progress.
3.1.2 Considerations & Alternatives
There are some alternatives to solving our two main issues. Let’s consider the issues and the alternatives.
Closing Checklist
The text was updated successfully, but these errors were encountered: