Equal-Vote / star-server

STAR Voting is an upgrade to our current way of voting that allows voters to score candidates from 0 to 5. Ultimately, STAR Voting elects candidates who better represent the whole of the electorate. We are building a site that lets everyone from individuals to organizations use STAR Voting to host simple polls or run secure elections.
GNU Affero General Public License v3.0
19 stars 22 forks source link

Use encryption methods from STAR-Vote (Secure, Transparent, Auditable, Reliable) #63

Open ArendPeter opened 2 years ago

ArendPeter commented 2 years ago

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?

image

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

Voting Id: At this point they also checked the voter's id, but this is specific to the Travis county election rules rather than the STAR system it's self

Why precinct id?: Travis County allows voters to choose any voting station rather than being limited to their precinct, so this information is important for the later steps

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

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

Would voters still be able to see how they voted?: All of the above would be optional features, and many of them come with a usability trade off. More casual elections would probably want voters to view or even change their vote, so we'd want to keep that option open for those who want it

mikefranze commented 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

ArendPeter commented 2 years ago

Yeah, I like that idea! And it's a good incremental step in case we want to do bigger things later :D