I'm not a security expert, but what would be a good way to publicly verify all this?
I'm not a security expert, but what would be a good way to publicly verify all this?
Maybe someone more educated about blockchain could illustrate some of the pros/cons about using it in this manner?
Issue everyone a secret key (the digital equivalent of a ballot). They publish hash($key, $name). There are only N values for $name so that can be solved in O(N) time, but without knowledge of $key you couldn't determine whom someone voted for. For the sake of the user you could even pre-compute the hash values so it literally becomes "publish this string to vote for X".
You could authenticate the user by having them give their pubkey at their secretary of state. The pubkey signs the hash like a standard blockchain transaction.
This is a general problem with absentee/mail voting, though, and it's a strong argument. If your boss/spouse/etc is being an asshole there's little to stop them from coercing you to show your paper absentee ballot, marking it in for you, etc. Yes, it's illegal, but what are you going to do about it after your at-will employment is terminated without cause next month? In the privacy of a voting booth, you can vote however you want and nobody will ever know. It's real easy.
I think you can still keep votes secret if you have in-person voting. Just have the secret key never leave the polling place, it's equivalent to collecting the ballot after tabulation (we have paper ballots that are run through a ScanTron machine, we don't get to keep the ballots). You get a printout of the hash values you selected (but not the key) and can validate that the hash exists on the blockchain afterwards (signed by the polling place's private key), but there's no proof as to what the particular hash values actually indicated.
Really though you have to trust that people will treat their electronic ballot with just as much import as their paper ballot. I don't think an electronic works without some kind of secret key/token.
It's actually much much worse than that. Votes not only have to be anonymous but not verifiable by the voter (i.e. they should have no way to prove who they voted for after their ballot is submitted). You don't want to live in a world where rioters could target anyone who couldn't prove they voted for their candidate or domestic violence for the same reason. Also, if votes are verifiable then it becomes easy for a person to buy votes or for companies to offer 'incentives' to vote for a particular candidate.
See Punchscan or Scantegrity for examples.
- https://en.wikipedia.org/wiki/Punchscan
- https://en.wikipedia.org/wiki/Scantegrity
This slidedeck from Ron Rivest (yes, that Rivest) gives a good overview of secure and auditable voting:
Auditability and Verifiability of Elections
ACM-IEEE talk March 16, 2016
My notion was ballot tabulators (of the opscan variety) would boot off a CD-ROM. The only code on the machines would be the bootstrap. Then it'd be comparatively easy to guard the physical chain of custody.
There's just no good wat to verify this.
There are a lot of problems with that system to be answered:
* Can individuals who catch fraudulent votes revoke them? How would that mechanism work? We know we can fairly easily give users private revocation keys for something on a blockchain like that, but in such a protocol a compromised vote would make it impossible to recieve or produce a valid credential like that. The alternative is you use traditional legal systems to contest and investigate fraudulence.
* Alternatively, you tie voter id to the revocation key, but then you have the problem of lost or stolen revocation tokens, plus...
* Anonymity. The easiest way to make a blockchain voting system both anonymous and verifiable to generate a random transaction id for voters to follow for their vote. But because any given id does not provably correlate a person to their vote (you would want to print it on generic paper or even better just send it as an NFC token to a handheld device as a generic string) then the actual voter can be confident in the correlation, but manipulators cannot. This does have its own problem of the machines potentially just emitting false ids, again promoting the idea you might need both a personal and session key combined to be able to verify authenticity of the machine itself.
* There are ways to mitigate compromised endpoints - having voters sign off on their votes success independently of the voting machine will eliminate the ability to produce false ids of someone elses vote, for example.
Note this would not be anything like a cryptocurrency blockchain. Participation would be limited to a collective network of state computers providing consensus with no outsider participation. The chain would not be active year round, it would only generate blocks per election. The actual blocks would contain metadata beyond just the votes, and in the best implementation would provide a searchable database of voter heuristics.
Additionally, a lot of the privacy requirements are a bit overblown. Almost all US states presently support mail in ballots, which have dramatically more vectors for compromise than any electronic system because it cannot be anonymous and authorized simultaneously the way algorithms can be. You could lax the anonymity to just public anonymity - the state itself knows your voter id, you know it, but the public does not. You can share your results because you always know your id, and while it does leave you open to intimidation, it already happens now. Friends force friends to take photos of their ballots, and write ins are implicitly compromisable. It depends on the voters themselves to go to authorities when their votes are being coerced.
But fundamentally the blockchain consensus model of voting makes sense. It eliminates the ability for bad actor endpoints ruining the integrity of the whole. It makes the whole process transparent, where the only way to rig the election is to compromise a majority of participating "miners" in the state. In traditional elections, that is still achievable - if you control the count, you can produce whatever results you want.
Any kind of audit log records the order of the ballots cast. Which (mostly) corresponds to the order ballots were issued.
Meaning blockchain voting would eliminate the secret ballot.
I don't think it's possible to have electronic tabulation which safeguards either the secret ballot or the public vote count. But I try to be open minded about it. Some of my besties are nuts for the blockchain stuff, so they keep me in the loop about each new notion.
With a bitcoin transaction you cannot know the order confirmations were requested, just when the transaction was finalized, and there is no correlation between the two in finalized blocks.
Given that such a blockchain would only be active one day (or up to a week) of the year and see ~120m+ transactions in 20 hours or so, there would be no way to predict what transaction any one individuals vote was.
I really do consider these ideas. Both to see if there's a way to make them them work within existing election administration laws, rules, and procedures, as well as to see if there's some future perfect system that might work (even if we have to change how we run elections)