2023 targets a fully updated version of the core ElectionGuard specification as well as a new approach to the core software deliverables. Instead of a "reference implementation" approach in Python, we are pursuing a C++ core that can deliver production-level performance for encryption. Other programming languages will be supported via templates.
The specification itself will accommodate a lot of efficiency improvements and some longstanding feature requests focused on supporting commercial implementations for vendors integrating ElectionGuard into their systems.
- improved encryption speed and more efficient storage
- reduced verifier complexity
- range proofs
- ability to support recounts and additional methods of voting such as vote by mail
Single, simplified fully C++-based SDK
- eliminate problems of serialization and rationalization of challenges working across different languages
Upgraded Key and Tally Ceremony user experience
- production-ready user experience
- clearer, stepper-based process
- implements thresholding
- improved visibility into manifest selection and review
Full Guardian Thresholding support
- ability to specify maximum and quorum number of guardians
- ability for admins to initiate tally ceremony once quorum has been reached
- updated thresholding code that simplifies verifier
2022 focused on a full 1.0 release of functionality across the Python and C++ repos. We needed to support a pilot election in Franklin County, Idaho in partnership with Hart InterCivic on their Verity Precinct Scanner. MITRE worked with us to release the first truly full-featured verifier that was used to verify the election results, and Enhanced Voting hosted the confirmation-code-lookup website.
The 2021 roadmap takes lessons learned from the deployment of applications during 2020 and rationalizes them into a practice to establish with the community in 2021. The goal is to grow a community of participants and contributors within which Microsoft takes part and provides architectural and implementation guidance, but is fundamentally driven by the needs of the community in establishing the best ways to implement end-to-end verifiable elections and post-election audits.
A big step toward this new vision occurred with the release of the
electionguard-cpp ballot-encryption repo. The
electionguard-python repo implements the full suite of ElectionGuard SDK functionality and the base
electionguard specification and documentation repo provides the foundation for future development. The goal for the first half of 2021 is to have a full suite of code, tests, workflows, and package deployments more directly associated with the conventions and requirements indicated by the specification. The goal is also to publish and generate more comprehensive and also more granular examples and use cases to enable easier and more focused contributions by the community.
- a final, fully-developed specification integrated directly into the SDK;
- updates to election manifest and election artifact descriptions and specifications
- a more modular approach to documentation and contribution to lessen the learning curve and overhead necessary to participate and contribute
- more prescriptive guidance on verifier construction
C++ ballot encryption library
- repo that performs encryption exclusively (for embedded encryption applications such as precinct scanners)
- standalone source that uses a version of HACL* packaged up by EverCrypt for high assurance (thank you EverCrypt team!)
- enables ElectionGuard to eliminate GMP as a dependency
Release an ElectionGuard.Encryption nuget package built from
electionguard-cpp as a ballot encrypter for low performance devices
- Establish publishing pattern
- First target will be Windows 10 / UWP
A consistent, efficient set of data interfaces across the ElectionGuard, C++, and Python repos
- Data serialization using Protobuf for input/output/data consistency across
- Restructuring ballot and device aggregation to better support audits and scalability in general
- Renaming and refactoring all repos for more descriptive and specific naming patterns
Compose community changes into
electionguard-python release v1.1.16
Optimization changes for service implementations of
electionguard-python release v1.4.0
Introduce service docker containers in
2020 In Review
2020 provided many lessons.
During the first half of the year ElectionGuard was used successfully as a Pilot in Fulton, WI with the help of VotingWorks and InfernoRed. Subsequent to the pilot ElectionGuard released the Python repo as a new reference implementation.
In the second half of the year, responding to COVID, led to the development of a remote voting app with InfernoRed, Markup, and the US House Democratic Caucus to enable representatives to vote by secret ballot safely, securely, and remotely for Caucus leadership positions.
In a further collaborate with VotingWorks, Rice University professor Dan Wallach contributed an integration with Arlo to enable ElectionGuard to provide the "back end" for Inyo County's Risk-limiting Audit of the November 3 election.
Last, and definitely not least, ElectionGuard developed and published its first independent verifiers.
Use ElectionGuard in a real-world end-to-end verifiable election
- Run a verifiable election Fulton, Wisconsin with VotingWorks using smart cards, a ballot box, an admin device, and a ballot tracking site.
- Integrate ElectionGuard with the VotingWorks print station and user flow
- Build ballot box functionality to capture and seal ballots
- Build admin device to enable tallies and key ceremonies
- Build tracking site to enable verification code lookup and tally/results download
Use ElectionGuard in a real-world post-election audit
- Run a post-election election audit with Inyo, California using VotingWorks Arlo using ElectionGuard as a back end
- Identify learnings and code refactoring necessary to reflect the different data structures and scalability considerations of audits
Update the ElectionGuard Specification to 1.0.0-preview-1
Support building ElectionGuard into additional voting systems
- Enable remote, secret-ballot voting for Democratic Caucus of the US House of Representatives
- Work with InfernoRed and Markup to enable House-distributed iPhones to perform ballot encryption and House Democratic leadership to schedule and tally secret-ballot elections for leadership and committee positions
Release and iterate on
electionguard-python as a core implementation that meets specification 1.0.0-preview-1
- Implement a canonical library addressing all ElectionGuard SDK functionality:
- Key generation
- Ballot encryption
- Ballot sealing
- Tally generation
- Verifier specification
- Build library with an eye to extensibility rather than performance and local language optimization (i.e., we'll be less Pythonic than some might prefer for the base implementation)