VoteXX is the first election system that has “extreme coercion resistance”. This project aims at implementing a prototype of VoteXX.
Disclaimer: This code is not production ready.
The extended abstract of the paper can be found here.
Main features of VoteXX:
- End-to-end Verifiable
- Privacy
- Extreme Coercion-resistant (voter can nullify his voter even if the coercer knows all the secret information)
Roles of VoteXX:
- Voter
- Election Authority: responsible for authenticating voters
- Trustees: respondible for tallying
- Hedgehog: can nullify a voter's ballot if the voter cast the ballot under coercion
The library implements four core building blocks of VoteXX in JavaScript:
protocol/DKG/
: A simple DKG protocol (see Simple_DKG.md)protocol/MIX_AND_MATCH/
: The mix and match protocol based on Jakobsson and Juels's proposalprotocol/NIZKs/verifiable_shuffle/
: The shuffle argument based on Bayer and Groth's proposalprotocol/NIZKs/nullification.js
: The novel succinct NIZK for nullifying a ballot
example/
includes the examples of running the four protocols.- Run
protocol/NIZKs/benchmarks/benchmark.js
to evaluate the nullification NIZK.
Dependencies:
- MongoDB
- npm
- node
npm install
node server.js
This will start a server running on http://localhost:3000
.
- Do the cryptographic operations in the frontend (right now they are done in the backend).
- Correct the shuffle argument for shuffling a vector of ciphertexts.
- Add shuffle arguments in the mix and match protocol.
- Store the bulletin board in the database (right now it is stored in the memory).
- Support verifying the election using browser.
- Support any number of trustees.
- Support elegible voter list (right now everyone can vote).
- Change an alert to a beautiful BootStrap modal.
- Support "forget password".
- Support GitHub/Gooble login.
- Optimize the shuffle argument.
- Trustees do mix and match instantly when a nullification request arrives.