# Secure way to Tally Votes

I want to find a secure and efficient way to tally votes.

Say we have N ~ 10000 voters. Each one can vote for candidate 1, candidate 0, or both. But no one can vote more than once. The groups who voted for 1 or 0 want to tally their votes.

Is there a way to tally votes that is fast and cryptographically secure? Perhaps a zero knowledge proof or a ring signature? Thanks!

Yes it is possible, check out the CGS voting protocol: A Secure and Optimally Efficient Multi-Authority Election Scheme. In this voting scheme, each voter encrypts their vote $v \in \{0,1\}$ with Elgamal encryption: ${\it ctxt} = (g^vg^{xy}, g^y)$ under public key $(g, g^x)$. At this point anyone can compute the aggregate of all votes as the componentwise product of all ballots: $(g^{\sum v_i}, g^{x\sum y_i}, g^{\sum y_i})$ and the authorities (who jointly hold the secret key $x$ matching the public key) decrypt this ciphertext.