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!