Inspiration

We were inspired by the controversy of the most recent couple elections with people claiming some votes were not counted and that some were double counted. Election and justice transparency is one of the UN's 16 goals, and a digital voting technology could help make elections more transparent and accountable.

What it does

Each vote is encoded as part of a chain of votes, where each next vote signs the previous one with a Zero-Knowledge Proof. Every voter has their own unique identity, but thanks to Zero-Knowledge Proofs they can remain anonymous. Contrary to a Proof of Work blockchain where significant computational power is needed to tamper with the chain, this is a Proof of Identity system where tampering requires stealing a significant number of people's identities. Once the votes are tallied, voters would be able to check if their vote was cast and counted correctly in log(n) time thanks to a Merkle Tree structure of all the votes.

How we built it

We first did a lot of research on Zero-Knowledge Proofs and blockchains, and then designed the system using GraphViz to have an overview of the whole system. Then we deployed the backend functions written in JavaScript to Cloudflare which provides automatic global data replication, caching, and scaling. That way the backend would have no problems scaling well. At the same time we were also designing the HTML and CSS for the UI, and writing API calls and function glue to implement the cryptographic functions smoothly in the frontend as well.

Challenges we ran into

The biggest issue was that JavaScript was harder to learn than we thought, which greatly slowed down the development as most of us don't have much experience with frontend programming. As a result we weren't able to complete a functional demo beyond being able to run some of the glue functions successfully from a browser console. We also didn't have time to implement vote validation using Merkle Trees.

Accomplishments that we're proud of

Learning JavaScript enough to write a functional backend and frontend in less than 24 hours! As well as designing a very complex system in a way that would still appear as very simple to the end user. We're really happy with how far we got with a really complex system, new programming language, and short time.

What we learned

JavaScript, Cloudflare, and advanced cryptography concepts.

What's next for PrivacyPoll

We'll continue developing this project now that we have more knowledge about JavaScript and have more time. Hopefully our research, design, and implementation will turn out to be useful.

Built With

Share this project:

Updates