5 unstable releases
0.4.0 | Feb 23, 2020 |
---|---|
0.3.1 | Feb 20, 2020 |
0.3.0 | Feb 20, 2020 |
0.2.1 | Feb 19, 2020 |
0.2.0 | Feb 19, 2020 |
#2067 in Cryptography
73KB
1.5K
SLoC
CryptoBallot
CryptoBallot is a cryptographically secure decentralized end-to-end verifiable voting system meant for real-world elections. It is a "backend" service providing vote storage, cryptographic operations, and an API. It does not provide a user interface - although it is built to make creating a UI that interfaces with it easy.
It uses Shamir Secret Sharing for election decryption keys, blind-signing for voter anonymity, and an optional blockchain backend for distributed transaction storage and verification. It supports all tally methods including write-in candidates.
Goals
- Verifiable - the entire voting process should be end-to-end verifiable.
- Ergonomic - Easy to use.
- Fast - 1,000 votes per second
- Scalable - Millions of voters.
- Secure - Rock solid security guarantees, byzantine fault tolerance.
Current State
Under active development. Not ready for production use!
Road Map
Status¹ | Feature | Notes |
---|---|---|
✓ | Migrate from Go to Rust | 🦀 |
✓ | Blind-Signing (RSA) | Uses RSA-FDH |
Blind-Signing (ed25519 / schnorr) | Will replace current RSA bling-signing | |
✓ | Shamir Secret Sharing | Uses Sharks |
⚠ | Blockchain backend | Uses Hyperledger Sawtooth |
⚠ | Support all tally methods | Uses Tallystick |
REST frontend | ||
Distributed key generation | Replace Shamir, uses ElGamal, fully verifiable and distributed | |
Onion mixnet (likely Sphinx) | Strengthened voter anonymity - Depends on REST frontend | |
Re-encryption mixnet | Provides coercion resistance | |
⚠ | End-User Device Verification | Uses Benaoh Challenge |
- ✓ means done, ⚠ means in-progress, blank means not started but support is planned.
Components
Core library
- Add
cryptoballot = "0.3.1"
to your rust project'sCargo.toml
file.
Command-line tool
Sawtooth Transaction Processor
Dependencies
~11MB
~203K SLoC