I am trying to make a e-voting system based on blockchain and I am trying to think about a way that i can verify that a vote is legal without reavling the identity of the voter.

One of the solutions we thougth about was to use linkable ring signatures, but the problem with this aproch is that the more keys we generate the more time it will take to sign and verify, so we cant make huge amount of keys for every person in the election. after we realized that, we found on the internet that there is a version of ring signatures calld "short linkable ring signatures" - https://eprint.iacr.org/2004/281.pdf From what we understand this version will let us create huge amount of keys without signing taking ages, the problem is, that we didnt find any implentations of this paper in any programming language.

The second solution we thougth about was using zero knowledge proof to verify voter eligability, specificly zk-SNARKS. we thought about giving every voter a secret password that only they know and making a public list of hashes of every one of this passwords. if someone want to vote they need to verify with zero knowledge proof that they know password that it`s hash is in the list. the problem with this approch is that we cant know if someone used the same password to vote more than one time, this makes it that everyone can vote how many times they want if they know only one password.

The last solution we thougth of was to do what we did last time with giving everyone password and making a public list of the hashes of the passwords, but this time the every voter will exchange passwords with someone else couple of times until they get a password that dosent relate to them at all, and then they vote with that password. the way we verify if a vote is correct is just to check if the hash of the password is in the list. The problem with this solution is that we cant know if the key we exchange to is valid before the other person sends it to us, another problem is that we cant know if the same time someone is exchanging key with us they exchange it with someone else to so two people get the same key.

To summrize if you have any idea how we can solve this problem, we wiill be very happy to hear!

  • $\begingroup$ How many people would be voting in an election, and what do you consider to be an acceptable time limit for the signing computation? And why not just partition the voters into subgroups, large enough so that it would be very unlikely that every single person in that subgroup would vote the same way and thus expose the votes of all members of the subgroup. $\endgroup$
    – knaccc
    Sep 15 at 17:25
  • $\begingroup$ Please look at how non-blockchain voting schemes solve this. There are standard techniques. If you want to use a blockchain, use it to replace a bulletin board. (Depending on the blockchain, that may or may not make sense.) $\endgroup$
    – K.G.
    Sep 15 at 18:08
  • $\begingroup$ @knaccc I want the election to be at the size of a country - this means couple of millions voters. an acceptable signing time is something like 5 seconds $\endgroup$ Sep 15 at 18:10
  • $\begingroup$ @K.G. I want the entire thing to be decentrelized, I dont want a third party authority $\endgroup$ Sep 15 at 18:13
  • $\begingroup$ If there is no central authority, who gets to decide which public keys are eligible to vote? $\endgroup$
    – knaccc
    Sep 15 at 18:15


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.