← Back to context

Comment by juhanima

4 hours ago

You convince yourself the way you do with any elections: you trust the people/system that counts the votes. If you think about it for a second, the requirements of a secret ballot (meaning it's not possible to know who voted who) and the fully verifiability you are asking for are mutually exclusive. You can have either one but not both at the same time.

That being said I think the Estonian voting system does a decent job of being trustworthy. Publishing the source code is a big step to the better as well. As far as I knew the system was written in Java but seems like they have upgraded it in Go. Good job! Probably the best in the world.

> If you think about it for a second, the requirements of a secret ballot (meaning it's not possible to know who voted who) and the fully verifiability you are asking for are mutually exclusive.

I might be missing something obvious but I'm not quite seeing the logical inconsistency between their two goals. Note they're only asking to verify their own vote, not to verify every other person's vote. For that, isn't it enough for authorities to announce a product of large primes, letting each person verify that their own prime was in the set? At each stage, the machines only report the product of primes up the chain, not the individual ones.

It seems to me the difficulty is with the fact that we have so many places to hide malicious things with modern technology (tiny electronics, firmware, etc.), not a logical incompatibility between the goals. If you had some sort of abacus that did all this mechanically without reprogrammability... or a large computer whose logic was fully verifiable... then everyone could inspect the machine and verify that it behaves correctly prior to elections, and e.g. a camera/observers/etc. can ensure no tampering occurred with the machine until the tallies were conducted.

  • Yes. Sorry for the condescending tone of "thinking about if for a second". It is actually an interesting problem worthy for a longer time.

    Still, if you had the authorities to announce a product of large primes - whatever that means - how do you know they announced the correct primes and not something they made up? I'm afraid any clever cryptographic scheme you come up with falls the victim of the same dilemma: if you can check that your vote was counted right, you lose anonymity. Also how do you check no fake votes were added?

    As far as I know, the Estonian voting system works in two stages. First there is an authenticator, that verifies that each given vote is signed properly, is only given once and can be counted, without looking at the payload. Then it anonymizes the votes and signs the result file which is transferred to another system which counts the votes. The communication is unidirectional so that the front-end doesn't get any feedback from the back end save some data transfer acks.

    As I said, a decent job. It's not perfect in any meaning of the word. It's practical and it works. People trust it because they trust the people who designed it and run it.

    • > Still, if you had the authorities to announce a product of large primes - whatever that means - how do you know they announced the correct primes and not something they made up? I'm afraid any clever cryptographic scheme you come up with falls the victim of the same dilemma: if you can check that your vote was counted right, you lose anonymity. Also how do you check no fake votes were added?

      My take is that one should be able to check that a blockchain has not been altered/substituted, and the way to do that is by being able to record encrypted running tally blockchain heads, but this gives you no indication that the published blockchain faithfully represents the cast votes so you have to add paper ballots and an immediate partial manual audit of the paper ballots checked against the digital cast vote record.

You can be a observer in the room when the ballot is counted. So you can monitor if everything was done as intended.

This, and the need for everyday Joe to be able to understand what is done at every step.

All the source code in the world means nothing when it comes to elections. It's the object code, down to firmwares, BMCs/MEs, even microcode that matters. It's hard to establish trust in those things.

  • I wouldn't say it means nothing, but you are right in that it is not a silver bullet. It is one piece of a chain of custody to build the trust. Having source code is better than not having it. Having verifiable builds is better than not having them. Having trustworthy hardware is better than not having it. You get the gist?

    • I'd rather have a paper-based system, with machines to do the hard labor of counting, and timely partial manual audits. Then I don't have to inspect any source code.

      BTW, the source code we're talking about could easily be enormous, especially if you want the machines' firmware to be open too. Reviewing that source code would be a huge task. And you still have the problem of being unable to validate that the actual object code run in production corresponds to the source code you reviewed. And the public won't believe any of it anyway.

      1 reply →

Nope. Vote tallying is public with random overseers, in transparent boxes watched by a room of people from diverse opinions, with random inspections - precisely because we DO NOT trust the system or the people who count the vote.

Which has always been my biggest beef about digital vote. I'm all trusting the people writing voting software to do their best, actually. Being a Software engineer myself, I'm more concerned about bugs and hacks than deliberate tampering by the government. Especially in an age where AI agents can access pretty much anything ever connected to an electric plug...

  • > I'm all trusting the people writing voting software to do their best, actually.

    You are aware of malicious hacking.