We define a variant of the two-round Distributed Key Generation (DKG) protocol PedPop [KG]. Our variant, PedPop+ is less efficient, but achieves a notion of simulatability with aborts, a stronger notion of security than the one promised by plain PedPop.
PedPop+ is a five-and-a-half-rounds protocol and makes use in three of its rounds of a reliable broadcast channel. A reliable broadcast is a three-round protocol,
implying that the effective total number of PedPop+ rounds is eleven and a half. The broadcast channel is implemented in src/protocol/echo_broadcast.rs.
The implemented DKG serves as a generic one that can be used with multiple different underlying elliptic curves. We thus use it with Secp256k1 for ECDSA schemes, Edwards25519 for EdDSA scheme, and BLS12-381 for the confidential key derivation functionality.
The core of the DKG protocol is implemented in a function called do_keyshare and serves for three applications:
-
Key generation: denoted in the implementation with
keygen. It allows a set of parties to jointly generate from scratch a private key share each and a master public key. The master public key should be common for all the participants and should reflect each of the private shares. -
Key resharing: denoted in the implementation with
reshare. It allows for a set of participants who already own valid private shares to kick out other participants from the pool, create fresh shares for new participants i.e. new joiners to the pool, and/or change the cryptographic threshold described in section Types of Thresholds. -
Key refresh: denoted in the implementation with
refresh. It is a special case of the key resharing in which the set of participants stays the same before and after the protocol run and with no changes to the crypto. The goal being that each participant would refresh their signing share without modifying the master public key.
There are two types of thresholds one has to be aware of: the asynchronous distributed systems threshold a.k.a. the BFT threshold (
Due to the fact that PedPop+ utilizes reliable broadcast channel to securely generate private shares, it thus lies on the edge between the asynchronous distributed systems and cryptography. For this reason, we set
Let
We define PedPop+ key generation as follows, where all the instructions preceded with +++ are added to the key generation, transforming it to the key resharing protocol.
No special inputs are given to the key generation protocol beyond the public parameters defined above. However, the inputs to the key resharing are as follows:
-
+++The old private share$\mathit{secret}_i$ that$P_i$ held prior to the key resharing. This value is set to None only if$P_i$ is a freshly new participant. -
+++The old participants set$\mathit{OldSigners}$ that held valid private shares prior to the key resharing. -
+++The old master public key$\mathit{OldPK}$ that the$\mathit{OldSigners}$ held prior to the key resharing. -
+++The old cryptography threshold$\mathsf{OldThreshold}$ prior to the key resharing. ``
1.1 Each
+++ Each
+++ Each
1.2 Each
1.3 Each
2.1 Each
2.2 Each
2.3 Each
+++ Each
+++ If
+++ Else set
2.4 Each
2.5 Each
2.6 Each
2.7 Each
2.8 Each
2.9 Each
3.1 Each
3.2 Each
4.1 Each
4.2 Each
4.3 Each
4.4 Each
4.5 Each
+++ Each
4.6
5.1 Each
5.2 Each
5.3 Each
5.4 Each
5.5 Each
Output: the keypair
A key refresh protocol is a special case of the key resharing where
The BFT threshold states that the maximum number of faulty nodes a distributed system (
The cryptographic threshold refers to the maximum number of malicious parties plus one (
Here could be asked an interesting question: If the maximum number of faulty participants is 1/3 for the broadcast protocol, how is it possible that we use much higher cryptographic threshold during DKG (say for signing with 6 participants out of 9). Shouldn't we be constrained to fix the cryptographic threshold to 1/3 too?
The answer goes in both directions:
-
No, we should not be constrained to fix the cryptographic threshold to 1/3: one can assume having more "honest" nodes during key generation (which is ran supposedly once) than during the cryptographic signing phase (which should always happen). One can think of this extra parties being corrupt right after the key generation.
-
Yes, we should fix the cryptographic threshold to 1/3. In fact it does not make sense to assume two different thresholds...
The separation between these two thresholds seldom appears in cryptographic academic papers, which, as mentioned above, often assume underlying broadcast channels. The motivation for explicitly introducing this separation is to enable library users to properly understand the implications of using this implementation, thereby avoiding potentially disastrous misconfigurations.