Two-party and multi-party ECDSA protocols based on class group with Rust

Overview

CG-MPC-ECDSA

github license

This project aims to implement two-party and multi-party ECDSA protocols based on class group with Rust. It currently includes schemes described in [DMZ+21] (published in Asiacrypt 2021) and [XAX+21] (published in CCS 2021).

  • Descriptions of the protocols are as follows:
Protocol Introduction
[DMZ+21] This paper proposes efficient two-party and multi-party threshold ECDSA protocols from CL encryptions based on class groups. This protocol avoids the low order assumption, which is a strong and non-standard assumption, and reduces the communication cost in keygen.
[XAX+21] This paper proposes a framework of two-party ECDSA protocols. It seperates the signing part into online and offline phases. The online phase is non-interactive and somehow optimal, and the offline phase only needs a single call of MtA.
  • We adopt CL-based MtA in [CCL+19] when implementing [XAX+21].
  • We implement the refresh function. This function allows key shares to be refreshed while keeping the whole secret key (then the public key) unchanged.
  • Class group library used in this project supports multi-threaded execution.

How to use

$ cargo run --bin mpc-ecdsa

USAGE:
    mpc-ecdsa <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    dmz-multi-keygen    
    dmz-multi-sign      
    dmz-party-one       
    dmz-party-two       
    help                Prints this message or the help of the given subcommand(s)
    key-refresh         
    xax-party-one       
    xax-party-two

Details in: cli/README.md

Performance

Running with Intel® Core™ i7-10510U CPU @ 1.80GHz × 8.

P2P network

  • Two-Party ECDSA
Protocols KeyGen Sign-Offline Sign-Online
[DMZ+21] 1276ms 384ms 169ms
[XAX+21] 12ms 1698ms 1.5ms
  • Multi-Party ECDSA
(t, n) KeyGen Sign-Offline Sign-Online
(1,3) 371ms 1593ms 6.1ms
(2, 4) 426ms 4318ms 14ms
(3, 5) 510ms 5065ms 19ms

Local

  • Two-Party ECDSA
Protocols KeyGen Sign-Offline Sign-Online
[DMZ+21] 1260 ms 357ms 142ms
[XAX+21] 11 ms 1797ms 0.1ms
  • Multi-Party ECDSA
(t, n) KeyGen Sign-Offline Sign-Online
(1,3) 289ms 1503ms 0.8ms
(2, 4) 345ms 3590ms 1.2ms
(3, 5) 382ms 4681ms 1.6ms

References

[DMZ+21] https://eprint.iacr.org/2022/297

[XAX+21] https://eprint.iacr.org/2022/318

[CCL+19] https://eprint.iacr.org/2019/503

You might also like...
Schnorr VRFs and signatures on the Ristretto group

schnorrkel Schnorrkel implements Schnorr signature on Ristretto compressed Ed25519 points, as well as related protocols like HDKD, MuSig, and a verifi

Rust implementation of the i2p client/server/router protocols

ri2p Rust implementation of the i2p client/server/router protocols Status Common Commands cargo build: Builds the ri2p binary cargo run: Runs the ri2p

 An implementation of the paper
An implementation of the paper "Honey Badger of BFT Protocols" in Rust. This is a modular library of consensus.

Honey Badger Byzantine Fault Tolerant (BFT) consensus algorithm Welcome to a Rust library of the Honey Badger Byzantine Fault Tolerant (BFT) consensus

A Rust implementation of the ISO11783 (ISOBUS) & J1939 protocols

AgIsoStack-rs About This Library AgIsoStack-rs is an MIT licensed hardware agnostic ISOBUS (ISO11783) and SAE J1939 CAN stack written in Rust. This pr

Password-Authenticated Key Agreement protocols

RustCrypto: PAKEs Password-Authenticated Key Agreement protocols implementation. Warnings Crates in this repository have not yet received any formal c

A multiplexed p2p network framework that supports custom protocols

Tentacle Overview This is a minimal implementation for a multiplexed p2p network based on yamux that supports mounting custom protocols. Architecture

Lockstitch is an incremental, stateful cryptographic primitive for symmetric-key cryptographic operations in complex protocols.

Lockstitch is an incremental, stateful cryptographic primitive for symmetric-key cryptographic operations (e.g. hashing, encryption, message authentication codes, and authenticated encryption) in complex protocols.

Proteus: Programmable Protocols for Censorship Circumvention
Proteus: Programmable Protocols for Censorship Circumvention

Proteus Debug build (also used for tests): cargo build Release build (optimized): cargo build --release Run unit tests: cargo test Run integration

Open Protocol Indexer, OPI, is the best-in-slot open-source indexing client for meta-protocols on Bitcoin.

OPI - Open Protocol Indexer Open Protocol Indexer, OPI, is the best-in-slot open-source indexing client for meta-protocols on Bitcoin. OPI uses a fork

Owner
LatticeX Foundation
LatticeX Foundation
Multi Party Key Management System (KMS) for Secp256k1 Elliptic curve based digital signatures.

Key Management System (KMS) for curve Secp256k1 Multi Party Key Management System (KMS) for Secp256k1 Elliptic curve based digital signatures. Introdu

[ZenGo X] 61 Dec 28, 2022
User-friendly secure computation engine based on secure multi-party computation

CipherCore If you have any questions, or, more generally, would like to discuss CipherCore, please join the Slack community. See a vastly extended ver

CipherMode Labs 356 Jan 5, 2023
Rust implementation of {t,n}-threshold ECDSA (elliptic curve digital signature algorithm).

Multi-party ECDSA This project is a Rust implementation of {t,n}-threshold ECDSA (elliptic curve digital signature algorithm). Threshold ECDSA include

[ZenGo X] 706 Jan 5, 2023
An ECDSA threshold signature algorithm implemented in Rust.

Open TSS This project is a Rust implementation of multi-party {t,n}-threshold signature scheme(TSS). The current version of this library supports ECDS

LatticeX Foundation 64 Dec 17, 2022
Rust implementation of multi-party Schnorr signatures over elliptic curves.

Multi Party Schnorr Signatures This library contains several Rust implementations of multi-signature Schnorr schemes. Generally speaking, these scheme

[ZenGo X] 148 Dec 15, 2022
Cryptographic signature algorithms: ECDSA, Ed25519

RustCrypto: signatures Support for digital signatures, which provide authentication of data using public-key cryptography. All algorithms reside in th

Rust Crypto 300 Jan 8, 2023
ECDSA Signature Server

Simple REST API used for serving ECDSA signatures to prevent automation software from minting NFTs in bulk.

Jonathan 3 Nov 30, 2022
Cryptle: a secure multi-party Wordle clone with Enarx

Cryptle: a secure multi-party Wordle clone with Enarx Wordle is a popular web-based game, where a single player has to guess a five-letter word in six

Nick Vidal 2 May 9, 2022
Parity-Bridge — Bridge between any two ethereum-based networks

Deprecated Bridges This repo is deprecated. Originally it contained the ETH <> ETH-PoA bridge (see tumski tag). Later it was repurposed for ETH-PoA <>

Parity Technologies 314 Nov 25, 2022
A pure-Rust implementation of group operations on Ristretto and Curve25519

curve25519-dalek A pure-Rust implementation of group operations on Ristretto and Curve25519. curve25519-dalek is a library providing group operations

dalek cryptography 611 Dec 25, 2022