Skip to content
Branch: master
Go to file
Code

Latest commit

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

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
Optional Blockchain backend Uses Hyperledger Sawtooth
Support all tally methods Uses Tallystick
REST frontend
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
  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

About

cryptographically secure online voting

Resources

Sponsor this project

Learn more about GitHub Sponsors

Contributors 4

  •  
  •  
  •  
  •  
You can’t perform that action at this time.