ElectionGuard is an open source software development kit (SDK) that makes voting more secure, transparent and accessible. The ElectionGuard SDK leverages homomorphic encryption to ensure that votes recorded by electronic systems of any type remain encrypted, secure, and secret. Meanwhile, ElectionGuard also allows verifiable and accurate tallying of ballots by any 3rd party organization without compromising secrecy or security.
Announced on May 6th at the Build developer conference, ElectionGuard will enable end-to-end verification of elections as well as support the publication of results from ballot comparison audits. Results can be published online or made available to third-party organizations for secure validation, and allow individual voters to confirm their votes were correctly counted.
Read more in the announcement blog post.
This library and all linked ElectionGuard projects, are licensed under the MIT license. There is no fee for using ElectionGuard.
This is the core SDK that performs election functions such as vote encryption, decryption, key generation, and tallying. This code is meant to be run on voting system hardware and to be integrated into existing (or new) voting system software. The ElectionGuard SDK is meant to add end-to-end verifiability and encryption into 3rd party comprehensive voting systems. There are provided simplistic, proof-of-concept applications to understand how each implementation of the API should be called. Currently, there are two available implementations.
📁 Source - https://github.com/microsoft/electionguard-c
📁 Source - https://github.com/microsoft/electionguard-dotnet
This library contains the fundamental specifications, documentation, architecture, and mathematical/cryptographic proofs that underpin ElectionGuard. If you're looking to understand the system better, or want to know how to integrate the various components, there is a lot of valuable information contained here.
📄 Documentation and Specifications
The remainder of the ElectionGuard SDK consists of a reference implementation split over several separate repositories. These repos, although intended to be used together as components of a broader solution, can also stand alone if developers wish to only research or implement one component.
This is an application used to administer ElectionGuard election processes, including key generation, trustee provisioning, and post-election tallying, partial decryptions, and zero-knowledge proofs.
📁 Source - https://github.com/microsoft/electionguard-admin-device
This library is used to scan ballots to generate lists of cast and spoiled ballots in an election; used in tallying to finalize ballot operations (cast or spoil, etc.) for publishing results.
📁 Source - https://github.com/microsoft/electionguard-ballot-box
This contains a working instance of ballot marking device (BMD). Built by VotingWorks in consultation with the Center for Civic Design, this front-end provides an interface for a voter to complete and print a ballot which, in an end-to-end verifiable use case, would be accompanied by a printed tracking ID. This BMD front-end is provided as one, potential implementation.
📁 Source - https://github.com/microsoft/electionguard-ballot-marking-device
An application that demonstrates publication of ElectionGuard election artifacts to a public website to enable verification ID lookup, downloadable zip files of the election result (for third-party verifiers), and election results summaries.
📁 Source - https://github.com/microsoft/electionguard-tracking-site
The verifier application is used to perform an external, independent verification of an election tally. This repository contains a reference implementation of a verifier built against the ElectionGuard specifications. This is not meant to be the only verifier application, but rather an example. This library should be used in tandem with the technical specifications and usage guidelines contained in the specifications.
📁 Source - https://github.com/microsoft/electionguard-verifier
This is an API that interacts with admin encrypter devices to perform ballot encryption, casting, spoiling, and tallying. This makes use of the C# Nuget package.
📁 Source - https://github.com/microsoft/electionguard-web-api
We encourage the developer and security community to conduct research, report issues, and suggest improvements on this code base. However, unlike performance or feature bugs, please do not report security vulnerabilities in public Github comments. Each repository has a SECURITY file with instructions on responsibly reporting security vulnerabilities under Microsoft's CVD process.
Help defend democracy and contribute to the project.
A huge thank you to those who helped to contribute to this project so far, including:
- Josh Benaloh (whose PhD thesis was the genesis of much of this work)
- Galois / Free & Fair
- VotingWorks
- Center for Civic Design
- Oxide Design
- InfernoRed Technology
- Many teams within Microsoft