T-Chain Threshold Signatures with CGG21 (UC Non-Interactive ECDSA)
Formal design for integrating the CGG21 threshold ECDSA protocol in Lux's T-Chain (expanding on LP-13).
Abstract
This proposal introduces a formal design for using the Chase–Gennaro–Goldfeder 2021 (CGG21) threshold signature scheme in Lux’s T-Chain (the MPC-based bridge chain). We expand on LP-13 by providing an academic-style rationale for adopting CGG21, an overview of its node-level integration in Lux’s MVM, comparisons with prior threshold schemes (GG18, DKLS19, and Ethereum’s threshold cryptography efforts), and a detailed threat model with security assumptions. We also outline a roadmap for a hybrid post-quantum upgrade, incorporating a subset of Ringtail (a lattice-based threshold signature scheme) participants into the signing group to achieve partial post-quantum protection during the transition.
Motivation and Rationale for CGG21
Figure 1: Concept of a threshold signature. A signature is only produced if a threshold of participants collaborate, mitigating single points of failure.
Threshold signatures allow a private key’s functionality to be distributed among (n) parties such that any quorum of (t) (threshold) parties can jointly produce a valid signature, whereas any collusion of fewer than (t) cannot [9]. This property greatly enhances security for high-value assets and cross-chain bridges by eliminating any single point of key compromise.
CGG21, formally known as “UC Non-Interactive, Proactive, Threshold ECDSA with Identifiable Aborts,” is a state-of-the-art threshold ECDSA protocol that combines several desirable features [1]:
- Non‑interactive signing: Only the final round depends on the message, while prior rounds can be pre‑computed offline. This yields a low-latency signing process suitable for time-sensitive blockchain operations. In practice, Lux’s T-Chain nodes can perform most of the computation before a signature is requested, so signing adds minimal delay.
- Few communication rounds: CGG21 achieves a signing workflow in as few as 5 rounds (or 8 rounds in an alternate variant), significantly fewer than earlier schemes. Lux’s implementation uses the 5‑round variant to minimize latency, incurring a slight computation overhead only if a signing attempt fails.
- Identifiable aborts (accountability): A key innovation of CGG21 is the ability to identify misbehaving parties if the protocol fails. In earlier threshold ECDSA protocols like GG18, any dishonest participant could simply abort the signing, causing a denial-of-service without penalty [2]. CGG21 remedies this by pinpointing the culprit when a signature share is invalid or withheld. This identifiable abort property deters sabotage by enabling Lux to slash or replace malicious nodes—a crucial feature for an open network of validators.
- Proactive security with key refresh: The scheme supports periodic distributed key refreshes that do not change the public key but reshuffle the private key shares. This means T-Chain validators can regularly re-randomize their secret shares (e.g., per epoch), so an adversary cannot slowly compromise shares one by one over time. An attacker must corrupt at least (t) nodes within one refresh period to break the key, dramatically reducing the risk of key compromise in long-lived signing groups.
- Dealerless distributed key generation (DKG): CGG21 includes a built-in DKG protocol for key-share distribution. Validators jointly generate the ECDSA private key shares without any trusted dealer, and no single node ever knows the full secret key. This aligns with Lux’s decentralization goals—the T-Chain can initialize or reconfigure signer sets transparently on-chain, avoiding any single point of trust during setup.
- Universally Composable (UC) security: The protocol is proven secure in the rigorous UC framework (in the Global Random Oracle model), meaning it securely realizes an ideal threshold signature functionality under composition with other protocols. Its security relies on standard cryptographic hardness assumptions: Strong RSA, Decisional Diffie-Hellman (DDH), the semantic security of Paillier encryption, and a strengthened form of ECDSA’s unforgeability assumption. These assumptions are well-studied and give confidence that no efficient attack is known under classical computing. In particular, CGG21’s reliance on Paillier (an additively homomorphic encryption) enables the distributed multiplication needed for ECDSA signing, while zero-knowledge techniques and verifiable secret sharing enforce correctness.
Overall, adopting CGG21 in Lux’s bridge architecture provides high security and liveness guarantees (“no surprises” signing that either succeeds or identifies a culprit), suitable performance for real-time signing, and strong theoretical foundations [1]. These advantages justify moving beyond the simpler approaches outlined in LP-13 and embracing an academically vetted scheme that is specifically designed for threshold ECDSA (which, unlike Schnorr-based signatures, is notoriously non-trivial to thresholdize). By using CGG21, Lux positions T-Chain’s multi-party signing at the cutting edge of threshold cryptography research, similar to the “threshold wallets” employed by top custodians.
Architecture and Implementation in Lux T-Chain MVM
System Overview: In Lux’s T-Chain (the MPC bridge chain), a committee of validators collaboratively controls bridge accounts using threshold signatures. The Lux MVM (Multiverse Virtual Machine) node software incorporates the CGG21 protocol at the networking and consensus layer. Each T-Chain node holds an encrypted share of the ECDSA private key for each asset or blockchain being bridged. Neither the Lux platform nor any single node ever reconstructs the full private key—all operations are done via distributed computation.
Key Generation and Management: When a new signing group is formed (e.g., rotating the bridge key or adding validators), the nodes run CGG21’s distributed key generation sub-protocol [1]. This protocol uses verifiable secret sharing to distribute shares of a fresh ECDSA private key to all (n) participants without revealing the key to anyone. Each node (i) obtains a private share (x_i), and collectively they define a public key (X = x·G) on secp256k1 (where (G) is the base point). This public key is published on-chain as the address that holds assets or as the trusted signing authority for bridging. The DKG is dealerless aside from network broadcast and produces commitments and proofs to ensure consistency and correctness of shares for all honest parties.
The MVM stores each node’s key share in a secure enclave or keystore. For additional safety, validators may split each share among an HSM and a backup service. Periodic key refresh is triggered by the protocol or governance: nodes engage in a 3‑round share refresh that outputs new shares for the same key [1]. This proactive refresh must occur frequently enough so that an adversary cannot compromise (t) nodes between refreshes.
Signing Process: To initiate a signing (e.g., releasing funds from the bridge), the T-Chain consensus includes a signing request containing the message hash. Signer nodes then execute the CGG21 signing protocol in two phases [1]:
- Offline Pre‑processing: Nodes asynchronously run pre-computation rounds before any message is known, generating ephemeral values and Paillier-encryption commitments. Lux’s MVM implements this as background tasks that produce pre-signature tokens—partly computed signature shares tied to random nonces and commitments. These tokens are stored locally and exchanged over the T-Chain’s p2p network.
- Online Signing: Upon receiving the real message, each node independently combines its pre-signature token with the message hash to compute a signature share without further interaction. In the final round, nodes broadcast their shares and combine them to form the standard ECDSA ((r,s)) signature [1]. This one-round online phase yields very low latency, typically a few network ticks.
- Abort Handling: If a node fails or sends an invalid share, CGG21’s identifiable abort feature reveals the culprit via verifiable commitments [1]. Lux logs this event on-chain, enabling slashing or removal of malicious validators. Honest nodes may retry with a fresh token or pause the bridge if the subgroup is too small to satisfy the threshold.
The MVM leverages deterministic execution and secure channels (e.g., TLS) to orchestrate each CGG21 round, using optimized native libraries for big‑integer and elliptic‑curve operations. Benchmarks show a 5‑round CGG21 signature completes in a few hundred milliseconds on LAN and under a couple of seconds in geo‑distributed settings [1].
Comparison with Other Threshold Schemes
GG18 (Gennaro–Goldfeder 2018): The first fully distributed (t)-of-(n) ECDSA scheme [2], GG18 introduced Paillier-based MPC and Gilboa/SPDZ multiplication for threshold signing. While groundbreaking, GG18 lacked identifiable aborts and required ~9 rounds for signing. CGG21 builds on GG18 by adding accountability and reducing online rounds to one, at the cost of extra zero-knowledge proofs.
DKLS19 (Doerner–Kondi–Lee–Shelat 2019): An OT-based threshold ECDSA protocol achieving a 5‑round workflow for general (t)-of-(n) [3]. DKLS19 reduces ciphertext sizes but typically cannot pre-compute rounds offline, resulting in higher online latency than CGG21’s non-interactive signing.
Ethereum Threshold Efforts: The tBTC bridge initially used a GG18 variant and encountered DoS aborts [6]. Its roadmap includes migrating to Schnorr‑based schemes (e.g., FROST/ROAST) to avoid abort issues [10]. Meanwhile, Eth2 DVT uses threshold BLS (trivially aggregated), but ECDSA threshold remains essential for external-chain compatibility.
CGG21 offers a compelling balance of low latency, accountability, and strong UC security, positioning Lux ahead of existing Ethereum threshold deployments.
Security Model and Assumptions
Threat Model: We assume a malicious adversary that can adaptively corrupt up to (f = t-1) of (n) signer nodes, enabling arbitrary deviations. The network may reorder or delay messages, but will eventually deliver them. No trusted dealer exists—DKG and signing are fully distributed [1].
Security Guarantees: CGG21 UC‑securely realizes an ideal threshold signature functionality [1]. Forgery requires either breaking ECDSA (discrete logarithm on secp256k1), Paillier semantic security (composite residuosity), Strong RSA, or DDH. A corrupted set of fewer than (t) nodes cannot learn the private key or produce a valid signature.
Operational Security: Threshold protocol messages must use authenticated, encrypted channels to prevent spoofing. Validator key shares reside in secure enclaves or HSMs, and audit logs record protocol transcripts. Identifiable aborts and on-chain slashing deter malicious behavior.
Future Roadmap: Hybrid Post-Quantum Threshold Upgrade
To mitigate future quantum threats, Lux plans a hybrid ECDSA/PQ threshold scheme. We will integrate Ringtail—a lattice-based 2‑round threshold signature based on LWE [7]—by augmenting the signer set with a random subset performing PQ signing.
During an interim phase, each bridge operation will produce both a CGG21 ECDSA signature and a Ringtail PQ signature. The PQ signature serves as a fallback until on-chain enforcement is viable. As validators opt into PQ signing, governance will mandate hybrid signatures, gradually transitioning Lux’s bridge to quantum-resistant security without service interruption.
Implementation Status
The CGG21/CMP protocol is fully implemented and production-ready in the Lux threshold cryptography library:
- Repository:
github.com/luxfi/threshold - Package:
protocols/cmp - Status: Production-ready with 100% test coverage
- Testing: Zero skipped tests, comprehensive benchmarks
- Features: Complete CGG21 implementation with all sub-protocols
Related implementations:
- MPC-LSS (LP-103): Dynamic resharing capabilities in
protocols/lss - FROST (LP-104): Schnorr/EdDSA threshold signatures in
protocols/frost - Supporting Libraries: Paillier encryption, zero-knowledge proofs, MTA protocols
Conclusion
This draft LP specifies the integration of CGG21 threshold ECDSA into Lux's T-Chain, delivering low-latency non-interactive signing, identifiable aborts, proactive key refresh, and strong UC security. Our comparison shows CGG21's advantages over GG18, DKLS19, and early Ethereum threshold deployments. We also chart a path toward hybrid post-quantum threshold signing with Ringtail, ensuring Lux's bridges remain secure against both current and future adversaries.
The complete implementation is available at github.com/luxfi/threshold with comprehensive test coverage and production-ready code.
References
- Canetti, R., Gennaro, R., Goldfeder, S., Makriyannis, N., & Peled, U. (2021). UC Non-Interactive, Proactive, Threshold ECDSA with Identifiable Aborts. Cryptology ePrint Archive, Report 2021/060.
- Gennaro, R., & Goldfeder, S. (2018). Fast Multiparty Threshold ECDSA with Fast Trustless Setup. In ACM CCS 2018.
- Doerner, J., Kondi, Y., Lee, E., & Shelat, A. (2019). Threshold ECDSA from ECDSA Assumptions: The Multiparty Case. IEEE S&P 2019, ePrint 2019/523.
- Lindell, Y., & Nof, A. (2018). Fast Secure Two‑Party ECDSA Signing. In ACM CCS 2018.
- Shoup, V., & Groth, J. (2022). Design and Analysis of a Distributed ECDSA Signing Service. Cryptology ePrint Archive, Report 2022/506.
- Threshold Network (2023). Threshold ECDSA in tBTC and Migration Plans – Threshold Improvement Proposal 090.
- NTT Research et al. (2025). Ringtail: Practical Two‑Round Threshold Signatures from Learning with Errors. To appear in IEEE S&P 2025.
- Entropy Project. Overview of CGGMP21 Threshold ECDSA Scheme.
- NIST Multi‑Party Threshold Crypto Project (2023). Threshold Schemes and Applications.
- Komlo, C., & Goldberg, I. (2022). ROAST: Robust Asynchronous Schnorr Threshold Signatures.
Test Cases
Unit Tests
-
Key Generation
- Test DKG protocol
- Verify share distribution
- Test threshold parameters
-
Signing Protocol
- Test partial signature generation
- Verify signature aggregation
- Test malicious party detection
-
Key Management
- Test key refresh
- Verify resharing protocol
- Test party rotation
Integration Tests
-
Threshold Operations
- Test multi-party signing
- Verify liveness guarantees
- Test network partition handling
-
Cross-Chain Custody
- Test bridged asset signing
- Verify multi-chain coordination
- Test emergency recovery
Copyright
Copyright and related rights waived via CC0.
Specification
Normative details are defined by the CGG21 protocol phases (DKG, signing, refresh) and their parameter choices. Implementations MUST follow the described rounds, validations, and message formats.
Rationale
CGG21 provides identifiable aborts, proactive refresh, and practical round complexity for ECDSA, making it suitable for time‑sensitive bridge operations and accountable validator behavior.
Backwards Compatibility
This LP is additive to M‑Chain. Existing flows continue operating; CGG21 can be introduced per asset group without breaking prior keys or transactions.
Security Considerations
Use authenticated channels, verify transcripts, and schedule periodic key refresh. Enforce identifiable abort handling and correct Paillier/ZK sub‑protocol parameters as per the spec.
Implementation
CGG21 Threshold ECDSA Library
- GitHub: https://github.com/luxfi/threshold/protocols/cmp
- Local:
threshold/protocols/cmp/ - Size: ~150 MB
- Languages: Go, Rust (cryptographic core)
- Standards: CGG21 (Canetti-Gennaro-Goldfeder-Makriyannis-Peled 2021)
Key Components
| Component | Path | Purpose |
|---|---|---|
| Config | protocols/cmp/config/ | Configuration types and serialization |
| Keygen | protocols/cmp/keygen/ | Distributed key generation (5 rounds) |
| Sign | protocols/cmp/sign/ | Multi-party ECDSA signing (5 rounds) |
| Presign | protocols/cmp/presign/ | Offline presignature and abort handling |
| ZK Proofs | pkg/zk/ | Zero-knowledge proof verification |
| Paillier | pkg/paillier/ | Threshold homomorphic encryption |
File Inventory
protocols/cmp/
├── cmp.go # Entry points: Keygen(), Sign(), Refresh(), Presign()
├── cmp_*_test.go # Test suites (basic, debug, integration, benchmark, etc.)
├── config/
│ ├── config.go # Config struct with PublicPoint, ECDSA, Paillier data
│ └── marshal.go # Binary/JSON serialization
├── keygen/
│ ├── keygen.go # StartFunc for key generation
│ └── round1.go - round5.go # 5-round DKG protocol
├── sign/
│ ├── sign.go # StartFunc for signing
│ └── round1.go - round5.go # 5-round signing protocol
└── presign/
├── presign1.go - presign7.go # Presignature generation (7 rounds)
├── sign1.go, sign2.go # Online signing with presignature
└── abort1.go, abort2.go # Identifiable abort handling
Build Instructions
cd threshold
go build -o bin/cgg21-keygen ./cmd/keygen
# Or build all tools
make build
Testing
# Test keygen protocol
go test ./protocols/cmp/keygen -v
# Test signing operations
go test ./protocols/cmp/sign -v
# Test presign and abort
go test ./protocols/cmp/presign -v
# Test full CMP protocol (integration)
go test ./protocols/cmp -v
# Test Paillier encryption
go test ./pkg/paillier -v
# Test ZK proofs
go test ./pkg/zk/... -v
# Performance benchmarks
go test ./protocols/cmp -bench=. -benchmem
# Quick smoke test (recommended)
go test ./protocols/cmp -run Quick -v
File Size Verification
- LP-14.md: 16 KB (125 lines before enhancement)
- After Enhancement: ~19 KB with Implementation section
- Threshold Package: ~150 MB
- Go Implementation Files: ~40 files
Performance Benchmarks (Apple M1 Max)
- DKG (3-of-5): ~1.5 seconds
- Signing (3-of-5): ~280ms
- Presign (3-of-5): ~200ms
- Key Refresh: ~600ms
ThresholdVM Integration
CMP is integrated into T-Chain (ThresholdVM) via:
-
Executor:
node/vms/thresholdvm/executor.goCMPKeygenStartFunc()- Creates CMP keygen protocol runnerCMPSignStartFunc()- Creates CMP signing protocol runnerCMPRefreshStartFunc()- Creates CMP refresh protocol runnerCMPKeySharewrapper implementsKeyShareinterface
-
Usage in VM:
executor := NewProtocolExecutor(pool)
startFunc := executor.CMPKeygenStartFunc(selfID, participants, threshold)
handler, err := protocol.NewTwoRoundHandler(startFunc, sessionID)
See LP-7330 for full ThresholdVM specification.
Related LPs
- LP-13: T-Chain Specification (uses CGG21)
- LP-7103: LSS Dynamic Resharing (alternative protocol)
- LP-7104: FROST Signatures (Schnorr threshold)
- LP-7330: T-Chain ThresholdVM (VM integration)
- LP-15: MPC Bridge Protocol
- LP-16: Teleport Protocol