-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Frost] Key Conversion & Key Derivation Function #173
Comments
I think VerifiableSecretSharingCommitment would just be used during the DKG. For signing, it can't be used. Can this value just be set to empty? |
Ok, agree. We actually can not make it zero, since internal checks will fail, but we can supply "fake" commitments to each of participants, such that the property still holds. Thus we break invariant that commitment is the same amongst all participants, but we are fine with that, since we trust in previously occurred DKG. But still, we need to calculate a group public key. I don't see an easier way rather than interpolate on |
It works only in the case when Moreover, is it actually possible to reuse DKG result? The reason for doubt is following. @chelseakomlo Am I missing something? |
What do you mean that internal checks will fail? But yes, if our ECDSA library is defined over secp256k1, we can't convert to ed25519. We'll need to either use FROST over secp256k1 or generate new ed25519 keys. |
In context of (Shamir) Secret Sharing we have a polynomial
f(x) = a_0 * x^0 + a_1 * x^1 + ... + a_n * x^n
,where
f(0) = a_0
is a group secret.Each of participants has its own
x_i
-coordinate,f(x_i)
– i-th participant's secret.G_s
– group generator ofsecp256k1
,G_e
– group generator ofEd25519
.*
– group operationKey Conversion
Formally, in an ideal world we would want to have something like
From
trait forcait_sith::KeygenOutput -> frost::keys::{SecretShare, PublicKeyPackage}
.Let's look closely on what we have in
cait_sith
(link):Where
private_share
isf(x_i)
andpublic_key
–G * f(0)
On Frost we have the following object that is a part of key management
(link)
Where
identifier
isx_i
,signing_share
isf(x_i)
, andcommitment
is[G_e * a_0, G_e * a_1, ..., G_e * a_n]
as can be seen here.Immediate problem is that we don't have such values for
commitment
.One of the distributed approaches would be to have
G_e * f(x_i)
as a part of public information (config/chain).Then we would have
n
points of polynomG_e * f(x)
, we can interpolate it to get the coefficients, which is[G_e * a_0, G_e * a_1, ..., G_e * a_n]
, which is exactly what we need.This requires adding two things:
G_e * f(x_i)
information runtimeKey Derivation Function
To hold invariants
VSSC[0] += G * tweak
do the trickThe text was updated successfully, but these errors were encountered: