The second post in our Threshold Cryptography series explores the FROST threshold signing protocol, as proposed in FROST: Flexible Round-Optimized Schnorr Threshold Signatures [1], and highlights a potential issue that arises when implementing the protocol in a decentralized setting. This issue allows a malicious participant to send inconsistent nonce commitments, leading to honest participants to be falsely accused of misbehavior.
FROST is a novel threshold signature scheme based on the Schnorr signature, so we will begin by reviewing the fundamentals of Schnorr signature.
Schnorr Signature
A Schnorr signature over a message KaTeX can only parse string typed expression
m using a secret key KaTeX can only parse string typed expression
s and its corresponding public key KaTeX can only parse string typed expression
Y=s∙g∈G involves the following steps, where the group KaTeX can only parse string typed expression
G consists of elliptic curve points generated by the generator KaTeX can only parse string typed expression
g of a large prime order KaTeX can only parse string typed expression
q and KaTeX can only parse string typed expression
∙ denotes the scalar multiplication on curve points.
Signature Generation
- Sample a random unused nonce
KaTeX can only parse string typed expression
r from KaTeX can only parse string typed expression
Zq∗ (i.e., nonzero elements in the prime field KaTeX can only parse string typed expression
Zq), and compute the nonce commitment KaTeX can only parse string typed expression
R=r∙g∈G.
- Calculate the challenge scalar
KaTeX can only parse string typed expression
c=H(R,Y,m), where KaTeX can only parse string typed expression
H is a cryptographic hash function.
- Compute the response
KaTeX can only parse string typed expression
z=r+c⋅s mod KaTeX can only parse string typed expression
q.
- The signature is
KaTeX can only parse string typed expression
σ=(R,z) where KaTeX can only parse string typed expression
R is a curve point KaTeX can only parse string typed expression
G and KaTeX can only parse string typed expression
z is a scalar KaTeX can only parse string typed expression
Zq.
The signature generation process is incorporated in the formula modified from the one in Notes on Threshold EdDSA/Schnorr Signatures [3], Page 9.

Signature Verification
Given signature KaTeX can only parse string typed expression
σ=(R,z):
- Compute the challenge scalar
KaTeX can only parse string typed expression
c=H(R,Y,m).
- Then compute commitment
KaTeX can only parse string typed expression
R′=z∙g−c∙Y, where KaTeX can only parse string typed expression
∙ denotes scalar multiplication and KaTeX can only parse string typed expression
− denotes the curve point subtraction.
- The signature is valid if
KaTeX can only parse string typed expression
R′=R.
FROST Threshold Signature Scheme
The FROST protocol specifies a threshold Schnorr signature scheme executed in three phrases over two communication rounds. It assumes a secret key KaTeX can only parse string typed expression
s is shared among KaTeX can only parse string typed expression
n participants via key distribution with a trusted dealer or distributed key generation (as described in Threshold Cryptography I: Distributed Key Generation [4]) such that any subset of KaTeX can only parse string typed expression
t+1 or more participants are able to reconstruct the secret key.
In both FROST [1] and RFC 9591 [2], the protocol incorporates a semi-trusted signature aggregator (SA) to enhance efficiency. The SA is a participant or an external entity, depending on implementation.

The protocol is instantiated with a generator KaTeX can only parse string typed expression
g on an elliptic curve KaTeX can only parse string typed expression
G of large prime order KaTeX can only parse string typed expression
q, and operates over the finite field KaTeX can only parse string typed expression
Zq and its multiplicative subgroup KaTeX can only parse string typed expression
Zq∗ (i.e., nonzero elements in KaTeX can only parse string typed expression
Zq). Two hash functions, KaTeX can only parse string typed expression
H1 and KaTeX can only parse string typed expression
H2, map arbitrary strings to KaTeX can only parse string typed expression
Zq∗.
1. Nonce Pair Generation
Each participant KaTeX can only parse string typed expression
Pi generates an unused nonce pair KaTeX can only parse string typed expression
(di,ei) with each in KaTeX can only parse string typed expression
Zq∗ along with its commitments KaTeX can only parse string typed expression
(Di,Ei) such that KaTeX can only parse string typed expression
Di=di∙g and KaTeX can only parse string typed expression
Ei=ei∙g.
2. Signing
- SA selects a subset
KaTeX can only parse string typed expression
S of KaTeX can only parse string typed expression
t+1 distinct participants to join the signing process, then computes the public key KaTeX can only parse string typed expression
Y=∑i∈SYi of the group of these participants, where KaTeX can only parse string typed expression
Yi is the public key share of KaTeX can only parse string typed expression
Pi that is publicly known.
- SA creates an ordered list
KaTeX can only parse string typed expression
B=<(i,Di,Ei)> of the participant index and nonce commitments where KaTeX can only parse string typed expression
i∈S.
- SA broadcasts
KaTeX can only parse string typed expression
(m,B) to all the participants, where KaTeX can only parse string typed expression
m is the message.
- Upon receiving
KaTeX can only parse string typed expression
(m,B) , each participant KaTeX can only parse string typed expression
Pi validates message KaTeX can only parse string typed expression
m and checks that all nonce commitments are in KaTeX can only parse string typed expression
G but are not the identity.
- Then
KaTeX can only parse string typed expression
Pi calculates the binding values KaTeX can only parse string typed expression
ρi=H1(i,m,B), KaTeX can only parse string typed expression
i∈S, group commitment KaTeX can only parse string typed expression
R=∑i∈S(Di+ρi∙Ei) and challenge KaTeX can only parse string typed expression
c=H2(R,Y,m).
KaTeX can only parse string typed expression
Pi then computes its signature share KaTeX can only parse string typed expression
zi=di+ρi⋅ei+c⋅λi⋅si with its Shamir secret share KaTeX can only parse string typed expression
si and multiplied by the Lagrange coefficient KaTeX can only parse string typed expression
λi=∏j=1,j=it+1pj−pipj to convert the Shamir secret share into additive secret share, and nonce pair KaTeX can only parse string typed expression
(di,ei).
- Finally,
KaTeX can only parse string typed expression
Pi sends KaTeX can only parse string typed expression
zi to the SA and deletes the used nonce pair and commitments.
3. Signature Share Aggregation
- For each
KaTeX can only parse string typed expression
i∈S, SA computes KaTeX can only parse string typed expression
ρi=H1(i,m,B), KaTeX can only parse string typed expression
Ri=Di+ρi∙Ei, then aggregates the group commitment KaTeX can only parse string typed expression
R=∑i∈SRi=∑i∈S(Di+ρi∙Ei). The challenge is computed via KaTeX can only parse string typed expression
c=H2(R,Y,m).
- Each signature share
KaTeX can only parse string typed expression
zi is verified through KaTeX can only parse string typed expression
Ri=zi∙g−(c⋅λi)∙Yi, where KaTeX can only parse string typed expression
Yi is the KaTeX can only parse string typed expression
Pi’s public key share KaTeX can only parse string typed expression
Yi=si∙g and KaTeX can only parse string typed expression
λi=∏j=1,j=it+1pj−pipj is the Lagrange coefficient. This corresponds to individual Schnorr signature share verification. If any check fails, the corresponding KaTeX can only parse string typed expression
Pi is identified as misbehavior and the process is aborted.
- Upon successful verification, the final signature is aggregated as
KaTeX can only parse string typed expression
(R,z) where KaTeX can only parse string typed expression
z=∑i∈Szi.
Unidentifiability Issue
In some implementations, the protocol is executed in a decentralized manner by eliminating the signature aggregator for ease of implementation. Each participant independently broadcasts their nonce commitments and signature shares to all other participants.
The Issue
Without a signature aggregator, participants may receive inconsistent nonce commitments from a malicious participant. As in Section 7.5 of RFC 9591 [2], this could possibly lead to an invalid signature:
“The requirements for the underlying network channel remain the same in the setting where all participants play the role of the Coordinator, in that all exchanged messages are public and the channel must be reliable. However, in the setting where a player attempts to split the view of all other players by sending disjoint values to a subset of players, the signing operation will output an invalid signature. To avoid this DoS, implementations may wish to define a mechanism where messages are authenticated so that cheating players can be identified and excluded.”
In addition to the DoS attack, this version of FROST implementation loses its identifiability feature. Even worse, it also enables a malicious participant to falsely implicate honest participants as misbehaving.
- By sending the different commitments to subsets of the group, the malicious participant is able to partition the participants into divergent views of the set of nonce commitments
KaTeX can only parse string typed expression
B=<(i,Di,Ei)>, KaTeX can only parse string typed expression
i∈S.
- Each participant generates its signature share based on its local view of
KaTeX can only parse string typed expression
B=<(i,Di,Ei)>, including the nonce commitment received from the malicious participant.
- Consequently, signature shares from participants with differing views become invalid during verification, causing honest participants to be incorrectly flagged as misbehavior.
- Depending on the specific operations later, the worst scenario would allow malicious actors to kick out honest participants.
An Example
Let’s consider a case with 4 participants, where Participant 1 is malicious and the others are honest.
- Participant 1 sends inconsistent nonce commitments:
KaTeX can only parse string typed expression
(D1,E1) to Participants 2 and 3, and KaTeX can only parse string typed expression
(D1′,E1′) to Participant 4.
- Each participant then computes its signature share based on its local view of the nonce commitments.
- During the signature verification,
- Verification of the signature share of participant 4 fails in participants 2 and 3, and it could also fail in participant 1 as it’s malicious.
- Verification of the signature share of participant 2 or 3 fails in participant 4 depending on the order of arrival of the message.
- Verification of the signature share of participant 1 is successful in all participants as it could send different signature shares based on the receiver’s local view of the nonce commitment.
- As a result, the honest Participant 4 will be falsely accused of misbehavior.

This enables the malicious participant to remain undetected while falsely implicating an honest participant as misbehavior.
To mitigate this issue, the protocol may incorporate an additional round in which each participant verifies that all received nonce commitments are consistent across the network. If any inconsistency is detected, the protocol aborts immediately.
This mitigation relies on the assumption that at least two participants are honest, ensuring that any deviation from consistency will be detected. While it may be possible to isolate the group of honest participants, it is not feasible to isolate a single honest party without the others noticing the discrepancy.
Conclusion
This post reviewed the Schnorr signature and its threshold signature scheme, FROST protocol with signature aggregator role, highlighting challenges in decentralized implementations without an aggregator. The next three posts will cover the ECDSA threshold signature scheme in GG18 [5] and its implementation in Binance's Go-based library, tss-lib [6].
References
- Chelsea Komlo, Ian Goldberg, 2020: FROST: Flexible Round-Optimized Schnorr Threshold Signatures.
- Deirdre Connolly, Chelsea Komlo, Ian Goldberg, Christopher A. Wood, 2024: RFC 9591.
- Luís T. A. N. Brandão, Michael Davidson, 2022: Notes on Threshold EdDSA/Schnorr Signatures.
- CertiK, 2025: Threshold Cryptography I: Distributed Key Generation
- Rosario Gennaro, Steven Goldfeder, 2018: Fast Multiparty Threshold ECDSA with Fast Trustless Setup (GG18)
- Binance: https://github.com/bnb-chain/tss-lib.