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.
- 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.
Under active development. Not ready for production use!
|✓||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|
|Optional Blockchain backend||Uses Hyperledger Sawtooth|
|Support all tally methods||Uses Tallystick|
|Distributed key generation / decryption||Will use threshold_crypto. Replaces Shamir|
|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.
cryptoballot = "0.3.1"to your rust project's