Hanzo

Protocols

Deep dive into the 8 cryptographic protocols powering Hanzo MPC

Cryptographic Protocols

Hanzo MPC implements 8 distinct multi-party computation protocols, each optimized for specific use cases. All protocols share common properties: no single party ever holds a complete private key, and every step is verified with zero-knowledge proofs.

Protocol Selection Guide

Choose a protocol based on your chain, performance, and security requirements:

Need ECDSA (Bitcoin/Ethereum/EVM)?
  ├─ 2-of-2 only? → Doerner (fastest)
  └─ t-of-n?     → CGGMP21

Need Schnorr/EdDSA (Solana/Polkadot/Taproot)?
  └─ → FROST

Need BLS (Ethereum 2.0 validators)?
  ├─ Post-quantum hedge? → Quasar
  └─ Standard?           → BLS

Need key rotation without signing?
  └─ → LSSS

Need encrypted computation on shares?
  └─ → TFHE

Need post-quantum signatures?
  └─ → Ringtail

CGGMP21

Threshold ECDSA with identifiable aborts

The workhorse protocol for Bitcoin, Ethereum, and all EVM-compatible chains. Based on the Canetti-Gennaro-Goldfeder-Makriyannis-Peled 2021 paper, it provides threshold ECDSA signatures with strong security guarantees.

Properties

PropertyValue
Signature typeECDSA
Curvessecp256k1, P-256
ThresholdAny t-of-n
Rounds (keygen)4
Rounds (signing)5
Identifiable abortYes
CommunicationO(n^2) keygen, O(t^2) signing

How It Works

Key Generation (DKG)

  1. Each party generates a random secret share and a Paillier key pair
  2. Parties exchange Feldman VSS commitments to verify share consistency
  3. Zero-knowledge proofs verify Paillier key correctness and range bounds
  4. The public key is derived from the combined commitments -- no party ever sees the full private key

Signing

  1. A subset of t parties are selected (or volunteer)
  2. Each party computes a presignature share using their key share and random nonces
  3. Paillier homomorphic encryption enables multiplication of shares without revealing them
  4. Parties exchange partial signatures and combine them into a valid ECDSA signature
  5. At each step, ZK proofs verify correctness -- any deviation triggers identifiable abort

Zero-Knowledge Proofs Used

ProofPurpose
Schnorr proofKnowledge of discrete log
Paillier-Blum modulusN = pq with p, q safe primes
Range proof (Mta)Encrypted value within bounds
Affine operation proofCorrect MtA computation
Log-star proofConsistency of Paillier ciphertext and EC point
Dec proofCorrect Paillier decryption

Use Cases

  • Bitcoin (legacy, SegWit, Native SegWit)
  • Ethereum and all EVM chains
  • Cosmos (secp256k1)
  • Lux Network (C/X/P chains)
  • XRPL
  • Any chain using ECDSA over secp256k1 or P-256

Example

curl -X POST https://mpc.hanzo.ai/api/wallets \
  -H "Authorization: Bearer $HANZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "cggmp21",
    "curve": "secp256k1",
    "threshold": 2,
    "parties": 3
  }'

FROST

Flexible Round-Optimized Schnorr Threshold signatures

The fastest protocol for chains that use Schnorr or EdDSA signatures. FROST achieves optimal round complexity -- signing requires only 2 rounds regardless of threshold.

Properties

PropertyValue
Signature typeSchnorr / EdDSA
CurvesEd25519, Ristretto, secp256k1 (Schnorr)
ThresholdAny t-of-n
Rounds (keygen)2
Rounds (signing)2
Identifiable abortYes
CommunicationO(n^2) keygen, O(t) signing

How It Works

Key Generation (DKG)

  1. Each party selects a random polynomial of degree t-1
  2. Parties exchange Feldman commitments and secret shares via secure channels
  3. Each party verifies received shares against commitments
  4. The group public key is the sum of all constant-term commitments

Signing

  1. Round 1 (Commitment): Each participating signer generates a nonce pair and broadcasts commitments
  2. Round 2 (Response): Each signer computes their partial signature using Lagrange interpolation and broadcasts it
  3. Aggregation: The coordinator combines partial signatures into a valid Schnorr signature

Performance Benchmarks

FROST is significantly faster than CGGMP21 because Schnorr signatures have a simpler algebraic structure:

Operation3 parties10 parties20 parties50 parties
Keygen22 ms38 ms332 ms1.85 s
Signing (t=3)25 ms25 ms25 ms25 ms
Signing (t=5)-21 ms21 ms21 ms

Signing time depends only on t (threshold), not n (total parties). A 3-of-100 wallet signs as fast as a 3-of-3.

Use Cases

  • Bitcoin Taproot (BIP-340 Schnorr)
  • Solana (Ed25519)
  • TON (Ed25519)
  • Cardano (Ed25519)
  • NEAR (Ed25519)
  • Polkadot / Substrate (Sr25519 via Ristretto)

Example

curl -X POST https://mpc.hanzo.ai/api/wallets \
  -H "Authorization: Bearer $HANZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "frost",
    "curve": "ed25519",
    "threshold": 3,
    "parties": 5
  }'

LSSS

Linear Secret Sharing Scheme with dynamic resharing

LSSS provides the resharing primitive that allows key shares to be refreshed, thresholds to be changed, and parties to be added or removed -- all without changing the public key.

Properties

PropertyValue
TypeSecret sharing (not signing)
CurvesAny (share-level, curve-agnostic)
ThresholdConfigurable per epoch
Rounds3 (reshare)
CommunicationO(n * n') where n'= new party count

How It Works

LSSS generalizes Shamir's Secret Sharing with the addition of proactive refresh and dynamic reconfiguration:

Proactive Refresh

  1. Each party generates a random polynomial with a zero constant term
  2. Parties distribute shares of their zero-polynomial to all other parties
  3. Each party adds the received zero-shares to their existing share
  4. Result: all shares change, but the underlying secret remains identical

Threshold Change (t-of-n to t'-of-n')

  1. t old parties reconstruct the secret in a distributed manner using Lagrange interpolation
  2. A new random polynomial of degree t'-1 is generated collaboratively
  3. New shares are distributed to the n' new parties
  4. Old shares are securely deleted

Use Cases

  • Scheduled share rotation (compliance, security hygiene)
  • Responding to suspected key compromise
  • Adding or removing custodians
  • Changing governance thresholds (e.g., upgrading 2-of-3 to 3-of-5)

Example

# Reshare: change from 2-of-3 to 3-of-5
curl -X POST https://mpc.hanzo.ai/api/reshare \
  -H "Authorization: Bearer $HANZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "wallet_id": "w_3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "new_threshold": 3,
    "new_parties": 5,
    "reason": "adding_custodians"
  }'

TFHE

Threshold Fully Homomorphic Encryption

TFHE enables computation on encrypted key shares without ever decrypting them. This is used internally for protocols that require arithmetic operations on secret data across parties.

Properties

PropertyValue
TypeEncrypted computation
SecurityLattice-based (LWE)
OperationsAddition, multiplication on ciphertexts
Noise budgetBootstrapped per operation
Use caseInternal MPC sub-protocol

How It Works

  1. Each party encrypts their key share under a threshold FHE scheme
  2. Computations (e.g., polynomial evaluation, nonce generation) are performed on ciphertexts
  3. Threshold decryption requires t parties to contribute decryption shares
  4. Result is decrypted only at the final step, keeping intermediates encrypted

Use Cases

  • Internal computation within CGGMP21 and FROST protocols
  • Privacy-preserving policy evaluation (e.g., spending limits)
  • Secure multi-party analytics on custody data

TFHE is not directly exposed as a wallet creation protocol. It functions as an internal building block for other protocols.


Ringtail

Post-quantum lattice-based threshold signatures

Ringtail provides threshold signatures using Module-LWE, offering resistance against quantum computer attacks. Deploy today for assets that need long-term security guarantees.

Properties

PropertyValue
Signature typeLattice-based (Dilithium-like)
Security basisModule-LWE
Security levelNIST PQ Level 3 (128-bit quantum)
ThresholdAny t-of-n
Signature size~2.4 KB
Public key size~1.3 KB

How It Works

  1. Key Generation: Parties collaboratively generate a Module-LWE key pair using a lattice-based DKG
  2. Signing: Parties produce partial signatures using rejection sampling to ensure the combined signature does not leak share information
  3. Verification: Standard Dilithium verification on the combined signature

Trade-offs

AdvantageDisadvantage
Quantum-resistantLarger signatures (2.4 KB vs 64 bytes)
NIST standardized basisHigher computational cost
Future-proofNot compatible with existing blockchain address schemes

Use Cases

  • Long-term cold storage where quantum risk is a concern
  • Hybrid custody alongside classical ECDSA wallets
  • Research and compliance for post-quantum readiness

Example

curl -X POST https://mpc.hanzo.ai/api/wallets \
  -H "Authorization: Bearer $HANZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "ringtail",
    "curve": "module-lwe",
    "threshold": 3,
    "parties": 5
  }'

Quasar

Hybrid BLS + post-quantum threshold signatures

Quasar produces dual signatures -- one BLS12-381 for immediate blockchain compatibility and one Dilithium for quantum resistance. If either scheme is broken, the other still protects the key.

Properties

PropertyValue
Signature typeBLS + Dilithium (dual)
CurvesBLS12-381 + Module-LWE
ThresholdAny t-of-n
Signature outputTwo signatures per operation
VerificationBoth must verify

How It Works

  1. DKG: Two parallel key generation ceremonies -- one BLS, one lattice-based
  2. Signing: Each party produces both a BLS partial signature and a Dilithium partial signature
  3. Aggregation: Both partial signature sets are combined independently
  4. Verification: A Quasar signature is valid only if both the BLS and Dilithium components verify

Use Cases

  • Ethereum 2.0 validator keys with quantum hedge
  • High-value cold storage requiring defense-in-depth
  • Institutional custody with regulatory PQ requirements

Example

curl -X POST https://mpc.hanzo.ai/api/wallets \
  -H "Authorization: Bearer $HANZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "quasar",
    "curve": "bls12-381",
    "threshold": 3,
    "parties": 5
  }'

BLS

Threshold BLS aggregate signatures

BLS signatures have a unique property: they can be aggregated. Multiple signatures from different keys on different messages can be combined into a single constant-size signature. This makes BLS ideal for validator sets.

Properties

PropertyValue
Signature typeBLS (Boneh-Lynn-Shacham)
CurveBLS12-381
ThresholdAny t-of-n
Signature size48 bytes (compressed G1)
AggregationYes (multi-sig and aggregate)
Rounds (signing)1 (non-interactive after setup)

How It Works

  1. DKG: Parties run a standard Feldman DKG over the BLS12-381 scalar field
  2. Signing: Each party computes sigma_i = sk_i * H(m) where H maps to G1
  3. Aggregation: Lagrange interpolation in the exponent combines t partial signatures
  4. Verification: e(sigma, g2) == e(H(m), pk) using the bilinear pairing

Signing is non-interactive -- once nonce commitments are exchanged during a setup phase, individual partial signatures can be produced independently.

Use Cases

  • Ethereum 2.0 validator signing
  • Aggregate multi-party attestations
  • Consensus protocol signing (Lux Network validators)

Example

curl -X POST https://mpc.hanzo.ai/api/wallets \
  -H "Authorization: Bearer $HANZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "bls",
    "curve": "bls12-381",
    "threshold": 5,
    "parties": 9
  }'

Doerner

Optimized 2-of-2 ECDSA

Doerner is a specialized protocol for the 2-of-2 case that achieves the lowest possible latency for two-party ECDSA signing. It uses oblivious transfer (OT) instead of Paillier encryption, eliminating the most expensive operations in CGGMP21.

Properties

PropertyValue
Signature typeECDSA
Curvesecp256k1
Threshold2-of-2 only
Rounds (keygen)2
Rounds (signing)3
CommunicationO(1) -- constant
OT extensionYes (batch amortized)

How It Works

  1. Key Generation: Two parties generate their secret shares and exchange public commitments. An OT base setup is performed for future signing sessions
  2. Signing: Party A selects a nonce and commits. Party B responds with an OT-based multiplication of the message and shares. Party A completes the signature
  3. Batch OT: The OT base can be extended to amortize cost over many signing operations

When to Use Doerner vs CGGMP21

ScenarioRecommendation
High-frequency 2-party signingDoerner
Threshold > 2CGGMP21
Need flexibility to add parties laterCGGMP21 (can reshare)
Latency-critical 2-partyDoerner

Example

curl -X POST https://mpc.hanzo.ai/api/wallets \
  -H "Authorization: Bearer $HANZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "doerner",
    "curve": "secp256k1",
    "threshold": 2,
    "parties": 2
  }'

Protocol Comparison

ProtocolSignatureQuantum SafeRounds (Sign)Best ThroughputChains
CGGMP21ECDSANo5~100/sBTC, ETH, EVM
FROSTSchnorr/EdDSANo2~500/sSOL, DOT, Taproot
LSSS(resharing)N/A3N/AAll (share mgmt)
TFHE(internal)YesN/AN/AInternal
RingtailLatticeYes4~50/sPQ-ready chains
QuasarBLS+PQYes3~80/sETH 2.0 + PQ
BLSBLSNo*1~1000/sETH 2.0, validators
DoernerECDSANo3~200/sBTC, ETH (2-of-2)

*BLS over BLS12-381 is not inherently quantum-safe; use Quasar for a PQ hedge.

ZK Proof Systems

All 17 zero-knowledge proof systems used across the protocol suite:

#ProofUsed InPurpose
1Schnorr DL proofAllKnowledge of discrete log
2Paillier-Blum modulusCGGMP21Safe prime product
3Range proof (MtA)CGGMP21Ciphertext value bounds
4Affine operation proofCGGMP21MtA correctness
5Log-starCGGMP21Paillier-EC consistency
6Dec proofCGGMP21Paillier decryption
7Feldman VSSCGGMP21, FROST, BLSShare commitment consistency
8Pedersen commitmentCGGMP21, FROSTHiding+binding commitment
9DLOG equality (DLEQ)FROST, BLSSame exponent across groups
10Nonce commitmentFROSTBinding nonce selection
11Rejection samplingRingtailSignature distribution masking
12Module-LWE proofRingtail, QuasarLattice key correctness
13BLS pop (proof of possession)BLS, QuasarKey ownership
14Pairing proofBLSSignature validity
15OT correlationDoernerOT extension correctness
16Bit decompositionTFHECiphertext structure
17Bootstrapping proofTFHENoise budget refresh

How is this guide?

Last updated on

On this page