Ringtail
Signing Protocol
Key generation, 2-round threshold signing, and verification
Key Generation (Gen)
Key generation is performed by a trusted dealer. The dealer generates the public parameters and distributes secret key shares to each party via Shamir secret sharing.
- Sample a public matrix A from the ring
- Sample a secret vector s from a discrete Gaussian distribution
- Compute b = A*s + e (with Gaussian error e)
- Round b to produce the public parameter b-tilde
- Split s into shares via
ShamirSecretSharingwith Lagrange coefficients - Distribute per-party seeds and MAC keys for authenticated communication
The output is a set of KeyShare values (one per party) and a GroupKey containing A and b-tilde.
Round 1: Nonce Generation
Each signing party generates commitments using PRF-derived randomness.
round1Data := signer.Round1(sessionID, prfKey, signerIndices)Each party:
- Derives per-session randomness from the PRF key and session ID
- Samples masking vectors from the appropriate distributions
- Computes commitment values
- Broadcasts
Round1Datato all other signing parties
Round 2: Signature Share
After receiving all Round 1 data, each party computes its signature share.
round2Data, err := signer.Round2(sessionID, message, prfKey, signerIndices, round1Data)Each party:
- Computes the challenge hash c from the message and all Round 1 commitments
- Combines its secret share with the challenge and masking values
- Verifies MACs from other parties to detect malicious behavior
- Produces a partial signature vector z_i
Finalization
The combiner collects all Round 2 data and produces the final signature.
signature, err := signer.Finalize(round2Data)The combiner:
- Aggregates all partial signature vectors
- Checks the norm bound on the combined signature
- Returns the final
Signaturecontaining vectors z and h
Verification
Verification checks the signature against the group key without knowing any secret shares.
valid := ringtail.Verify(groupKey, message, signature)The verifier:
- Recomputes the challenge c from the message and signature components
- Checks Az = b-tildec + h (mod rounding)
- Verifies that the signature norm is within the acceptance bound
- Returns true if all checks pass
Security Guarantees
| Threat | Protection |
|---|---|
| Quantum computer | Module-LWE hardness (128-bit PQ security) |
| Malicious signer | MAC-authenticated messages between parties |
| Replay | Session ID binding prevents cross-session reuse |
| Forgery | Norm bounds and challenge binding prevent existential forgery |