stonecoldpat / anonymousvoting

Anonymous voting on Ethereum without a tally authority. Protocol from this paper http://homepages.cs.ncl.ac.uk/feng.hao/files/OpenVote_IET.pdf
340 stars 88 forks source link

Independent vote verification? #4

Closed justinmchase closed 7 years ago

justinmchase commented 7 years ago

Suppose this was implemented for official government elections and I'm a very skeptical person when it comes to trusting elections.

What I would really like is to be able to vote from one machine (e.g. my phone, my pc, a voting machine in my local high school, etc.) and receive a receipt which has some sort of code I can use in combination with my private password to then go to a 2nd machine and verify that the code was recorded correctly. Totally separate machine, with separate software not under physical control from the same people.

Meaning, I may be afraid that the machine I'm actually voting on is compromised and thus altering my vote as a man-in-the-middle attack but I would feel better if I could verify on a second machine or at any point in time down the road that my vote was actually tallied correctly.

Does this dapp have any sort of verification mechanism for an individual to independently confirm that their vote was indeed cast correctly?

Or in other words, how can I trust that the software I am using to cast votes is doing so faithfully?

stonecoldpat commented 7 years ago

Hey,

What you are describing is an important distinction between end to end verifiable elections (E2E) and publicly verifiable elections.

One assumption in an E2E election is that the voting machine cannot trusted and voters should be able to challenge the voting machine to ensure it is not acting maliciously. One approach for doing this called a Benaloh challenge which follows commit and prove paradigm.

For example, a voter casts their vote on the voting machine (online or at a polling station). The voting machine commits to this vote and broadcasts the commitment to the public bulletin board. Then the voter can either cast the vote or audit the vote. If the voter challenges the voting machine, then that ballot is spoiled and the machine opens the ballot. If there is discrepancy, then the voter has cryptographic evidence of it.

Many systems (notably Helios) follow the above approach. It is also worth mentioning that two other system (DRE-i and DRE-ip) that rely on the same underlying cryptographic technique as the Open Vote Network can support Benaloh challenges.

The Open Vote Network is a decentralised and publicly verifiable election protocol. It permits anyone with a copy of the protocol execution transcript to verify that the election was run correctly, and at the same time to also independently compute the final tally. As such - it does not rely on any central authority to provide the infrastructure to participate in the election. (Although in this implementation - we have an election admin to support co-ordination / authenticate voters). This is worth mentioning as it also assumes that each voter must trust their personal device in order to cast their vote which is why it cannot be called an E2E voting protocol.

To answer the verification mechanism question - the voter can use independent devices to verify that their vote was cast as intended. This is possible as the voter's private voting key is able to re-open their ballot and reveal their vote.

justinmchase commented 7 years ago

Ok, so I could vote on one machine, vote, then go to another machine and using the same private key check and verify that the vote was recorded properly.

And if the machine I am using to cast the vote is compromised and a man-in-the-middle were to flip my vote before it was actually recorded, I could detect that. Are there any technical solutions available for people who believe their vote was compromised in this way? Meaning, could I revote or have my vote at least retracted if it were shown that a compromised machine was used? Or are social solutions to that problem more appropriate at that point?

Also, I just wanted to say thanks for putting some brain power into this because a lack of confidence in voting systems is a huge problem and it seems like election fraud is probably way more rampant than anyone wants to really admit. A really solid and trustworthy voting system would be a major social revolution.

stonecoldpat commented 7 years ago

In the Open Vote Network if the voting machine is malicious and flips your vote - then there is little you can do about it. One research direction is to permit OV-net to support re-casting of a vote... but the cryptography is very tricky and I haven't figured out how to do that yet. Other voting schemes that are more centralised can allow for votes to be re-cast etc.

Also no problem :) This work was mostly motivated by the online e-voting example here http://ethereum.github.io/browser-solidity/ which does not provide voting privacy. It also led me to realise that Ethereum is an ideal platform to run cryptographic protocols and this is the first of many examples to come.

stonecoldpat commented 7 years ago

I'll close this :) thanks for the question!