Back to all stories
Technical Blogs
Technical Insights

Threshold Cryptography III: Binance tss-lib’s 9-Round Threshold ECDSA

7/15/2025
Threshold Cryptography III: Binance tss-lib’s 9-Round Threshold ECDSA

In our recent blog, Threshold Cryptography II, we explored the FROST protocol for threshold EdDSA. Compared to EdDSA, threshold ECDSA is significantly more complex due to the difficulty of securely distributing the signature’s non-linear terms. This issue was addressed in GG18 [3] using the Multiplicative-to-Additive (MtA) secret share conversion protocol and Paillier additively homomorphic encryption scheme, enabling a secure and efficient threshold signature scheme.

This protocol enhances fault tolerance and security guarantees, making it suitable for decentralized use cases such as cross-chain bridges, multiparty computation (MPC) wallets, and other blockchain applications that require resilience against single points of failure when nodes (parties) are performing cryptographic signing operations.

Binance tss-lib [1] is a Go implementation of threshold ECDSA protocol based on GG18 [3]. It performs distributed key generation and a 9-round signing protocol, allowing any subset of

KaTeX can only parse string typed expression
out of
KaTeX can only parse string typed expression
participants to jointly produce a valid ECDSA signature without reconstructing the secret key.

This third post in the Threshold Cryptography series provides a bird’s-eye view of the 9-round threshold ECDSA protocol implemented in tss-lib [1]. Detailed exposition of the underlying MtA secret share conversion protocol and zero-knowledge proofs will follow in the next two posts.

ECDSA

Elliptic Curve Digital Signature Algorithm (ECDSA) is an elliptic curve variant of the Digital Signature Algorithm (DSA). It operates over a cyclic group

KaTeX can only parse string typed expression
of large prime order
KaTeX can only parse string typed expression
, generated by a curve base point
KaTeX can only parse string typed expression
on the elliptic curve. Additionally, a cryptographic hash function
KaTeX can only parse string typed expression
maps arbitrary strings to elements in the prime field
KaTeX can only parse string typed expression
. The notation
KaTeX can only parse string typed expression
stands for curve point addition and
KaTeX can only parse string typed expression
stands for scalar multiplication with a curve point. The secret key is a nonzero scalar
KaTeX can only parse string typed expression
(i.e., nonzero elements in
KaTeX can only parse string typed expression
), and its public key is the curve point
KaTeX can only parse string typed expression
.

Signature Generation

  1. Given a message
    KaTeX can only parse string typed expression
    , compute the hash
    KaTeX can only parse string typed expression
    .
  2. Select a random nonce
    KaTeX can only parse string typed expression
    .
  3. Compute point
    KaTeX can only parse string typed expression
    and let
    KaTeX can only parse string typed expression
    be its
    KaTeX can only parse string typed expression
    -coordinate.
  4. Then compute
    KaTeX can only parse string typed expression
    mod
    KaTeX can only parse string typed expression
    .
  5. The ECDSA signature is
    KaTeX can only parse string typed expression
    where both
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    are scalars in
    KaTeX can only parse string typed expression
    .

Signature Verification

  1. Given a signature
    KaTeX can only parse string typed expression
    , verify
    KaTeX can only parse string typed expression
    .
  2. Compute
    KaTeX can only parse string typed expression
    , where
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    is the public key.
  3. The signature
    KaTeX can only parse string typed expression
    is valid if the
    KaTeX can only parse string typed expression
    -coordinate of
    KaTeX can only parse string typed expression
    equals to
    KaTeX can only parse string typed expression
    .

Challenge in ECDSA Threshold Signing

Unlike EdDSA, the challenge to create threshold ECDSA lies in the nonlinear terms

KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
during the signature generation. Simply distributing the nonce
KaTeX can only parse string typed expression
and private key
KaTeX can only parse string typed expression
among
KaTeX can only parse string typed expression
parties do not directly yield signature shares.

To get around with it, the Bar-Ilan and Beaver inversion trick was utilized in the MtA protocol of GG18 [3] by introducing a random value

KaTeX can only parse string typed expression
, then computing
KaTeX can only parse string typed expression
, and rewriting
KaTeX can only parse string typed expression
.

If

KaTeX can only parse string typed expression
is additively shared among the
KaTeX can only parse string typed expression
parties, then
KaTeX can only parse string typed expression
is publicly revealed, while
KaTeX can only parse string typed expression
remains secretly shared.

Defining intermediate values

KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
, then
KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
, so each party holds one share
KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
.

As long as the multiplicative shares

KaTeX can only parse string typed expression
(i.e., each term
KaTeX can only parse string typed expression
in
KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
in
KaTeX can only parse string typed expression
) can be converted to additive share
KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
such that
KaTeX can only parse string typed expression
, then each party will hold the additive shares
KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
of the product
KaTeX can only parse string typed expression
and
KaTeX can only parse string typed expression
.

9-Round Threshold ECDSA

Binance tss-lib [1] assumes two types of communication channels: a broadcast channel for disseminating messages to all parties except for itself, and a peer-to-peer (p2p) channel for secure, private communication between two individual parties.

The implementation of the threshold ECDSA over the Secp256k1 curve operates in 9 rounds with two additional offline stages, prepare and finalize. In each round, parties validate and process messages received from peers via broadcast or p2p channels, then generate and transmit new messages accordingly.

It assumes that a secret key is distributed to

KaTeX can only parse string typed expression
parties (for example, with methods on secret sharing schemes in the first post) so that each holds a secret share and any
KaTeX can only parse string typed expression
parties or more could reconstruct the private key. At the beginning of the protocol, the parties in the group prepared to participate in the signing are predetermined and the group size is
KaTeX can only parse string typed expression
. For simplicity, we assume that only
KaTeX can only parse string typed expression
parties
KaTeX can only parse string typed expression
in the group participate in the ECDSA threshold signing.

Prepare

Given the

KaTeX can only parse string typed expression
parties, each party
KaTeX can only parse string typed expression
converts its Shamir secret share to additive secret share by multiplying the
KaTeX can only parse string typed expression
-th Lagrange coefficient
KaTeX can only parse string typed expression
, where
KaTeX can only parse string typed expression
is the participant identifier associated to
KaTeX can only parse string typed expression
used in the key sharing (Note that the first post on distributed key generation assumes
KaTeX can only parse string typed expression
for simplicity). Additionally,
KaTeX can only parse string typed expression
computes all the public key shares of the
KaTeX can only parse string typed expression
parties by taking scalar multiplication with the Lagrange coefficients.

Refer to GG18 [3], Page 11:

Code 1

Round 1

Each party

KaTeX can only parse string typed expression
checks that the hash of message
KaTeX can only parse string typed expression
is within the range of the scalar field of the Secp256k1 curve, then every
KaTeX can only parse string typed expression
starts to run the MtA protocol with every other peer to convert the multiplicative shares to additive shares.

  1. KaTeX can only parse string typed expression
    selects nonce share
    KaTeX can only parse string typed expression
    and auxiliary random value
    KaTeX can only parse string typed expression
    .
  2. Computes point
    KaTeX can only parse string typed expression
    and creates its commitment (i.e., hash of the point
    KaTeX can only parse string typed expression
    and a random value
    KaTeX can only parse string typed expression
    .).
  3. With every other
    KaTeX can only parse string typed expression
    ’s Paillier public key,
    KaTeX can only parse string typed expression
    invokes AliceInit() to encrypt the nonce share
    KaTeX can only parse string typed expression
    (Alice’s share
    KaTeX can only parse string typed expression
    ) and create range proof of
    KaTeX can only parse string typed expression
    for each
    KaTeX can only parse string typed expression
    .
  4. KaTeX can only parse string typed expression
    sends the encrypted value (ciphertext) of
    KaTeX can only parse string typed expression
    and its range proof to every corresponding
    KaTeX can only parse string typed expression
    via the p2p channel.
  5. KaTeX can only parse string typed expression
    broadcasts the commitment to
    KaTeX can only parse string typed expression
    .

Round 1

Refer to GG18 [3], Page 11:

Code 2

Refer to GG18 [3], Page 9:

Code 3

Round 2

  1. Each party

    KaTeX can only parse string typed expression
    invokes BobMid() to

    • verify the range proof from round 1.
    • report the party with invalid range proof.
    • call ProveBob() to create its share
      KaTeX can only parse string typed expression
      and encrypt the share with
      KaTeX can only parse string typed expression
      (Bob’s share
      KaTeX can only parse string typed expression
      ) and
      KaTeX can only parse string typed expression
      ’s Paillier public key, then generate the Bob proof.
    • Aborts if an error occurs.
  2. KaTeX can only parse string typed expression
    invokes BobMidWC() (i.e., MtA with check) to

    • verify the range proof from round 1.
    • report the party with invalid range proof.
    • call ProveBob() to create its share
      KaTeX can only parse string typed expression
      and encrypt the share with its private key share
      KaTeX can only parse string typed expression
      (Bob’s share
      KaTeX can only parse string typed expression
      ) and
      KaTeX can only parse string typed expression
      ’s Paillier public key, then generate the Bob proof with check with an extra Schnorr proof to the
      KaTeX can only parse string typed expression
      .
    • Aborts if an error occurs.
  3. KaTeX can only parse string typed expression
    sends encrypted shares and Bob proofs to the corresponding peer
    KaTeX can only parse string typed expression
    .

Round 2

Refer to GG18 [3], Page 9:

Code 4

Round 3

  1. Each party

    KaTeX can only parse string typed expression
    invokes AliceEnd() to

    • verify the Bob proof.
    • report the party with invalid Bob proof.
    • decrypt the encrypted share and compute its share
      KaTeX can only parse string typed expression
      .
    • Aborts if an error occurs.
  2. Each party

    KaTeX can only parse string typed expression
    invokes AliceEndWC() to

    • verify the Bob proof with check.
    • report the party with invalid Bob proof with check.
    • decrypt the encrypted share and compute its share
      KaTeX can only parse string typed expression
      .
    • Aborts if an error occurs.
  3. Each party

    KaTeX can only parse string typed expression
    computes the
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    , where
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    .

  4. KaTeX can only parse string typed expression
    broadcasts
    KaTeX can only parse string typed expression
    to other participants.

Round 3

Refer to GG18 [3], Page 9:

Code 5

Refer to GG18 [3], Page 11:

Page 11

Round 4

  1. Each party
    KaTeX can only parse string typed expression
    sums over all the
    KaTeX can only parse string typed expression
    mod
    KaTeX can only parse string typed expression
    and computes its inverse mod
    KaTeX can only parse string typed expression
    .
  2. KaTeX can only parse string typed expression
    creates a Schnorr proof to
    KaTeX can only parse string typed expression
    .
  3. KaTeX can only parse string typed expression
    broadcasts the Schnorr proof with the decommitment in round 1.

Round 4

Refer to GG18 [3], Page 11:

Page 11.2

Round 5

  1. Each party
    KaTeX can only parse string typed expression
    verifies
    KaTeX can only parse string typed expression
    's commitment and extracts
    KaTeX can only parse string typed expression
    from it, then verifies its Schnorr proof.
  2. KaTeX can only parse string typed expression
    computes the curve point
    KaTeX can only parse string typed expression
    (equal to
    KaTeX can only parse string typed expression
    ) and gets its
    KaTeX can only parse string typed expression
    -coordinate,
    KaTeX can only parse string typed expression
    .
  3. KaTeX can only parse string typed expression
    computes its signature share
    KaTeX can only parse string typed expression
    with the hash of the signing message
    KaTeX can only parse string typed expression
    and the share
    KaTeX can only parse string typed expression
    .
  4. KaTeX can only parse string typed expression
    selects random values
    KaTeX can only parse string typed expression
    ,
    KaTeX can only parse string typed expression
    , then computes
    KaTeX can only parse string typed expression
    ,
    KaTeX can only parse string typed expression
    and creates hash commitment to
    KaTeX can only parse string typed expression
    ,
    KaTeX can only parse string typed expression
    .
  5. KaTeX can only parse string typed expression
    broadcasts the hash commitment.

Round 5

Refer to GG18 [3], Page 11:

Code 8

Round 6

  1. Each party
    KaTeX can only parse string typed expression
    creates Schnorr proof to
    KaTeX can only parse string typed expression
    with
    KaTeX can only parse string typed expression
    and Schnorr proof to
    KaTeX can only parse string typed expression
    with
    KaTeX can only parse string typed expression
    .
  2. KaTeX can only parse string typed expression
    broadcasts the decommitment in round 5 and Schnorr proofs.

Round 6

Refer to GG18 [3], Page 11 and 12:

2 Codes

Round 7

  1. Each party
    KaTeX can only parse string typed expression
    verifies the hash commitment to
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    .
  2. KaTeX can only parse string typed expression
    verifies the Schnorr proofs.
  3. Reports the party with invalid Bob proof with check. Aborts if it fails.
  4. KaTeX can only parse string typed expression
    computes
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    .
  5. KaTeX can only parse string typed expression
    continues to compute
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    .
  6. KaTeX can only parse string typed expression
    creates the hash commitment to
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    .
  7. KaTeX can only parse string typed expression
    broadcasts the hash commitment.

Round 7

Refer to GG18 [3], Page 12:

Player

Round 8

  1. Each party
    KaTeX can only parse string typed expression
    broadcasts the decommitment to
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    from round 7.

Round 8

Refer to GG18 [3], Page 12:

5D

Round 9

  1. Each party
    KaTeX can only parse string typed expression
    computes
    KaTeX can only parse string typed expression
    and
    KaTeX can only parse string typed expression
    .
  2. KaTeX can only parse string typed expression
    verifies if
    KaTeX can only parse string typed expression
    . Aborts if it is not.
  3. Until this point, it is safe for
    KaTeX can only parse string typed expression
    to broadcast its signature share
    KaTeX can only parse string typed expression
    .

Round 9

Refer to GG18 [3], Page 12:

Player P1

Finalize

  1. Each party
    KaTeX can only parse string typed expression
    computes
    KaTeX can only parse string typed expression
    .
  2. KaTeX can only parse string typed expression
    creates the signature
    KaTeX can only parse string typed expression
    and converts it to a standard format with recovery ID to prevent signature malleability.
  3. KaTeX can only parse string typed expression
    verifies the newly created signature to ensure it is valid.

Conclusion

This post provides a high-level overview of the 9-round threshold ECDSA scheme implemented in Binance tss-lib [1]. The technical details on the MtA secret share conversion protocol and zero-knowledge proofs utilized in the protocol will be covered in the following two posts.

References

  1. Binance: https://github.com/bnb-chain/tss-lib
  2. Binance: Binance Open-Sources Threshold Signature Scheme Library
  3. Rosario Gennaro, Steven Goldfeder, 2018: Fast Multiparty Threshold ECDSA with Fast Trustless Setup (GG18)
  4. Ran Canetti, Rosario Gennaro, Steven Goldfeder, Nikolaos Makriyannis, Udi Peled, 2021: UC Non-Interactive, Proactive, Threshold ECDSA with Identifiable Aborts (CGGMP21)