FROST and DKG
To support multisig-controlled shielded transactions, Bermuda uses threshold Schnorr signing under a single group public key: multiple participants hold independent key shares, and any threshold-sized subset can jointly produce a standard Schnorr signature.
FROST, short for Flexible Round-Optimized Schnorr Threshold signatures, is the signing protocol used for this model. Bermuda supports two setup paths for the resulting shares: dealer-based key generation and distributed key generation (DKG).
For background, see the original FROST paper: Komlo and Goldberg, "FROST: Flexible Round-Optimized Schnorr Threshold Signatures".
Threshold key material
Let be the Grumpkin generator and let be the Grumpkin scalar field order.
A threshold shared secret is defined by a degree- polynomial
whose constant term
is the group secret, with corresponding group public key
Each participant is assigned a non-zero identifier and receives the secret share
To make these shares publicly verifiable, the polynomial coefficients are committed to as
for .
A share is valid if it satisfies
This is the verifiable secret sharing (VSS) relation used in both dealer-based setup and DKG share verification in the SDK.
Two setup models
Bermuda supports two setup models for arriving at the same threshold key material:
- a dealer samples the polynomial and distributes the shares
- the participants jointly generate the polynomial material through DKG
In both cases, the output is the same shape:
- one group public key
- one long-lived secret share per participant
- public commitments that let recipients verify shares
Those shares can then be used with FROST to produce a standard Schnorr signature.
Dealer-based key generation
Dealer-based key generation is the simplest setup path in the SDK.
The dealer:
- samples the polynomial
- evaluates for each participant id
- computes the coefficient commitments
- returns one key package per participant together with the full VSS commitment
The group public key is the first coefficient commitment:
Each participant can verify its received share against the VSS relation before accepting it.
Distributed key generation (DKG)
Dealer-based setup is simple, but it assumes one trusted party sampled the secret polynomial correctly and did not retain the full secret material. DKG removes that assumption by having every participant contribute its own polynomial and secret shares, so that no single participant ever constructs the full group secret on its own.
Round 1
Each participant samples its own degree- polynomial
and publishes the coefficient commitments
for .
The participant also proves knowledge of the constant coefficient behind .
The SDK uses a Schnorr-style proof of knowledge:
The resulting proof is the pair
Verification checks the equivalent relation
This prevents a participant from publishing a first coefficient commitment without knowing its discrete log.
Round 2
After all round-1 packages have been collected and verified, participant evaluates its local polynomial at every participant id and privately sends
Recipient verifies each incoming share against sender 's round-1 commitments:
If a share fails this relation, the SDK rejects it.
Final share derivation
After recipient has accepted all incoming round-2 shares, it computes its long-lived threshold share as
This is exactly the evaluation of the aggregate polynomial
at .
Conceptually, the resulting group secret is
but it is never explicitly reconstructed during the protocol.
and the group public key is obtained without reconstructing :
This is how the SDK finalizes DKG: it sums the constant-term commitments for the public key and the verified incoming shares for the participant's private share.
FROST signing
Once either setup flow has produced the long-lived shares and the group public key , Bermuda uses FROST to sign.
Let be the active signer set for a message , where .
Each signer holds its long-lived share and samples two fresh non-zero nonces:
with public nonce commitments
and
The coordinator constructs a canonical signing package by sorting the signer commitments by participant id. This canonical ordering matters because all signers must derive the same transcript.
For each signer, Bermuda derives a binding factor
where the implementation hashes:
- a dedicated FROST binding-factor domain separator
- the message field element
- the group public key coordinates
- the full canonical commitment list
- the participant id
Each signer's effective commitment is then
and the aggregate commitment is
The Schnorr challenge is
using the FROST signature domain separator.
In a threshold signature, any signer set of size at least can sign. To make that signer set produce a signature under the same group public key, each signer weights its share by the Lagrange coefficient at zero:
Signer then returns the partial signature
The aggregator sums the responses
and outputs the final group signature
which verifies exactly like a standard Schnorr signature under the group public key .