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

#1786 in Cryptography

Apache-2.0

73KB
1.5K SLoC

CryptoBallot

docs checks codecov

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

  1. Verifiable - the entire voting process should be end-to-end verifiable.
  2. Ergonomic - Easy to use.
  3. Fast - 1,000 votes per second
  4. Scalable - Millions of voters.
  5. 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
  1. ✓ means done, ⚠ means in-progress, blank means not started but support is planned.

Components

Core library

  1. Add cryptoballot = "0.3.1" to your rust project's Cargo.toml file.

Command-line tool

  1. Install Rust, ZeroMQ, and Protoc
  2. Run cargo install --path=cryptoballot_cli

Sawtooth Transaction Processor

  1. Install Rust, ZeroMQ, and Protoc
  2. Install Sawtooth
  3. Run cargo install --path=cryptoballot_sawtooth_tp

Dependencies

~10MB
~198K SLoC