End-to-end implementation of various asynchronous verifiable secret sharing scheme. This code base implements:
- ACSS scheme of Yurek et al.
yurek_acss.rs - Our low-threshold ACSS using Ed25519 signature scheme.
low_ed_acss.rs - Our low-threshold ACSS with BLS multisignature
low_bls_acss.rs - Our dual-threhsold ACSS with Ed25519 signature scheme.
mixed_ed_acss.rs - Our dual-threhsold ACSS with BLS multisignature scheme.
mixed_bls_acss.rs - ACSS scheme of Groth
groth_ni_acss.rs
The project is fully written in Rust and should compile using cargo on any reasonable machine.
After building, you can execute the cli binary. Alternatively, it might be easier to use cargo run. There are two steps needed to run the protocol locally.
- Generate a config using
cli generate. You need to provide a file where each line contains a pair<IP>:<PORT>. - Run each node using
cli run. You need to pass a config file (generated in the previous step) to each node. For further information, please checkcli --help(orcargo run -- --help). This also works for subcommands, e.g.,cli generate --help.
As a convenience, you can also use run.sh. It automates the config generation and node execution. To run a test across NUM_NODES nodes use ./run.sh bash [NUM_NODES] [ACSS_TYPE] [DEG] [SEED] [WAIT_TIME]. For example, if you run ./run.sh bash 16 low-ed 10 1024 10, it wiill run our low-threshold ACSS scheme with 16 nodes, use a polynomial degree of 10, and use 1024 as the seed for generating random numbers.
PARAMETER CHOICES:
- Choice of
ACSS_TYPEare:yurek,low-ed,low-bls,mix-ed,mix-bls, andgroth. - For all our schemes, i.e.,
low-Xandmix-X, for now we only supportt=n/3anddeg=2*t.
Finally, to kill any running instances, use pkill -f "./target/release/cli".
aws/ contains Python scripts to deploy and benchmark the system on AWS. Check out the README in the directory for more details.
To microbenchmark the the computation costs, change directory to benches using cd benches/, and run cargo bench [EXPT]. Here, choices of EXPT are yurek, low-ed, low-bls, mix-ed, mix-bls, groth, and common. Each EXPT with an acss type, measures the dealing-time and verification time. The common benchmarks the cost of reconstruction, and low-degree test.
In more detail, the code is split across the following crates:
acssis where most of our code lies.utilsoffers some useful macros (primarily for dealing withtokiochannels).networkhandles asynchronous network conditions, e.g., retrying after transmission failures, caching messages which are not yet required. It offers a pub-sub-style interface for sub-protocols.protocoloffers common traits that describe protocols.cryptooffers some cryptography traits.cliis a CLI interface for APSS. After building, runcli --helpto learn more.benchescode for micro-benchmarking computation costs.
We use the networking component from this https://github.com/ISTA-SPiDerS/apss repository.