6 ms·
If it's not (and I think it isn't) the code used in the voting machines needs to be open source and publicly available in a government repo. That would be a sta
by imgabe 10y ago
If it's not (and I think it isn't) the code used in the voting machines needs to be open source and publicly available in a government repo. That would be a start. There's still the issue of ensuring that that code is the code that is running on the actual machines, and that the compiler used to compile that code hasn't been compromised, and that the source for the compiler is available and on and on....
I'm not a security expert, but what would be a good way to publicly verify all this?
- marcosdumay 10y agoYou still didn't got on the level of tampered hardware. There's just no good wat to verify this.
- dcherman 10y agoI'm not a security expert either, but my very first thought was that if we've successfully maintained a public ledger of financial transactions ( blockchain via bitcoin ), then that technology seems useful for large scale voting which is nothing more than another series of transactions. Maybe someone more educated about blockchain could illustrate some of the pros/cons about using it in this manner?
- eridius 10y agoAn immediate huge problem is the fact that the blockchain works because the signer can prove their ability to sign, but voting is supposed to be anonymous. If every vote was a transaction then every vote would be public knowledge, but anonymity of voting is one of the cornerstones of our voting process.
- paulmd 10y agoProbably solvable. Here's one solution that would only require registration of write-ins (which many states already do). 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.
- Spivak 10y agoHere's the problem. Anyone who has $key could determine who they voted for. Not only would the average person not know how to sufficiently protect this key but it makes votes trivially verifiable by the voter which is equally as bad.
- paulmd 10y agoWell, I disagree that having keys be trivially verifiable by the voter is a problem. That's a selling point - you can be sure that your vote wasn't altered in-transit. In fact that's largely the point of the system. 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.
- eridius 10y agoIf you haven't seen it, Spivak's other comment explains why you don't want voters to be able to verify their vote later (https://news.ycombinator.com/item?id=12923958 https://news.ycombinator.com/item?id=12923958).
- paulmd 10y agoI don't think you actually read my comment. His point is fully responded to.
- Spivak 10y ago> but voting is supposed to be anonymous 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.
- kobeya 10y agoA cabal of miners can censor transactions. If those transactions are ballots, then all it takes is a cabal of 3-4 people (who run the mining pools) to decide the result of the election.
- grzm 10y agoThere's no reason to use the blockchain for this. There are existing methods that allow people to be able to confirm their vote is included in the final tally without revealing (by choice or otherwise) what their vote is. See Punchscan or Scantegrity for examples. - https://en.wikipedia.org/wiki/Punchscan https://en.wikipedia.org/wiki/Punchscan - https://en.wikipedia.org/wiki/Scantegrity 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 https://people.csail.mit.edu/rivest/pubs/Riv16x.pdf https://people.csail.mit.edu/rivest/pubs/Riv16x.pdf
- zanny 10y agoYou need a public blockchain voting record. Citizens would need to independently verify the results of their votes cast and contest faulty ones. 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.
- specialist 10y agoBack when I cared more about this... 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.