cryptoballot

Crates.iocryptoballot
lib.rscryptoballot
version0.4.0
sourcesrc
created_at2020-02-19 06:47:46.391493
updated_at2020-02-23 06:39:01.568579
descriptionCryptographically secure end-to-end verifiable online voting
homepagehttps://cryptoballot.com
repositoryhttps://github.com/cryptoballot/cryptoballot
max_upload_size
id210525
size72,533
Patrick Hayes (phayes)

documentation

README

CryptoBallot

docs crates.io 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
Commit count: 474

cargo fmt