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 using a secret key and its corresponding public key involves the following steps, where the group consists of elliptic curve points generated by the generator of a large prime order and denotes the scalar multiplication on curve points.
Signature Generation
- Sample a random unused nonce from (i.e., nonzero elements in the prime field \mathbb{Z}_q$), and compute the nonce commitment $R = r \bullet g \in G.
- Calculate the challenge scalar , where is a cryptographic hash function.
- Compute the response mod .
- The signature is where is a curve point and is a scalar .
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 :
- Compute the challenge scalar .
- Then compute commitment , where denotes scalar multiplication and denotes the curve point subtraction.
- The signature is valid if .
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 is shared among 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 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 on an elliptic curve of large prime order , and operates over the finite field and its multiplicative subgroup (i.e., nonzero elements in \mathbb{Z}_q$). Two hash functions, $H_1 and , map arbitrary strings to .
1. Nonce Pair Generation
Each participant generates an unused nonce pair with each in along with its commitments such that and .
2. Signing
- SA selects a subset of distinct participants to join the signing process, then computes the public key of the group of these participants, where is the public key share of that is publicly known.
- SA creates an ordered list of the participant index and nonce commitments where .
- SA broadcasts to all the participants, where is the message.
- Upon receiving , each participant validates message and checks that all nonce commitments are in but are not the identity.
- Then calculates the binding values , , group commitment and challenge .
- then computes its signature share with its Shamir secret share and multiplied by the Lagrange coefficient to convert the Shamir secret share into additive secret share, and nonce pair .
- Finally, sends to the SA and deletes the used nonce pair and commitments.
3. Signature Share Aggregation
- For each , SA computes , , then aggregates the group commitment . The challenge is computed via .
- Each signature share is verified through , where is the P_i$’s public key share $Y_i = s_i \bullet g and is the Lagrange coefficient. This corresponds to individual Schnorr signature share verification. If any check fails, the corresponding is identified as misbehavior and the process is aborted.
- Upon successful verification, the final signature is aggregated as where .
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 , .
- Each participant generates its signature share based on its local view of , 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: to Participants 2 and 3, and 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.



