Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/trailofbits/reverie
An efficient and generalized implementation of the IKOS-style KKW proof system (https://eprint.iacr.org/2018/475) for arbitrary rings.
https://github.com/trailofbits/reverie
blake3 crypto cryptography nizk rust-lang zk zkproof-prover
Last synced: 7 days ago
JSON representation
An efficient and generalized implementation of the IKOS-style KKW proof system (https://eprint.iacr.org/2018/475) for arbitrary rings.
- Host: GitHub
- URL: https://github.com/trailofbits/reverie
- Owner: trailofbits
- License: agpl-3.0
- Created: 2020-06-05T15:12:16.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-09-04T20:18:36.000Z (about 1 year ago)
- Last Synced: 2024-10-31T12:08:21.513Z (15 days ago)
- Topics: blake3, crypto, cryptography, nizk, rust-lang, zk, zkproof-prover
- Language: Rust
- Homepage: https://crates.io/crates/reverie-zk
- Size: 1.61 MB
- Stars: 60
- Watchers: 28
- Forks: 6
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Reverie
An efficient implementation of the NIZKPoK outlined in KKW 2018
[![CI](https://github.com/trailofbits/reverie/actions/workflows/ci.yml/badge.svg)](https://github.com/trailofbits/reverie/actions/workflows/ci.yml)
Reverie is an implementation (prover and verifier) of the MPC-in-the-head NIZKPoK outlined in
[Improved Non-Interactive Zero Knowledge with Applications to Post-Quantum Signatures](https://eprint.iacr.org/2018/475).
Reverie seeks to offer concrete prover efficiency (linear proving time with small constants) for
complex predicates. The implementation seeks to offer 128-bits of (classical) security and support
arbitrary rings, most efficiently
Z2 and Z64.Reverie provides both a library (with a simplified and a streaming interface),
in addition to a CLI program for proving/verifying statements specified in Bristol format
to enable easy experimentation.## Running
Reverie requires a relatively recent `nightly` Rust.
Using `SSE+AESNI`
```console
time RUSTFLAGS="-C target-cpu=native -C target-feature=+aes,+ssse3,+sse2" cargo run --release
```Or even better with `AVX2+AESNI`
```console
time RUSTFLAGS="-C target-cpu=native -C target-feature=+aes,+ssse3,+sse2,+avx2" cargo run --release
```## Improvements in 0.3+
- Pack 8 instances of 8 players over GF(2) into a single 64-bit integer (see [gist](https://gist.github.com/rot256/174fd53c0aac8cf04ef9810e8a10b0c0) for details).
- Switch to AES with AESNI
- Just-in-time preprocessing to condense proving into a single pass