cryptoballot
cargo install cryptoballot

cryptoballot

cryptographically secure online voting

by cryptoballot

0.4.0 (see all)License:Apache-2.0
cargo install cryptoballot
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

GitHub Stars

201

LAST COMMIT

10mos ago

MAINTAINERS

1

CONTRIBUTORS

4

OPEN ISSUES

8

OPEN PRs

1
VersionTagPublished
0.4.0
2yrs ago
0.3.1
2yrs ago
0.3.0
2yrs ago
0.2.1
2yrs ago
No alternatives found
No tutorials found
Add a tutorial