Skip to main content

Threshold Signature

In this chapter, we give an overview of threshold signatures and describe the threshold ECDSA construction of Canetti et al in CGGMP21 and the FROST threshold signature scheme in KG20, which is a threshold version of Schnorr signature scheme, including its EdDSA (or ed25519) instatiation. The chapter is separated into 55 major parts below:

  • First, we give a brief introduction to threshold signatures and state its syntax and security properties in Introduction.

  • Second, we state the syntax and security properties of threshold signatures in Definition and Security.

  • Third, we describe the threshold ECDSA construction of CGGMP21 in Canetti's Construction to support the threshold ECDSA version for the curve secp256k1.

  • Fourth, we describe the FROST threshold signature construction of KG20 in FROST Construction to support the threshold signature version of ed25519 and sr25519.

  • Finally, we briefly specify our instatiation and analyse the security for the threshold ECDSA construction of Canetti et al using secp256k1 parameters and FROST threshold signature construction using ed25519 and sr25519 parameters as follows:

    • In Threhold signature for secp256k1, we discuss and analyse the security of the threshold ECDSA signature of Canneti et al. when instatiated using the parameters of secp256k1.

    • In Threhold signature for ed25519 we discuss and analyse the security of the FROST threshold signature when instatiated using the parameters of ed25519.

    • In Threhold signature for sr25519 we discuss and analyse the security of the FROST threshold signature when instatiated using the parameters of sr25519.

Author(s): phamnhatminh1292001

Introduction

A (n,t)(n,t) threshold signature protocol allows distributed signing among nn participants such that any group of t+1t+1 participants can produce a valid signature, while any group of fewer that tt participants cannot. The goal is to produce signatures that are compatible with an existing centralized signature scheme so that we can verify the signatures without any modification in the existing digital signature algorithms. Compared to an ordinary signature scheme, the setup and signing algorithms are replaced by interactive protocol between participants, while the verification algorithm remains identical to the verification of a signature issued by a centralized party.

With the advance of blockchain technology, threshold signature has received increasing attention from the community. This is because transactions in blockchain are made possible via digital signatures, and it is dangerous to trust the whole signing process in a single individual, who might be compromised, leading to single point of failure. Hence many stakeholders are looking to perform signature generation in a distributed way. In a threshold signature scheme, an adversary cannot learn the actual secret key if it does not control enough number of participants, and any t+1t+1 participants will be able to deliver a valid signature, hence preventing the "single point of failure" attack above.

Definition and Security

In this section, we describe the syntax and security properties of a threshold signature scheme.

Definition

We describe the syntax of a threshold signature scheme. A (n,t)(n,t) threshold signature consists of two interactive protocols KeyGen, Sign and an algorithm Verify as follows:

Keygen(1λ){Pi}i=1nKeygen(1^\lambda)\langle \{P_i\}_{i=1}^n\rangle: This is an interactive protocol between nn participants P1,P2,,PnP_1,P_2,\dots,P_n. If the interaction suceeds, each participant PiP_i receives a partial secret key skisk_i. In addition, all participants output a common public key pkpk.

Sign(M,S){Pi(ski)}iSSign(M,\mathcal{S})\langle \{P_i(sk_i)\}_{i \in \mathcal{S}}\rangle: This is an interactive protocol with common input MM between a set S\mathcal{S} of t+1t+1 participants {Pi}iS\{P_i\}_{i \in \mathcal{S}}, where each participant PiP_i holds a partial secret key skisk_i only known to him. If the interaction suceeds, the protocol outputs a signature σ\sigma.

Verify(M,σ,pk)(M,\sigma,pk): This is an algorithm run by an external verifier to check the correctness of the signature. On input a message MM, a signature σ\sigma, a common public key pkpk, it outputs a bit bb indicating the validity of the signature.

Security Properties

A threshold signature scheme should satisfy the following properties:

Correctness: For any set S{1,,n}\mathcal{S} \subset \{1,\dots,n\} with S=t+1|\mathcal{S}|=t+1, if PiP_i follows the protocol for all iSi \in \mathcal{S} and σ\sigma \leftarrow Sign(M,S){Pi(ski)}iS(M,\mathcal{S})\langle \{P_i(sk_i)\}_{i \in \mathcal{S}}\rangle, then it holds that Verify((M,σ,pk)=1((M,\sigma,pk)=1.

Unforgability: A (tn)(t-n) threshold signature scheme is unforgeable if for any adversary A\mathcal{A} who corrupts up to tt participants and given previous signatures σ1,,σk\sigma_1,\dots,\sigma_k of previous messages M1,,MkM_1,\dots,M_k, the probability that A\mathcal{A} can produce a signature σ\sigma on an unsigned message MM such that Verify((M,σ,pk)=1((M,\sigma,pk)=1 is negligible.

Canneti et al's Construction

In this section we briefly describe the threshold ECDSA protocol of Canneti etal in CGGMP21, in which we assume that the readers have some familiarity to ECDSA signature scheme. Recall that the ordinary ECDSA signature scheme σ=(r,s)\sigma=(r,s) of a message MM is generated as follow

r=R.x, R=gk1, m=H(M) and s=k(m+rsk),r=R.\mathsf{x},\ R=g^{k^{-1}},\ m=\mathsf{H}(M)\ \text{and}\ s=k(m+r\cdot sk),

where kZpk \leftarrow \mathbb{Z}_p and sksk is the signer's secret key. Canneti's protocol aims to provide a valid ECDSA signature of MM above via a threshold manner. In addition, the protocol also provide the following features:

  • Universal Composable Security: Canneti etal's protocol achieve security in the Universal Composable Security framework. The framework is better in realizing the security of protocol, compared to traditional game based definitions.

  • Proactive Key Refresh: Canneti etal's protocol allow participants to refresh their partial secret keys after every epoch while not changing the grand secret key and public key. The goal of key refresh is to achieve security against proactive adversaries, who might corrupt participants for a certain period of time during the execution of the protocol.

  • Non Interactive online phase: Canneti etal's protocol achieves non-interactive in the following sense: The signing protocol consists of a preprocessing phase before the message MM is known, followed by a non-interactive signing phase, where each participant can generate his own signature of MM using the preprocessed information.

  • Identifiable Abort: The protocol contains additional mechanisms that allow participants to detect any signers who fail to participate in the signing process, or deviate from it. Identifying misbehaving signers can be crucial for some applications. In most applications, being able to identify rogue servers is a convenience, allowing reboot the whole system.

To see how the protocol achieve the abovementioned properties, we now move to the actual construction of Canneti and describe it.

Key Generation

In this section, we describe the key generation process in the construction of Canetti et al. The key generation process is divided into two sub protocols: the initial key generation process and the key refresh process. The initial key generation process is executed exactly once to produce a public-secret key pair pk,skpk,sk, while the key refresh process is executed whenever participants would like to change their partial secret keys in the way that pkpk and sksk remains the same. Before moving to the protocol, we provide several notations that will be used in the protocol description below.

Notation: Let λ\lambda to be the security parameter. Let G\mathbb{G} to be a cyclic group whose order is a prime number. Let p(2λ1,2λ)p \in (2^{\lambda-1},2^\lambda) to be the order of G\mathbb{G} and let g,hg,h to be two generators of G\mathbb{G}. We denote Com\mathsf{Com} to be a secure binding and information theoretic hiding commitment scheme and H\mathsf{H} to be a cryptographic hash function. For any set S\mathcal{S} and for any iSi \in \mathcal{S} we denote λi,S=jS,jijji\lambda_{i,S}=\prod_{j\in \mathcal{S},j \neq i}\dfrac{j}{j-i} to be the Lagrange coefficient w.r.t SS.

Now, the initial key generation and key-refresh process are as follows:

Keygen (1λ){Pi}i=1n(1^\lambda)\langle \{P_i\}_{i=1}^n\rangle:

Initial Key Generation: The initial key generation is executed once at the beginning.

  1. Each participant PiP_i selects siZps_i \in Z_p and compute Ci=Com(gsi)C_i=\mathsf{Com}(g^{s_i}).

  2. Each participant PiP_i broadcasts yi=gsiy_i=g^{s_i}. The public key pkpk is set to be pk=i=1nyipk=\prod_{i=1}^ny_i. PiP_i then performs Feldman's Verifiable Secret Sharing scheme (see Supporting Protocols) to share sis_i to other participants. Each PjP_j add the secret shares received as his secret key, i.e, skj=isijsk_j=\sum_i s_{ij}. The values skisk_i are the shares of a (tn)(t-n) Shamir secret sharing of the secret key sksk.

  3. Finally, each participant uses Schnorr's protocol S91 (see Supporting Protocols) to prove in zero knowledge that he knows the secret key skisk_i,

Key Refresh: The key refreshment process is executed after a certain number of epochs whenever participants have to reset their partial secret keys.

  1. Each participant PiP_i samples Ei=(Ni,hi1,hi2)E_i=(N_i,h_{i1},h_{i2}), the public key of Pallier Cryptosystem P91 satisfying Ni>28λN_i>2^{8\lambda}.

  2. Each participant PiP_i performs Feldman's Verifiable Secret Sharing scheme to distribute the shares sijs_{ij}' of 00 to other participants. Each participant PiP_i set his new secret key to be ski=ski+isjisk_i'=sk_i+\sum_i s_{ji}'. The secret key sksk remains the same and are unknown to other participants and the values skisk_i' are still the shares of a (tn)(t-n) Shamir secret sharing of the secret key sksk

  3. Finally, each participant does the following:

    1. Use Schnorr's protocol to prove in zero knowledge that he knows the new secret key skisk_i'.

    2. Prove that NiN_i is a product of two primes pi,qip_i,q_i s.t piqi3(mod4)p_i \equiv q_i \equiv 3 \pmod {4} and NiN_i admits no small factors (see Supporting Protocols)

    3. Prove that (hi1,hi2)(h_{i1},h_{i2}) generates the same multiplicative group modulo NiN_i using Schnorr protocol for Ring (see Supporting Protocols).

By the property of Feldman's VSS, it can be proven that the public key pkpk is also equal to gskg^{sk}, hence the key pair (pk,sk)(pk,sk) generated using the key generation protocol above has the same form of a key pair in an ECDSA signature scheme.

Note: Note that after the key generation process, we see that each PiP_i is now equipped with a Pallier encryption scheme with public key Ei=(Ni,hi1,hi2)E_i=(N_i,h_{i1},h_{i2}), which we denote the encryption and decryption algorithm by Enci\mathsf{Enc}_i and Deci\mathsf{Dec}_i respectively. The encryption algorithm receives two inputs: the message MM and a randomness ρ\rho. In most cases, for simplicity we will ignore the input randomness ρ\rho in our description. The encryption scheme will be used in the signing process.

Signing

In this section, we describe the signing process of the protocol. For any set S{1,,n}S \in \{1,\dots,n\} of t+1t+1 participants who participate to sign a message MM, let wi=λi,Sski(modp)w_i=\lambda_{i,S}\cdot sk_i \pmod{p}. Note that by Feldman's VSS, sk=iSwisk=\sum_{i \in S} w_i. Note that since pki=gskipk_i=g^{sk_i} is public after the key generation process, hence the value Wi=gwi=pkiλi,SW_i=g^{w_i}=pk_i^{\lambda_{i,\mathcal{S}}} can also be publicly computed. The signing protocol follows a 66 steps process below:

Sign(M){Pi(ski)}i=1n(M)\langle \{P_i(sk_i)\}_{i=1}^n\rangle:

  1. Each participant PiP_i choose ki,γiZpk_i,\gamma_i \in \mathbb{Z}_p and does the following:

    1. Compute Ki=Enci(ki),Gi=Enci(γi)K_i=\mathsf{Enc}_i(k_i), G_i=\mathsf{Enc}_i(\gamma_i)

    2. Compute a proof πi\pi_i certifying ki[1,23λ]k_i \in [1,2^{3\lambda}] (see Supporting Protocols).

    3. Send (Ki,Gi,πi)(K_i,G_i,\pi_i) to all participants.

Define k=ikik=\sum_i k_i and γ=iγi\gamma=\sum_i \gamma_i. We see that kγ=i,jkiγj(modp)k\gamma=\sum _{i,j} k_i \gamma_j \pmod{p} and ksk=i,jkiwj(modp)k\cdot sk=\sum _{i,j} k_i w_j \pmod{p}.

  1. For each jij \neq i, each participant PiP_i does the following:

    1. Verify the validity of πj\pi_j. If any check fails, the protocol aborts.

    2. Sample βij,vij[1,,27λ]\beta_{ij},v_{ij} \in [1,\dots,2^{7\lambda}]

    3. Comute Cji=Encj(γikjβij)=γiKjEncj(βij)C_{ji}=\mathsf{Enc_j}(\gamma_ik_j-\beta_{ij})=\gamma_i\cdot K_j-\mathsf{Enc_j}(\beta_{ij}) and Cji=Encj(wikjvij)=wiKjEncj(vij)C_{ji}'=\mathsf{Enc_j}(w_ik_j-v_{ij})=w_i\cdot K_j-\mathsf{Enc_j}(v_{ij})

    4. Compute Fji=Enci(βij)F_{ji}=\mathsf{Enc_i}(\beta_{ij}), Fji=Enci(vij)F_{ji}'=\mathsf{Enc_i}(v_{ij}), Γi=gγi\Gamma_i=g^{\gamma_i} and a proof πi1\pi_i^1 which proves that Gi=Encj(γi)G_i=\mathsf{Enc_j}(\gamma_i), Γi=gγi\Gamma_i=g^{\gamma_i} and γi<23λ\gamma_i<2^{3\lambda}. The generation of π1i\pi_1^i can be seen in Supporting Protocols

    5. Compute the proof πi2\pi_i^2 which prove that (Cji,Wi,Kj,Fji,γi,βij)(C_{ji},W_i,K_j,F_{ji},\gamma_i,\beta_{ij}) satisfy the following relations

      • Cji=γiKjEncj(βij)C_{ji}=\gamma_i\cdot K_j-\mathsf{Enc_j}(\beta_{ij})
      • Γi=gγi\Gamma_i=g^{\gamma_i}
      • Fji=Enc2(βij)F_{ji}=\mathsf{Enc_2}(\beta_{ij})
      • βij27λ\beta_{ij} \le 2^{7\lambda}
      • γi23λ\gamma_i \le 2^{3\lambda}

    The generation of πi2\pi_i^2 can be seen in Supporting Protocols.

    1. Compute the proof πi3\pi_i^3, which prove that (Cji,Γi,Kj,Fji,wi,vij)(C_{ji}',\Gamma_i,K_j,F_{ji}',w_i,v_{ij}) satisfy the following relations
      • Cji=wiKjEncj(vij)C_{ji}'=w_i\cdot K_j-\mathsf{Enc_j}(v_{ij})
      • Wi=gwiW_i=g^{w_i}
      • Fji=Enc2(vij)F_{ji}'=\mathsf{Enc_2}(v_{ij})
      • vij<27λv_{ij}<2^{7\lambda}
      • wi23λw_i \le 2^{3\lambda}

    The generation of πi3\pi_i^3 can be seen in Supporting Protocols.

    1. Send Cji,Cji,Fji,Fji,Γi,πi1,πi2,πi3C_{ji},C_{ji}',F_{ji},F_{ji}',\Gamma_i,\pi_i^1,\pi_i^2, \pi_i^3 to all participants.
  2. For each jij \neq i, each participant PiP_i does the following:

    1. Verify the validity of πj1,πj2,πj3\pi_j^1,\pi_j^2,\pi_j^3. If any check fails, then the protocol aborts.

    2. Compute αij=Deci(Cij)\alpha_{ij}=\mathsf{Dec_i}(C_{ij}) and uij=Deci(Cij)u_{ij}=\mathsf{Dec_i}(C_{ij}') . Note that αij+βij=γikj(modp)\alpha_{ij}+\beta_{ij}=\gamma_i k_j\pmod{p} and uij+vij=wikj(modp)u_{ij}+v_{ij}=w_i k_j \pmod{p}.

    3. Set δi=kiγi+ji(αij+βij)(modp)\delta_i=k_i\gamma_i+\sum_{j \neq i}(\alpha_{ij}+\beta_{ij}) \pmod{p} and σi=kiwi+ji(uij+vij)(modp)\sigma_i=k_iw_i+\sum_{j \neq i}(u_{ij}+v_{ij})\pmod{p}. Note that kγ=iδi(modp)k\gamma=\sum_i\delta_i \pmod{p} and ksk=iσi(modp)k\cdot sk=\sum_i \sigma_i \pmod{p}.

  3. Each participant PiP_i computes Γ=iΓi=gγ\Gamma=\prod_i \Gamma_i=g^\gamma, Δi=Γki=gγki\Delta_i=\Gamma^{k_i}=g^{\gamma k_i} and send δi,Δi\delta_i,\Delta_i to all participants.

  4. Each participant PiP_i sets δ=iδi=kγ\delta=\sum_i\delta_i=k\gamma and verify that gδ=iΔig^{\delta}=\sum_i\Delta_i. If any check fails, the protocol aborts. Otherwise, set R=Γδ1=gγ(kγ)1=gk1R=\Gamma^{\delta^{-1}}=g^{\gamma(k\gamma)^{-1}}=g^{k^{-1}} and r=R.xr=R.\mathsf{x}.

  5. Each participants PiP_i computes m=H(M)m=\mathsf{H}(M), then broadcasts si=mki+rσi(modp)s_i=m k_i+r \sigma_i \pmod{p}. and set s=isi=k(m+rsk)(modp)s=\sum_{i} s_i=k(m+r\cdot sk) \pmod{p}. If Verify((M,(r,s),pk)=1((M,(r,s),pk)=1 then (r,s)(r,s) is a valid signature of MM, otherwise aborts.

Verification

Recall that the verification algorithm in threshold ECDSA remain identical to an ordinary ECDSA verification algorithm. Hence, it is sufficient to describe the Verify algorithm of the threshold ECDSA below.

Verify(M,σ=(r,s),pk)(M,\sigma=(r,s),pk): This is just the standard ECDSA verify algorithm, which can be publicly run by anyone. It works as follows:

  1. Compute m=H(M)m=\mathsf{H}(M).

  2. Compute u1=ms1(modp)u_1=m\cdot s^{-1} \pmod{p} and u2=rs1(modp)u_2=r\cdot s^{-1} \pmod{p}.

  3. Compute R=gu1pku2R=g^{u_1}pk^{u_2}.

  4. Check if r=R.xr=R.\mathsf{x}. If the check passes, return 11, otherwise return 00.

One can see that, if (r,s)(r,s) is a valid ECDSA signature scheme, which has the form r=gk1.xr=g^{k^{-1}}.\mathsf{x} and s=k(m+rsk)s=k(m+r\cdot sk), then the verification algorithm above returns 11 since R=gu1pku2=gs1(m+rsk)=gk1R=g^{u_1}pk^{u_2}=g^{s^{-1}(m+r\cdot sk)}=g^{k^{-1}}. The converse direction also holds, i.e, if the verify algorithm above return 11, then (r,s)(r,s) must be a valid ECDSA signature which have the form above.

Supporting Protocols

In this section, we specify the supporting protocols that support the signing protocol described in the previous section.

Feldman's VSS

Recall that in Step 2 of the key generation protocol, each participant PP has to perform Feldman's VSS to share his secret ss to other participants PiP_i. The process of Feldman's VSS is described as follow:

  1. PP generate a random degree tt polynomial f(x)=a0+a1x++atxtf(x)=a_0+a_1x+\dots+a_tx^t such that a0=sa_0=s, then broadcast Ai=gaiA_i=g^{a_i} for i{0,1,,t} i \in \{0,1,\dots,t\}. Finally PP secretly send the share si=f(i)s_i=f(i) to the ii-th participant PiP_i.

  2. Each participant PiP_i can verify the correctness of his share sis_i by checking gsi=j=0tAjijg^{s_i}=\prod_{j=0}^tA_j^{i^j}. If the check fails, PiP_i broadcasts a complaint to PP. If PP receives a complaint he will be disqualified.

Zero Knowledge Proofs

Schnorr Protocol:

In Step 3 of the initial key generation process, a participant who broadcasts pki=gskipk_i=g^{sk_i} must prove the knowledge of skisk_i using Schnorr protocol. Schnorr protocol can be described as follow:

  1. The prover chooses aZpa \in \mathbb{Z}_p and sends α=ga\alpha=g^a.

  2. The verifier sends a challenge cZpc \in \mathbb{Z}_p.

  3. The prover sends u=a+cσu=a+c\sigma.

  4. The verifier checks if gu=αpkicg^u=\alpha\cdot pk_i^c.

Schnorr Protocol for Ring:

In Step 3.3 of the key refresh process, a participant who broadcasts h1,h2h_1,h_2 must prove that there is a value ss such that h2=h1s(modN)h_2=h_1^s \pmod{N} The protocol can be described as follow:

  1. For each i=1,,λi=1,\dots,\lambda, the prover chooses a1Zϕ(N)a_1 \in \mathbb{Z_{\phi(N)}} and sends Ai=h1ai(modN)A_i=h_1^{a_i} \pmod{N} to the verifier.

  2. The verifier sends a challenge ei0,1e_i \in {0,1} for each i=1,,λi=1,\dots,\lambda.

  3. For each i=1,,λi=1,\dots,\lambda, the prover sends zi=ai+eis(modϕ(N))z_i=a_i+e_i s \pmod{\phi(N)} and send ziz_i to the verifier.

  4. The verifier checks if h1zi=Aih2c(modN)h_1^{z_i}=A_i\cdot h_2^c \pmod{N} for each i=1,,λi=1,\dots,\lambda.

Proof of Product of Two Primes:

In Step 3.2 of the key refresh process, a participant must prove that the RSA modulus NN is a product of two primes p,qp,q such that N=pqN=pq and pq3(mod4)p \equiv q \equiv 3 \pmod{4} and gcd(N,ϕ(N))=1gcd(N,\phi(N))=1. The protocol process as follow:

  1. The prover samples wZNw \in \mathbb{Z_N} s.t (wN)=1\left(\dfrac{w}{N}\right)=-1 where (wN)\left(\dfrac{w}{N}\right) denotes the Jacobian symbol.

  2. The verifier samples y1,,yλZNy_1,\dots,y_{\lambda} \in \mathbb{Z_N} and send them to the prover.

  3. The prover proceed as follows:

    • Set xi=(yi)1/4(modN)x_i=(y_i')^{1/4} \pmod{N} where yi=(1)aiwbiyiy_i'=(-1)^{a_i}w^{b_i}y_i such that xix_i is well defined.

    • Compute zi=yiN(modN)z_i=y_i^{-N} \pmod{N}

    • Send (xi,ai,bi,zi)i=1λ(x_i,a_i,b_i,z_i)_{i=1}^\lambda to verifier.

  4. The verifier checks that NN is not a prime, ziNyi(modN)z_i^N \equiv y_i \pmod{N} and xi4(1)aiwbiyi(modN)x_i^4 \equiv (-1)^{a_i}w^{b_i}y_i \pmod{N}. Accept if and only if all checks pass.

Pallier Encryption Range Proof:

In Step 1.2 of the signing process, each participant given Ki=Enci(ki)K_i=\mathsf{Enc_i}(k_i) has to provide a proof π\pi certifying ki<23λk_i<2^{3\lambda}. The protocol for providing π\pi proceeds as follow:

  1. The protocol chooses N,h1,h2N,h_1,h_2 to be the auxiliary set-up parameter for the protocol, where NN is a product of two safe prime and h1,h2h_1,h_2 generate the same multiplicative group modulo NN.

  2. The prover samples α[23λ,,23λ]\alpha \in [-2^{3\lambda},\dots,2^{3\lambda}], δ[23λN,,23λN]\delta \in [-2^{3\lambda}\cdot N,\dots,2^{3\lambda}\cdot N], u[2λN,,2λN]u \in [-2^{\lambda}\cdot N,\dots,2^{\lambda}\cdot N], rZN1r \in \mathbb{Z_{N_1}}

  3. The prover computes S=h1kh2u(modN)S=h_1^k h_2^u \pmod{N}, A=(1+N1)αrN1(modN12)A=(1+N_1)^\alpha r^{N_1} \pmod {N_1^2} and C=h1αh2δ(modN)C=h_1^\alpha h_2^\delta \pmod{N}

  4. The prover sends (S,A,C)(S,A,C) to the verifier.

  5. The verifier chooses a challenge e[p,,p]e \in [-p,\dots,p] and sends ee to the prover.

  6. The prover computes z1=α+ekz_1=\alpha+ek, z2=rρe(modN1)z_2=r\rho^e \pmod{N_1} and z3=δ+euz_3=\delta+eu

  7. The prover sends π=(z1,z2,z3)\pi=(z_1,z_2,z_3) to the verifier

  8. The verifier checks if (1+N1)z1z2N1=AKe(modN12)(1+N_1)^{z_1}z_2^{N_1}=AK^e \pmod{N_1^2} and h1z1h2z3=CSe(modN)h_1^{z_1}h_2^{z_3}=CS^e \pmod{N}

9 The verifier checks that zi[23λ,,23λ]z_i \in [-2^{3\lambda},\dots,2^{3\lambda}]

Proof of Paillier Encryption given Group Commitment:

In Step 2.4 of the signing process, each participant has public input (C,X)(C,X) and secret input xx and has to provide a proof π\pi which proves that ((C,X),x)R((C,X),x) \in \mathcal{R}, where

R={((C,X),(x,ρ))  X=gx  C=Enc1(x,ρ)  x23λ}\mathcal{R}=\{((C,X),(x,\rho))\ |\ X=g^{x}\ \land\ C=\mathsf{Enc_1}(x,\rho)\ \land\ x \le 2^{3\lambda}\}. The protocol for providing π\pi proceeds as follow:

  1. The protocol chooses N,h1,h2N,h_1,h_2 to be the auxiliary set-up parameter for the protocol, where NN is a product of two safe prime and h1,h2h_1,h_2 generate the same multiplicative group modulo NN.

  2. The prover samples α[23λ,,23λ]\alpha \in [-2^{3\lambda},\dots,2^{3\lambda}], δ[23λN,,23λN]\delta \in [-2^{3\lambda}\cdot N,\dots,2^{3\lambda}\cdot N], u[2λN,,2λN]u \in [-2^{\lambda}\cdot N,\dots,2^{\lambda}\cdot N], rZN1r \in \mathbb{Z_{N_1}}

  3. The prover computes S=h1xh2u(modN)S=h_1^xh_2^u \pmod{N}, A=(1+N1)αr1N(modN12)A=(1+N_1)^\alpha r^N_1 \pmod{N_1^2}, Y=gαY=g^\alpha, D=h1αh2γ(modN)D=h_1^\alpha h_2^\gamma \pmod{N}

  4. The prover sends S,A,Y,D,FS,A,Y,D,F to the verifier.

  5. The verifier chooses a challenge e[p,,p]e \in [-p,\dots,p] and sends ee to the prover.

  6. The prover computes z1=α+ekz_1=\alpha+ek, z2=rρe(modN1)z_2=r\rho^e \pmod{N_1} and z3=γ+euz_3=\gamma+eu

  7. The prover sends π=(z1,z2,z3)\pi=(z_1,z_2,z_3) to the verifier.

  8. The verifier checks that (1+N1)z1z2N1=ACe(modN12)(1+N_1)^{z_1}z_2^{N_1}=AC^e \pmod{N_1^2}, gz1=YXeg^{z_1}=YX^e and h1z1h2z3=DSe(modN)h_1^{z_1}h_2^{z_3}=DS^e \pmod{N}

  9. The verifier check that z1[23λ,,23λ]z_1 \in [-2^{3\lambda},\dots,2^{3\lambda}]

Proof of Paillier Operation given Group Commitment:

In Step 2.5 and 2.6 of the signing process, each participant has public input (C,X,K,Y)(C,X,K,Y) and secret input (x,y)(x,y) and has to provide a proof π\pi which proves that ((C,X,K,Y),(x,y))R((C,X,K,Y),(x,y)) \in \mathcal{R}, where

R={((C,X,K,Y),(x,y,ρ,ρy))  C=xKEnc1(y,ρ)  X=gx  Y=Enc2(y,ρy)  x<23λ  y27λ}\mathcal{R}=\{((C,X,K,Y),(x,y,\rho,\rho_y))\ |\ C=x\cdot K-\mathsf{Enc_1}(y,\rho)\ \land\ X=g^{x}\ \land\ Y=\mathsf{Enc_2}(y,\rho_y)\ \land\ x<2^{3\lambda}\ \land \ y \le 2^{7\lambda}\} The protocol for providing π\pi proceeds as follow:

  1. The protocol chooses N,h1,h2N,h_1,h_2 to be the auxiliary set-up parameter for the protocol, where NN is a product of two safe prime and h1,h2h_1,h_2 generate the same multiplicative group modulo NN.

  2. The prover samples α[23λ,,23λ]\alpha\in [-2^{3\lambda},\dots,2^{3\lambda}], β[27λ,,27λ]\beta\in [-2^{7\lambda},\dots,2^{7\lambda}], γ,δ[23λN,,23λN]\gamma, \delta \in [-2^{3\lambda}\cdot N,\dots,2^{3\lambda}\cdot N], m,u[2λN,,2λN]m, u \in [-2^{\lambda}\cdot N,\dots,2^{\lambda}\cdot N], rZN1r \in \mathbb{Z_{N_1}} and ryZN2r_y \in \mathbb{Z_{N_2}}

  3. The prover computes A=Kα((1+N1)βrN1)(modN12)A=K^\alpha((1+N_1)^\beta r^{N_1}) \pmod {N_1^2}, Bx=gαB_x=g^\alpha, By=(1+N2)βryB_y=(1+N_2)^\beta r_y, E=h1αh2γ(modN)E=h_1^\alpha h_2^\gamma \pmod{N}, F=h1βh2γ(modN)F=h_1^\beta h_2^\gamma \pmod{N}, S=h1xh2m(modN)S=h_1^xh_2^m \pmod{N}, T=h1yh2u(modN)T=h_1^yh_2^u \pmod{N}

  4. The prover sends S,T,A,Bx,By,E,FS,T,A,B_x,B_y,E,F to the verifier.

  5. The verifier chooses a challenge e[p,,p]e \in [-p,\dots,p] and sends ee to the prover.

  6. The prover compute z1=α+exz_1=\alpha+ex, z2=β+eyz_2=\beta+ey, z3=γ+emz_3=\gamma+em, z4=δ+euz_4=\delta+eu, w=rρe(modN1)w=r \rho^e \pmod{N_1}, wy=rρye(modN2)w_y=r \rho_y^e \pmod{N_2}

  7. The prover sends π=(z1,z2,z3,z4,w,wy)\pi=(z_1,z_2,z_3,z_4,w,w_y) to the verifier.

  8. The verifier checks that Kz1(1+N1)z2wN1=ACe(modN)K^{z_1}(1+N_1)^{z_2}w^{N_1} = A C^e \pmod{N}, gz1=BxXeg^{z_1}=B_xX^e, (1+N2)z2wyN2=ByYe(modN2)(1+N_2)^{z_2}w_y^{N_2}=B_yY^e \pmod{N_2}, h1z1h2z3=ESe(modN)h_1^{z_1}h_2^{z_3}=ES^e \pmod{N}, h1z2h2z4=FTe(modN)h_1^{z_2}h_2^{z_4}=FT^e \pmod{N}

  9. The verifier check that z1[23λ,,23λ]z_1 \in [-2^{3\lambda},\dots,2^{3\lambda}] and z1[27λ,,27λ]z_1 \in [-2^{7\lambda},\dots,2^{7\lambda}]

Commitment Scheme

In Step 1 of the Key Generation protocol, we require participants to commit their messages using a commitment scheme Com\mathsf{Com}. In practice, one can use a cryptographic hash function H\mathsf{H} and define the commitment of XX to be H(X,r)\mathsf{H}(X,r) where rr is chosen uniformly.

Identifying Aborts

Identifying misbehaving participants efficiently is a key contribution of “CGMP21”. An abort will happen if any player deviates from the protocol in a clearly identifiable way by not complying with instructions. In the case of such an abort, the guilty party would have to be identified and removed. In this section, we analyse how the protocol can identify abortion and remove mmisbehaving participants.

Abort Instances

Within the signing protocol, there are 3 instances that the protocol can abort. They can be summarized as follows:

  1. In step 2 of the signing process, when an invalid proof πi\pi_i is detected.

  2. In step 3 of the signing process, when an invalid proof πi1\pi_i^1 or πj2\pi_j^2 or πk3\pi_k^3 is detected for some i,j,ki,j,k.

  3. In step 5 of the signing proces, when gδ=iΔig^{\delta}=\sum_i\Delta_i

  4. In step 6 of the signing process, when (r,s)(r,s) is not a valid signature of MM

How to Identify Abortions

Now, we show that how to identify the misbehaving participants that cause the protocol to abort in each cases above.

  1. The first and second instances are straightforward. Whoever submits the wrong proof will be identified as malicious.

  2. The third and fourth instance are much more complicated. At a high level, the identification of these two instances proceed as follow:

    1. Each participant PiP_i is asked to reprove that the ciphertexts CijC_{ij} are well formed for each jij \neq i.

    2. Each participant PiP_i is asked to reveal Hi=Enci(kiγi)H_i=\mathsf{Enc_i}(k_i \gamma_i) and Hi=Enci(kiwi)H_i'=\mathsf{Enc_i}(k_i w_i) and prove their correctness given Ki,GiK_i,G_i and XiX_i.

    3. Each participant PiP_i prove that δi\delta_i is the plaintext obtained via the ciphertext Ui=HijiCijFji=Enci(kiγi+ji(αij+βij))U_i=H_i\prod_{j \neq i}C_{ij}F_{ji}=\mathsf{Enc_i}(k_i\gamma_i+\sum_{j \neq i}(\alpha_{ij}+\beta_{ij}))

    4. Similarly, each participant PiP_i prove that sis_i is the plaintext obtained via the ciphertext Vi=Kim(HijiCijFji)r=Enci(mki+r(kiwi+ji(uij+vij)))=Enci(mki+rσi)V_i=K_i^m(H_i'\prod_{j \neq i}C_{ij}'F_{ji}')^r=\mathsf{Enc_i}(mk_i+r(k_iw_i+\sum_{j \neq i}(u_{ij}+v_{ij})))=\mathsf{Enc_i}(mk_i+r\sigma_i)

    5. Whoever fails to prove will be identified as the malicious participant.

Security Consideration

Finally, since there has been numerous pracical attacks performed on threshold ECDSA implementations, we would like to discuss several concerns that should be noted when implementing the threshold ECDSA protocol.

  • Proving the Discrete Log Relation in Composite Modulus: Recall that in Step 3 of the key refresh process, we require the participants PiP_i to prove the discrete log relation between hi1h_{i1} and hi2h_{i2} in modulo NiN_i. This can be done using Schnorr's protocol for Ring, as specified in (see Supporting Protocols). The protocol uses binary challenge c{0,1}c \in \{0,1\}, which has soundness error 1/21/2. It is repeated λ\lambda times to achieve soundness error 1/2λ1/2^\lambda. When the order of the group is a prime number pp, one can extend the challenge set to be Zp\mathbb{Z}_p and execute the protocol only once, this is the case of an ordinary Schnorr protocol. However, we cannot do the same thing for the group ZN\mathbb{Z}^*_N, since its order is divisible by 22. Verichain showed that doing so can leak the secret key of the protocol. Hence, we need to repeat the Schnorr protocol for Ring λ\lambda times when proving the discrete log relation in modulo NiN_i for each ii.

  • The Requirement of Range Proof: Recall that in step 2 of the signing protocol, we require that each participant has to prove that some of their secret range must lie in a specified value (we require ki,λi,wi,23λk_i,\lambda_i,w_i, \le 2^{3\lambda} and γij,vij<27λ\gamma_{ij},v_{ij}<2^{7\lambda}). The range proof might looks unnecessary at the first glance, however it is shown in TS21 that the lack of these range proofs can break the security of the protocol. The reason for this is that range proofs ensure that the encrypted values are within a specified range, and prevent attackers from tampering with the values or sending invalid data. Hence it is necessary to ensure that these range proofs are done in the protocol.

FROST's Construction

In this section we briefly describe the FROST threshold Schnorr protocol in KG20, in which we assume that the readers have some familiarity to Schnorr signature scheme. Recall that the ordinary Schnorr signature scheme, the signature σ=(R,z)\sigma=(R,z) of a message MM is generated as follow

R=gr, c=H(RpkM) and z=r+csk,R=g^r,\ c=\mathsf{H}(R||\mathsf{pk}||M)\ \text{and}\ z=r+c\cdot sk,

where rZpr \leftarrow \mathbb{Z}_p and sksk is the signer's secret key. Note that the EdDSA signature scheme also produces the signature with the exact form above, with the only difference is that the nonce rr is produced deterministically. FROST aims to provide a valid Schnorr signature (as well as EdDSA signature) of MM above via a threshold manner. Compared to its threshold ECDSA counterpart, the FROST threshold Schnorr signature is much simplier, has much less features to describe and analyse. We now move to the actual construction of FROST and describe it.

Key Generation

In this section, we describe the key generation process in the construction of FROST below.

Notation: Let λ\lambda to be the security parameter. Let G\mathbb{G} to be a cyclic group whose order is a prime number. Let p(2λ1,2λ)p \in (2^{\lambda-1},2^\lambda) to be the order of G\mathbb{G} and let g,hg,h to be two generators of G\mathbb{G}. We denote Com\mathsf{Com} to be a secure binding and information theoretic hiding commitment scheme and H\mathsf{H} to be a cryptographic hash function. For any set S\mathcal{S} and for any iSi \in \mathcal{S} we denote λi,S=jS,jijji\lambda_{i,S}=\prod_{j\in \mathcal{S},j \neq i}\dfrac{j}{j-i} to be the Lagrange coefficient w.r.t SS.

Keygen (1λ){Pi}i=1n(1^\lambda)\langle \{P_i\}_{i=1}^n\rangle:

The key generation process is executed once at the beginning.

  1. Each participant PiP_i selects siZps_i \in Z_p and compute Ci=Com(gsi)C_i=\mathsf{Com}(g^{s_i}).

  2. Each participant PiP_i broadcasts yi=gsiy_i=g^{s_i}. The public key pkpk is set to be pk=i=1nyipk=\prod_{i=1}^ny_i. PiP_i then performs Feldman's Verifiable Secret Sharing scheme (see Supporting Protocols) to share sis_i to other participants. Each PjP_j add the secret shares received as his secret key, i.e, skj=isijsk_j=\sum_i s_{ij}. The values skisk_i are the shares of a (tn)(t-n) Shamir secret sharing of the secret key sksk.

  3. Finally, each participant uses Schnorr's protocol S91 (see Supporting Protocols) to prove in zero knowledge that he knows the secret key skisk_i,

By the property of Feldman's VSS, it can be proven that the public key pkpk is also equal to gskg^{sk}, hence the key pair (pk,sk)(pk,sk) generated using the key generation protocol above has the same form of a key pair in a Schnorr signature scheme.

Signing

In this section, we describe the signing process of the protocol. For any set S{1,,n}S \in \{1,\dots,n\} of t+1t+1 participants who participate to sign a message MM, let wi=λi,Sski(modp)w_i=\lambda_{i,S}\cdot sk_i \pmod{p}. Note that by Feldman's VSS, sk=iSwisk=\sum_{i \in S} w_i. Note that since pki=gskipk_i=g^{sk_i} is public after the key generation process, hence the value Wi=gwi=pkiλi,SW_i=g^{w_i}=pk_i^{\lambda_{i,\mathcal{S}}} can also be publicly computed. The signing protocol follows a 66 steps process below:

Sign(M){Pi(ski)}i=1n(M)\langle \{P_i(sk_i)\}_{i=1}^n\rangle:

  1. Each participant PiP_i chooses di,eiZpd_{i},e_{i} \in \mathbb{Z_p} and broadcasts (Di,Ei)=(gdi,gei)(D_{i},E_{i})=(g^{d_{i}},g^{e_{i}}). Denote B={(i,Di,Ei)}iSB=\{(i,D_i,E_i)\}_{i \in S}.

  2. For each jij \neq i, each PiP_i uses Schnorr protocol (see Supporting Algorithms) to check the validity of (Di,Ei)(D_i,E_i). If any check fails then the protocol aborts.

  3. Each PiP_i computes ρj=H(j,M,B)\rho_j=\mathsf{H}(j,M,B) for all jSj \in S. Each PiP_i then computes the group commitment R=jSDjEjρjR=\prod_{j \in S} D_jE_j^{\rho_j} and the challenge c=H(R,pk,M)c=\mathsf{H}(R,\mathsf{pk},M), then broadcasts (ρi,R,c)(\rho_i,R,c).

  4. Each PiP_i computes zi=di+eiρi+λi,Sskicz_i=d_i+e_i\rho_i+\lambda_{i,S}\cdot \mathsf{sk_i} \cdot c and broadcasts ziz_i.

  5. Each PiP_i computes Ri=DiEiρiR_i=D_iE_i^{\rho_i} and broadcasts RiR_i.

  6. For each ii, participants check if R=iSRiR=\prod_{i\in S}R_i and gi=Ripkicλi,Sg_i=R_i\mathsf{pk_i}^{c \lambda_{i,S}}. If any check fails, report the misbehaving PiP_i and the protocol is aborted. Otherwise, compute z=iSziz=\sum_{i \in S}z_i and returns σ=(R,z)\sigma=(R,z).

Verification

Recall that the verification algorithm in threshold Schnorr remain identical to an ordinary Schnorr verification algorithm. Hence, it is sufficient to describe the Verify algorithm of the Schnorr signature scheme below.

Verify(M,σ=(R,z),pk)(M,\sigma=(R,z),\mathsf{pk}): This is just the standard Schnorr verify algorithm, which can be publicly run by anyone. It works as follow:

  1. Compute c=H(RpkM)c=\mathsf{H}(R||\mathsf{pk}||M).

  2. Compute R=gzpkcR'=g^z \mathsf{pk}^{-c}.

  3. Check if R=RR'=R. If the check passes, return 11, otherwise return 00.

One can see that, if (R,z)(R,z) is a valid Schnorr signature scheme, which has the form R=gr,c=H(RpkM)R=g^r, c=\mathsf{H}(R||\mathsf{pk}||M) and z=r+csk)z=r+c \cdot \mathsf{sk}), then the verification algorithm above returns 11 since R=gzskc=gr=RR'=g^{z-\mathsf{sk}\cdot c}=g^r=R. The converse direction also holds, i.e, if the verify algorithm above return 11, then (R,c,z)(R,c,z) must be a valid Schnorr signature which have the form above.

Supporting Protocols

In this section, we specify the supporting protocols that support the signing protocol described in the previous section.

Feldman's VSS

Recall that in Step 2 of the key generation protocol, each participant PP has to perform Feldman's VSS to share his secret ss to other participants PiP_i. The process of Feldman's VSS is described as follows:

  1. PP generate a random degree tt polynomial f(x)=a0+a1x++atxtf(x)=a_0+a_1x+\dots+a_tx^t such that a0=sa_0=s, then broadcast Ai=gaiA_i=g^{a_i} for i{0,1,,t} i \in \{0,1,\dots,t\}. Finally PP secretly send the share si=f(i)s_i=f(i) to the ii-th participant PiP_i.

  2. Each participant PiP_i can verify the correctness of his share sis_i by checking gsi=j=0tAjijg^{s_i}=\prod_{j=0}^tA_j^{i^j}. If the check fails, PiP_i broadcasts a complaint to PP. If PP receives a complaint he will be disqualified.

Zero Knowledge Proofs

Schnorr Protocol:

In Step 3 of the initial key generation process, a participant who broadcasts pki=gskipk_i=g^{sk_i} must prove the knowledge of skisk_i using Schnorr protocol. Schnorr protocol can be described as follows:

  1. The prover chooses aZpa \in \mathbb{Z}_p and sends α=ga\alpha=g^a.

  2. The verifier sends a challenge cZpc \in \mathbb{Z}_p.

  3. The prover sends u=a+cσu=a+c\sigma.

  4. The verifier checks if gu=αpkicg^u=\alpha\cdot pk_i^c.

Threshold Signature Instantiations

In this section, we are going to discuss our concrete instatiations for the construction of Canneti et al and FROST. More specifically, we will discuss and analyse the security when instatiating the construction of Canneti et al using secp256k1 parameters and FROST with ed25519 and sr25519 parameters to support the MPC version for these concrete variants.

Threshold signatures for secp256k1

Bitcoin, the first and most well-known cryptocurrency, relies on the curve secp256k1 for its public key cryptography. Specifically, it uses the ECDSA algorithm with secp256k1 as the underlying elliptic curve. Many other cryptocurrencies, including Ethereum have since adopted this curve for their digital signature schemes. Since the curve can be used for the orinary ECDSA algorithm, it can also be used for the threshold ECDSA version as well. Below we describe the curve parameter and its security and efficiency analysis.

The secp256k1 curve parameters E:y2=x3+ax+bE:y^2=x^3+ax+b defined over Fp\mathbb{F}_p with order nn, cofactor ff and base point GG are as follows:

  • p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fp=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f

  • a=0x00a=0x00

  • b=0x07b=0x07

  • n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03Bbfd25e8cd0364141n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03Bbfd25e8cd0364141

  • f=1f=1

  • G=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,G=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)

For security analysis, this curve is chosen by Satoshi Nakamoto because unlike the popular NIST curves, secp256k1's constants were selected in a predictable way, which significantly reduces the possibility that the curve's creator inserted any sort of backdoor into the curve. In addition, it is implied in SECG1 that the curve has a security level of 128128 bits, which is considered secure.

We intend to implement the threshold ECDSA construction of CGGMP21 using secp256k1 parameters. We would like to use the library libsecp256k1 for curve operations, which has been tested extensively and undergone thorough optimitation, making it very fast to produce signatures.

Threshold signatures for ed25519

Ed25519 is the most popular instance of the Edwards-curve Digital Signature Algorithm (EdDSA) standardized in RFC 8032. In the paper, the authors instatiatied the Schnorr signature scheme with the curve curve25519 in its twisted Edward form instead of an ordinary elliptic curve such as secp256k1. The used curve in the scheme is popular due to its high speed compared to other curves without sacrificing security. Below we describe the curve parameters and its security and efficiency analysis.

The curve parameters E:ax2+y2=1+bx2y2E: ax^2+y^2=1+bx^2y^2 defined over Fp\mathbb{F}_p with order nn, cofactor ff and base point GG are as follows:

  • p=0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedp=0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed

  • a=0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca=0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec

  • b=0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3b=0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3

  • n=0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn= 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed

  • f=8f=8

  • G=(0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a,G=(0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a, 0x6666666666666666666666666666666666666666666666666666666666666658)0x6666666666666666666666666666666666666666666666666666666666666658)

For security analysis, the provable security of the instatiation of ed25519 parameters has been well studied in BCJZ20. In addition, it has been confirmed in BDLSY12 that the curve achieves 128128 bit security level, the same security level as secp256k1, which is considered secure. However, due to having the cofactor of 88, the scheme could be potentially vulnerable to a double spend exploit.

Recall that ed25519 is just a variant of Schnorr signature instatiatied with a a twisted Edward curve, and its signature form R,c,zR,c,z is identical to an ordinary Schnorr signature scheme, we can instatiate the FROST threshold signature scheme of KG20 with the parameters of ed25519 described in to achieve the MPC version of ed25519.

Threshold signatures for sr25519

The term sr25519 refers to the instatiation of Schnorr signature using the curve curve25519, the same curve as of EdDSA, which is specified in Schnorrkel. However, it additionally employs the method of point compression due to Ristretto to make makes Schnorr signatures over the Edward's curve more secure. Below we describe the curve parameter and its security and efficiency analysis.

The sr25519 scheme supports both forms of curve25519, i.e, its twisted Edward form and Montomery form. The twisted Edward form of curve25519 has been described in the previous Section. For the Montomery form, the curve can be written as E:by2=x3+ax2+xE:by^2=x^3+ax^2+x over Fp\mathbb{F}_p with order nn, cofactor ff and base point GG are as follows:

  • p=0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedp=0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed

  • a=0x76d06a=0x76d06

  • b=0x01b=0x01

  • n=0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn=0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed

  • cofactor=1cofactor=1

  • G=(0x09,0x20ae19a1b8a086b4e01edd2c7748d14c923d4d7e6d7c61b229e9c5a27eced3d9)G=(0x09,0x20ae19a1b8a086b4e01edd2c7748d14c923d4d7e6d7c61b229e9c5a27eced3d9)

For security analysis, recall that the curve curve25519 achieves 128128 bit security level, as specified in the previous Section. However, since sr25519 additionally uses the point compression due to Ristretto, it is safe from the bug could lead to a double spend expoit of Monero

Finally, because sr25519 is actually the Schnorr signature instatiatied with the curve25519 and FROST is a threshold Schnorr signature scheme that can be instatiated by any curve where the discrete log problem is hard, we can instatiate the FROST threshold signature scheme of KG20 with the parameters of sr25519 described in to achieve the MPC version of sr25519.