Show HN: VOTEism – Secure political opinion poll app
docs.voteism.org
docs.voteism.org
There is unanimous agreement from the security community that we must not use digital voting. It is a mistake, full stop. As an opinion app it doesn't matter, but we must use paper ballots for our elections.
For anyone interested in learning more I recommend this short 20m Enigma conference talk by Ben Adida (currently building open source voting software/hardware at https://voting.works):
With paper, the voter can see that their ballot is securely stored under the supervision of the election operators, and they can see that representatives from multiple parties watch the movement and counting of the ballots.
In contrast, with a digital system it is impossible to verify that your ballot was delivered with the choices you intended without also being able to show that proof to anyone else. It is important that the voter is unable to show proof of their vote for the reasons mentioned above. Unlike a paper-based process, you cannot directly observe the functioning of an electronic circuit, the transmission of data over cables, or the storage of bytes in memory, and neither can anyone else trying to verify the integrity of the process. You'll never know if someone has replaced any of the hardware or software components with malicious versions designed to fool voters and rig elections.
It's utterly absurd to say everyone should just give up and we will only use paper for the next 500 years. People should be attempting secure online voting and kneejerk pessimism or shutting down discussion on it is counter-productive.
There is probably a place for a digital voting system, for example physically disabled people. It could also be used to let people vote on less important topics, where they would have otherwise no direct voice. For some important elections, we could have a majority of people voting on paper, but still have a digital voting system for specifically allowed people.
Some people already trust enough their phones to install a covid19 contact tracing app, without fully understanding all the layers of the technology.
At the end of the day, if enough people trust digital voting, it can happens, even if the system is not provable end to end.
When a client requests the public key from me, I give them a fake one- not the one present on the air-gapped PC, my own key. I then decrypt their vote, inspect it, and re-encrypt it with the real key before sending it off to the air-gapped server.
Does this work? How do you detect it? And what's your threat model?
No, you say it is. From the client's side, all I do is POST my encrypted vote and signature ( https://github.com/VOTEism/server/blob/d8d3752af99d7f4c25c0b... ), encrypted with a public key I just got from an HTTP request to the same server, no? ( https://github.com/VOTEism/server/blob/d8d3752af99d7f4c25c0b... ). I can't tell what you're doing with it after that.
And there's what may be an even worse issue (not even requiring tampering with the public key) - the user's signature appears to go outside of the encrypted blob. Now, I can't tell what the signature is actually over - but if it's, say, just a candidate name or ID, then... without ever decrypting the "encrypted vote", I can figure out who voted for what by just trying possible values and seeing if I can validate their signature.
So... a republic?
Why fork threads only to immediately join on them? This is just sync code with extra context switching and fatter stack traces.
> https://github.com/VOTEism/server/blob/d8d3752af99d7f4c25c0b...
This creates a new thread pool for each login request. That's a terrible idea. If anything create it once statically and re-use it. Or just perform your actions in the calling thread as you're just issuing a .get() on the future anyway. Again, it's needless complexity.
PlaceAVote was one of many startups that tried this, monetized by selling the data to pollsters. They had quite a few users at one point.
https://countable.us lets people vote and discuss real bills and issues, I think also monetized by poll data and ads.
The focus on technical details is fine - if you are going to build an opinion poll app it sounds like you're doing a fine job, but I don't really understand what it gains for users, society or your company?
If no such prevention is in place, are there any guarantees at all that the collected statistics actually reflect real opinions?
Edit: After rereading your comment, I felt there might have been a miscommunication. I'm sure your server discards multiple votes from the same registered user. With "voting multiple times" I instead refer to a malicious actor masquerading as multiple distinct users by registering multiple accounts.
I'm sure you've made impressive work with this app, and it surely is beyond my capabilities. But if you have created an app that presents itself as a reliable and secure system but in reality is easily gamed by malicious actors, it might actually hurt democracy instead of helping it. If the app gains any form of notoriety or popularity, it could be fed malicious votes and then be used to sow distrust towards the (real and valid) election results. In such a scenario it would just harm the democratic process. I have yet to see any indications that this is not a real possibility.
Being sure my vote is counted is only half the battle. I also need to be sure that my vote was not drowned out by countless of fake votes. One thing is not worth much without the other.
I would be more forgiving it was more clearly presented as only a prototype or proof-of-concept, but with a mission statement as grand as "VOTEism seeks to fix opinion polls" I feel it deserves more in-depth questions.
1. Registration part is open-source and we have taken precautions such that same user doesn't register twice from the same device using different SIMs, change of devices. 2. We have made sure that the registered device is a mobile number 3. Restriction and verification of the user registration to where the poll is being held. For example, currently VOTEism app cannot be downloaded outside of US. 4. Counting part is not open-source by design, because it is processed offline and it is a proprietary algorithm out of necessity for secrecy. 5. We want to make sure the counting of the votes happens offline to eliminate the scope for manipulation 6. Vote data is encrypted and validated with it's signature to make sure it is not tampered with. 7. We are also making sure that the keys are rotated periodically. 8. We can guarantee that the collected information statistics are accurate.
I hope we have answered your questions. Please feel free to raise your concerns. If you want to take the conversation further you can email us at hi@voteism.org
We are redoing the Show HN for VOTEism.
The first time we did a Show HN (https://news.ycombinator.com/item?id=23430800), there was a very valid suggestion from the HN Community that we open source the code. Accordingly we have published the code here: https://github.com/VOTEism.
A brief about VOTEism ... again :)
The Covid-19 situation forced many things to shift online. We wondered what it would be like to conduct democratic elections online. While that is the far-far future, we set about building something that could get us a step closer towards that future.
VOTEism is a secure political opinion poll app to express your preference for one electoral candidate or the other. VOTEism currently works for the 2020 USA Presidential Election only. But we hope to take it to all countries where democratic elections happen.
Current political opinion polls are riddled with low sample sizes, interviewer biases, push poll tactics, self voting sock-puppets, and worst of all, the lack of privacy. VOTEism seeks to change that.
Your vote is encrypted with a public key on your mobile device and is decrypted with the private key on an air-gapped system. 4096 bit keys are used. Anonymized and aggregated results are published on the VOTEism mobile apps.
VOTEism is built, published and funded by a small and independent software company (AskDesis INC.) based in the United States. We have no political, governmental, corporate, or media affiliation. Please take time to read our transparency policy here: https://docs.voteism.org/transparency
We hope you find VOTEism useful. Feel free to ask us anything.
Links: iOS: https://ios.voteism.org Android: https://android.voteism.org Docs: https://docs.voteism.org Source Code: https://github.com/VOTEism