Open ArendPeter opened 2 years ago
Excellent writeup!
Something I'd thought of earlier was using hashing chains which could be used with or without encrypted ballots. You'd store the ballot data, previous ballot's hash, and a hash of ballot data+previous ballot's hash. The hash can be provided to the voter as a receipt. To verify the results you just need to check that the hashes are valid and the history is unbroken and voters can look up their ballot with the receipt.
Also a relevant xkcd =D
Yeah, I like that idea! And it's a good incremental step in case we want to do bigger things later :D
We've had several discussion on how to setup our databases in a way that maintains user privacy, and I thought looking into STAR-Vote (Secure, Transparent, Auditable, Reliable) could be relevant as a case study
What is STAR-Vote (Secure, Transparent, Auditable, Reliable)?
The STAR-Vote project (same name, completely different organization), focuses on how to manage ballots in a hybrid physical/electronic election instead of the voting method https://www.youtube.com/watch?v=Cl8q_356zZs (description starts at 34:23)
Their method has come up a few times in Slack conversations, and it could be a good opportunity to collaborate and take advantage of the naming overlap https://starvoting.slack.com/archives/C9U6425CM/p1635474100035800 https://starvoting.slack.com/archives/C01EBAT283H/p1616783581154400?thread_ts=1616684618.142400&cid=C01EBAT283H
Here's a case study of how their STAR-Vote system works, and which pieces can apply to our online system
How does it work?
TLDR: The votes end up getting stored as a physical ballot, and an encrypted version on the voting terminals. These versions can be compared later for auditing
Registration
When the voter goes to the physical voting location they start at the registration system. Here their voting status is validated, and their name is crossed off from the online database
This is the ONLY ONLINE step, the rest of the steps are done on an offline network. The user gets a receipt (with a precinct id and a bar code) to be used in the following steps which validates that they were registered. The receipt only encodes the precinct, no other voter specific information is included
Auth
At the controller machine the voter delivers their receipt and a volunteer scans it, gives them a one-time use printed auth code
Voting Terminal
At the voting terminal, the voter will input the auth code, and begin voting. Once they've finished, an encrypted version of the vote is stored on the machine, and a printed copy is made for the voter
Ballot box
The voter submits the printed ballot to the ballot box, and the vote is not officially counted until it's been stored in the ballot box
The ballot box scans the bar code on the ballot, it communicates with the voting terminals. If a duplicate ballot is given the ballot box will reject it
Ballot Receipt
Once the ballot is accepted the ballot box will provide a receipt to the voter. The voter can then use this to verify that their vote was counted in the final election. Specifically they could use it to look up their encrypted version of the vote, and verify all the properties covered in the cryptographic section
Cryptographic properties
The encryption process of the voting terminals allow for several different operations
Risk limiting audits: After the election, the results can be audited using a process called SOBA. Here election officials can decrypt individual ballots and validate that they match the paper ballot. Statistically they would only need to sample a small percentage of all the ballots
How does this apply to our system
Here's some correlations with our system
Action Items
If we wanted to make our system more like STAR-Vote (Secure, Transparent, Auditable, Reliable), then we could try the following