An idea for encrypted, verifiable voting
blag.mpcsh.xyz
blag.mpcsh.xyz
However, a fundamental problem with any kind of online voting is that it doesn't prevent your vote from being coerced: https://freedom-to-tinker.com/2006/12/12/erosion-secret-ball... The best known way to do that is to make you walk into a secure area, secretly make your vote on a piece of paper, and put it in a common ballot box. That's the system most countries already have!
E-voting also fails to solve voter suppression problems -- how do you decide who gets a voting ID?
Finally, this kind of thing just isn't needed right now. Is anybody claiming that fraudulent voting was a significant problem in this election, or in any recent US election? Where's the evidence? The current highly decentralized system is already pretty robust against widespread fraud (though slightly less so as electronic voting machines become more popular).
There are far more important problems to solve, like voter suppression and the extreme polarization of politics.
[1] https://en.wikipedia.org/wiki/Lyndon_B._Johnson#Contested_19...
[2] http://ktla.com/2016/11/03/possible-voter-fraud-being-invest...
(Trump complained of a vote-rigging conspiracy, of course, but unsurprisingly he shut up once he actually won. He changes his position too often to be credible.)
I am not a 'team player' for any party, and take all allegations by candidates with a heaping mound of salt.
As people have commented elsewhere in this discussion, an online voting system would probably be more vulnerable to fraud, given what we know of the methods and capabilities of the NSA and other organisations.
I agree that there's probably petty fraud going on here and there but I don't see the need for sweeping and risky changes to try to fix it.
That's not exactly true. In many countries the vote is not strictly secret, in the sense that the secrecy of the vote is not enforced: you can show what you are going to put in the ballot to others before casting your vote... and therefore your vote can be coerced or bought as others can verify that you voted as they wanted.
In electronic/online elections, vote coercion is not generally solved BUT the situation is better: normally you can cast your vote as many times as you want and only your last vote will count. Therefore you can vote in presence of your boss, for example, and vote whatever you actually want afterwards.
And that's a good point about being able to change your vote.
"$5 off your next purchase if you can produce a receipt for candidate X!"
"You must vote for X if you wish to join my organization."
If you are very worried about such a scenario, verify that your vote is on the blockchain, then destroy your receipt.
I don't really buy "it's illegal" as a counterargument. There are a lot of things employers pressure their employees to do that are illegal, but the employees don't really have the ability to do anything about it, because they're taking a risk on the legal system working out for them, and in the meantime they'll probably lose their job and be known as an employee who litigates against their employers. As a wise man once said, if you're a single-digit millionaire, you have no effective access to our legal system.
(And I'm sure everyone's in agreement with the importance of making the ballot secret.)
Perhaps the election commission would also have a paper receipt with a different unique key.
Then both your receipt and the county's receipt would be necessary to locate your vote on the blockchain. Then vote verification could be restricted to the same level of privacy as when voting takes place.
I also like the idea of using 2 paper receipts which I think is easy for people to understand.
If someone would so readily hand over their SSN and Voter ID, what will stop them from handing over the county receipt?
zero-knowledge protocol is a method by which one party (the voting machine) can prove to another party (the voter) that a given statement is true (their ballot was cast, untampered), without conveying any information apart from the fact that the statement is indeed true. ... the definition implies that the voter will not be able to prove the statement in turn to anyone else (a vote buyer/intimidator), since the voter does not possess the secret information.
You can explain in about 30 seconds that the ballots shouldn't be individually identifiable, you have a record that is difficult to tamper with, etc.
How many people have a rigorous understanding of Zero Knowledge proofs? How many people would be able to audit the implementation of such a system?
The benefits that come from electronic voting are small, and we can get them in other ways. Why are people so eager to add so much complexity to such an important civic function?
I agree that a blockchain solution may be overly complex, but I think the spirit of what they're after is in the right place.
With something like this you just need a USB stick, the voter registration database, and the records from the last few elections (and/or death records) to figure out which votes are safe to stuff. If you do make a mistake you will end up with some people who's votes are rejected and no way for an election official to differentiate between that and someone trying to vote twice.
I tried formalizing the protocol but there are so many inconsistencies. E.g. the ephemeral key is mentioned briefly... Who generates this key? Who encrypts the message? What's the purpose?
Critique of the few parts that are clear:
1. It mentions a vote blockchain. Why blockchain? There's (apparently) no reason to have a chain of votes here. Even a spreadsheet would be fine. Buzzword alert! I know it's irrelevant but it's a huge red flag that a blockchain is crammed there for no reason at all.
2. "the government can know who individuals voted for" This is a no-no. HUGE no-no. TFA trivializes the impact but I definitely wouldn't vote in a system where anyone but me can verify my vote.
3. Even if you can verify your own vote, that's pretty much it for verifiability. Everything else relies on trusting election officials. What?
And I stopped analyzing there because frankly that's pretty much a broken system.
EDIT: *In retrospect, "trivial" is probably vastly understating the difficulty. However, I still don't think this is a "hard" problem.
* bribing of voters to bring their empty ballot to briber;
* fake voters (commission is not police, they are not checking documents as carefully as police do);
* bribing of counters for direct replacement of votes;
* pens with ink which is easy to remove and correct;
etc.
I like the idea of a county/precinct/district being the entity who signs the results of a vote. This would protect the anonymity of individual voters, since results are reported on a per county basis today anyways. And if a county is suspected of voter fraud, you could always add their public key to a blacklist..
How does this follow?
You create a plaintext ballot, then you encrypt the ballot with the election authorities' keys, then you sign your encrypted ballot with your own private key (then you send the ballot to the server).
You are signing a ballot that is already encrypted.
Using a mixnet (note: Tor uses mixnets too), you can anonymize and decrypt the ballots while preserving the secrecy of the ballot. Not even the servers know at any point that you voted to Hillary/Trump, but the tally is done. And the whole process is end-to-end verifiable by any external party.
It's the magic of math.
How will you associate the public key to me?
You don't need crypto. You just need a machine that prints out a human readable receipt that the voter can see but not alter, which then drops into a secure holding area on the machine. At the end of the day, you randomly select say 1% of all the machines and hand count all the ballots inside, making sure the counts and votes match. If they do, then you can be reasonably sure it wasn't tampered with, and if they don't match, then you can hand count all the paper ballots using the old system to verify the computer.
- Be verifiable - you should be able to see your own vote.
You can view the print out of your vote before it drops into the secure box.
- Be auditable - anyone should be able to tally up the results of the election.
Anyone can count the paper ballots
- Be secure - it must not leak anyone's vote to anyone else.
It's on an unidentified piece of paper
- Be genuine - it should be cryptographically impossible to commit voter fraud.
Well, you have to rely on standard methods of preventing voter fraud, but since there have only been five cases of proven voter fraud in the history of US elections, it's not really a big deal
- Be tamper-proof - it must be impossible to forge results from the inside.
Since the paper is in the machine and verified by a human, you can't really tamper with it any more than you can tamper with paper ballots today, and since those or monitored by adversarial groups, it's basically impossible to tamper with them.
Possible expansion topics:
- Handling a ballot with multiple separate races
- Backup system for when the computers have gone down
- Can it assist in any way with "voter suppression" issues
I don't like the idea that the encryption of the full list would be reversible. If I had contrarian views, I might be afraid to vote if that would put me on a list. Stick to one-way with a guardian to entry.Theory and Practice of Cryptography: Verifying Elections with Cryptography
https://www.youtube.com/watch?v=ZDnShu5V99s
This is probably one of the homomorphic schemes mentioned in TFA.
It's very old (2007-ish?) and the state of the art probably advanced, but it's very interesting and addresses a number of points that are not cared for in TFA (like secret ballots verifiable by the voter but impossible to prove to anyone else).
Put enough compute behind that blockchain and eventually you'll crack it, or run Shor's algorithm on the first Quantum Computer and votes from a decade ago are now public.
My contacts in the intelligence community say this is their biggest fear with intercepted communications today. They may be 'secure enough' today, but some of the information moved around would still be devastating if it were decrypted 20 years from now by a bad actor, not all, but some.
The way you should go about this is little different IMHO. Have two blockchains, one that checks if people have voted, and one that records the vote. If you have not voted, then one anonymous vote may be added to the ledger of votes for final tallying. If you have voted, your request is blocked. Maybe you get a random key that gives you the right to add a vote if you pass the first checkpoint, but that key can not be associated with the record that you voted on the other blockchain.
Cool idea. I for one prefer physical voting. It sucks, but I feel safer with it.
Full Disclosure: yes I work at nVotes/Agora Voting https://nvotes.com https://github.com/agoravoting/agora-dev-box
This approach uses a mixnet (like Tor) to anonymize the ballot so that the secrecy of the vote is preserved. Only if all the election authorities are compromised, the secrecy of the ballot is at stake, but in any case the election is end to end verifiable (this is a sentence that means that specific requirements are fulfilled).
This particular internet/electronic voting system is already being used by many organizations in Spain and Europe.
PD: Yep, nothing is 100% secure. PD2: Yep, census/user authentication is still an unresolved problem in computer science. In Spain we have a government-issued electronic ids but it's no use because of the difficulty of using them.
From reading this article, it would seem that it satisfies the first 4 points, just not the 5th. Is that the main reason to have to use the blockchain, to prevent tampering from the inside?
Take it for someone who lived in a country where we had 70 years of elections with the same party winning each and every one. Tampering from the inside, when possible and hard to detect, becomes ubiquitous. We only started moving towards semi-fair elections when the election authorities begun to include representatives of all major parties. But in the server example, you would need very complex procedures to replicate that, and make sure there is not a single administrator that can tamper invisibly with the server. It is actually easier to build a tamper evident distributed system than a tamper evident single-node server.
The level that system would play at is: protect against other nations with sophistication at the level of the NSA, protect against other nations that compromise an employee of said system, and to protect against large scale DDOS attacks during a critical time in our democracy
The presidential election would arguably be the biggest target of hackers. With the right hack you're essentially directing hundreds of billions of dollars where you want to if you elect the right candidate.
The secrecy of the vote must be preserved, meaning that not even the servers can know, at any step of the process, that voter A voted for option X.
Voters must be able to verify that when they choose option A, option A is correctly coded into their ballot.
Voters must be able to verify that their ballot is included in the tally and that their ballot is unmodified.
Anyone must be able to verify the process of mixing/anonymizing, decrypting and tallying the ballots.
So it's not easy at all because the requirements are quite contradictory. But you can do it with mixnets, for example, using them in a similar fashion as Tor. That's the way Scytl or nVotes do it :)
"And so long as the counties can protect their secret keys..."