Search code examples
p2pbitcoinvotingvoting-systemblockchain

How to check if an user voted but to be impossible to see for whom?


Blockchain Voting System

How current system works

  • Users are allowed to vote after their identity is confirmed by an authority.
  • Votes are collected and counted by an authority.
  • The person who has the most votes, have the power for ~4 years, then we vote again.

Problems

  • The elected person can become irresponsible and corrupt within the ~4 year period and the citizens can't do much about this, they just have to wait until the ~4 years will expire.
  • A lot of money are spent for election campaigns because everybody is trying to get power for ~4 years.

How the new system works

  • Users are allowed to vote after their identity is registered in blockchain and confirmed by an authority.
  • Votes are stored anonymously on a blockchain.
  • It's possible to check if an user voted, but it's impossible to check for whom he gave his vote.
  • Votes are "realtime" (a new block is mined every XX minutes) and can be displayed on a billboard in the center of the town, so the elected person will watch it every day and work hard to maintain people's trust.
  • Users are allowed to change their vote every week (Sunday).
  • If the user didn't changed or updated his vote for X weeks, the vote is expired and deleted. That way the citizens will be more active (also this fixes the problem with dead users)

Problems

  • How to implement: It's possible to check if an user voted, but it's impossible to check for whom he gave his vote ?
  • How to implement users?

    • Authentication: biometric or just a key give by an authority. It must be very simple and secure for non technical users.
    • New user creation - new people who reach 18 years
    • Anybody must be able to verify if the user who voted is a real person (prevent flood from corrupted central authority who has the ability to create new users)

https://gist.github.com/moldcraft/e2eb508e10b9ae7e70d1


Solution

    1. A voter produces a statement of how they wish to vote.

    2. The voter blinds the vote, attaches the blinded vote to a proof of their identity, and signs it.

    3. The central authority receives the blinded vote and verifies the signature. If the signature is correct, the central authority signs the blinded vote.

    4. The voter unblinds the signed vote and uploads it to a repository or adds it to a blockchain anonymously.

    5. The central authority must be able to produce one signed, blinded vote for every unblinded vote produced. So if there are 50,000 votes signed by the central authority collected, the central authority must be able to produce 50,000 blinded votes signed by voters.

    The signed, blinded votes show who voted. The unblinded votes show how many votes each candidate or proposal got. There is no way to map the blinded votes to the unblinded votes, so there is no way to tell who voted for what.