You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+15-12Lines changed: 15 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,7 +38,7 @@ in the [original work](https://eprint.iacr.org/2020/852.pdf).
38
38
| 4 | P-384 | filippo.io/nistec |
39
39
| 5 | P-521 | filippo.io/nistec |
40
40
| 6 | Edwards25519 | filippo.io/edwards25519 |
41
-
| 7 | Secp256k1 | github.com/bytemare/crypto |
41
+
| 7 | Secp256k1 | github.com/bytemare/secp256k1|
42
42
43
43
The groups, scalars (secret keys and nonces), and group elements (public keys and commitments) are opaque objects that
44
44
expose all necessary cryptographic and serialization functions.
@@ -66,7 +66,7 @@ If the [DKG](https://github.com/bytemare/dkg) package was used to generate keys,
66
66
and must communicate their PublicKeyShare to the coordinator and other signers.
67
67
68
68
It is easy to encode and decode these key shares and public key shares for transmission and storage,
69
-
using the ```Encode()``` and ```Decode()``` methods (or in JSON marshalling).
69
+
using the ```Encode()``` and ```Decode()``` methods (or hexadecimal or JSON marshalling).
70
70
71
71
#### Import existing identifiers and keys
72
72
@@ -151,17 +151,20 @@ and providing the signer's ```KeyShare```.
151
151
FROST is a two round signing protocol, in which the first round can be asynchronously pre-computed, so that signing can
152
152
actually be done in one round when necessary.
153
153
154
-
First Round: Signer commitment
154
+
#### First Round: Signer commitment
155
155
- Signers commit to internal nonces, by calling the ```commitment := signer.Commit()``` method, which returns one commitment
156
-
stores corresponding nonces internally. In this manner, signers can produce many commitments before signing sessions start.
157
-
Signers send these commitments to either a coordinator or all other signers. Note that a commitment is not function of the
158
-
future message to sign, so a signer can produce them without knowing the message in advance.
159
-
- The coordinator (or all other signers) collect these commitments, into a list.
160
-
161
-
Second Round: Signing
156
+
and stores corresponding nonces internally. In this manner, signers can produce many commitments before signing sessions start.
157
+
Note that a commitment is not function of the future message to sign, so a signer can produce them without knowing the message in advance.
158
+
- Signers send these commitments to either a coordinator or all other signers.
159
+
- The coordinator (or all other signers) collect these commitments, into a list. The coordinator can prepare such lists
160
+
for each future message to be signed, a list containing a single commitment from each signer. These commitments must
161
+
not be reused.
162
+
163
+
#### Second Round: Signing
162
164
- The coordinator broadcasts the message to be signed and a list of commitments, one from each signer, to each signer.
163
165
- The signers sign the message ```sigShare, err := signer.Sign(message, commitmentList)```, each producing their signature share.
164
-
- These signature shares must then be shared and aggregated to produce the final signature, ```signature, err := configuration.AggregateSignatures(message, sigShares, commitmentList, true)```.
166
+
- These signature shares must then be shared and aggregated to produce the final signature,
@@ -170,7 +173,7 @@ The coordinator does not have any secret or private information, and must never
170
173
Commitments received by signers have an identifier, which allows for triage and registration. Commitments must only be
171
174
used once. The coordinator may further hedge against nonce-reuse by tracking the nonce commitments used for a given group key.
172
175
173
-
If the ```verify``` argument in the ```AggregateSignatures()``` is set to ```true``` (recommended), signature shares and output signature are thoroughly verified.
176
+
If the ```verify``` argument in the ```AggregateSignatures()``` is set to ```true``` (which is recommended), signature shares are thoroughly verified.
174
177
Upon error or invalid share, the error message indicates the first invalid share it encountered.
175
178
A coordinator should always verify the signature after ```AggregateSignatures()``` if the ```verify``` argument has been set to ```false```.
176
179
@@ -179,7 +182,7 @@ That signer can then be denied of further contributions.
179
182
180
183
### Resumption and storage
181
184
182
-
Configurations, keys, commitments, commitment lists, and even signers can be backed up to byte strings for transmission and storage,
185
+
Configurations, keys, commitments, commitment lists, and even signers can be serialized for transmission and storage,
183
186
and re-instantiated from them. To decode, just create that object and use its ```Decode()``` method.
184
187
185
188
For example, to back up a signer with its private keys and commitments, use:
0 commit comments