Last updated on December 30, 2023
Working in tech, I’ve been saying for years now that electronic voting could be made much more secure if anyone wanted to do it. Here’s how:
1. Use open source software. Publish custom scripts for everyone to see. KISS.
2. Use off-the-shelf, standard, commoditized hardware. This might include a PC, monitor, keyboard, mouse, and/or touch screen as well as a standard receipt printer.
3. Record the votes in a database table. Save a copy to a public server every 15 minutes or so for progressive tallies. Alternatively, use an open source messaging queue service to push out live updates.
4. Include fields for: polling location, date stamp, checksum, and random verification code.
5. Assign the verification code by printing them on slips of paper and drawing from a fish bowl for each voter. You arrive to vote, someone verifies you’re eligible, marks you as voting, and sends you to the fish bowl.
6. Voter enters their selected code to vote.
7. At completion, voter gets a paper receipt that includes all fields entered into the database.
8. The databases are protected with blockchain and each polling place signs the final database with a public key signature.
9. All these are copied to independent auditors and publicly available.
10. Any voter may verify their vote was tallied correctly by entering their random verification code on one of several websites to see their vote as counted.
11. Absentee voting can be done by making machine readable paper ballots with a detachable slip that has the random verification code attached to it and mailing it with tracking. Validation could be done with a photo of the ballot before mailing. As always absentee voting is less anonymous, but if outgoing ballots are sealed first, then addressed after they are sealed, the random verification code would still be fairly randomly assigned.
12. If there is a discrepancy, a poll worker can be called in to invalidate a vote (within a reasonable time after cast) – such as if the screen and receipt don’t match or if the vote was entered one way and counted another. After that the voter would get a new random verification code and try again, preferably at a different machine.
Seriously. This could be done pretty simply and reasonably.