I'm basically a crypto noob (and not an english native), so please be indulgent :)

I thought about if you could realize an eVoting system with bitcoin.

I see 2 major requirements:

  1. each citizen can only vote once
  2. votes musn't be traceable

I imagined the government could give each citizen a private key (with their passport for example) and make the actual voting a multisig procedure, where you need to provide the government provided signature plus your own to sign your vote.

Now for my actual question (thx for your patience so far):

Is there some kind of math magic, that makes sure those 2 requirements are met? In other words: Could you, cryptographically use two private keys to sign a transaction, ensuring that one key was issued by a certain CA (= the government) without being able to trace this to the actual user (keeping the vote anonymous).

  • 2
    $\begingroup$ If the government provides the private key and the private key is used to sign the vote, why can't the government trace the vote? $\endgroup$
    – mikeazo
    Commented Sep 3, 2015 at 12:22
  • $\begingroup$ good point. I thought, you can't find the private key just by having access to something signed by it, don't you? Having access to all ever issued private keys, you could do a brute force I guess ... Is there some way to circumvent this? $\endgroup$ Commented Sep 3, 2015 at 13:09
  • $\begingroup$ As I said: I'm a crypto noob; Isn't it possible to mangle my own and the governments key in a way, so you can verify it's authenticity without being able to trace it? $\endgroup$ Commented Sep 3, 2015 at 13:37
  • 1
    $\begingroup$ If the private keys were distributed randomly, without recording who gets which, and were single use for a particular vote, something like your plan could work. However, it would allow vote selling and coercion, so it doesn't seem like a good idea. $\endgroup$
    – otus
    Commented Sep 3, 2015 at 14:30
  • 1
    $\begingroup$ @MaartenBodewes, I didn't mean randomly distributed in the mathematical sense. Just that key distribution was done in a way that public keys couldn't be connected to users. But like I said there are still problems. $\endgroup$
    – otus
    Commented Sep 4, 2015 at 9:41

1 Answer 1


Yes, it could be done. However, it would work a little different from what you imagine.

The government can create a new blockchain operating under zerocoin rules. The government could then distribute one satoshi per citizen. This distribution could happen for example by letting each citizen visit a government office to present their passport and receive their satoshi. This satoshi on the particular blockchain constitutes permission to vote for this election.

After distributing the satoshis, the government would then announce the candidate parties in the form of zerocoin addresses. Each citizen could then vote for the party of their liking by transferring their satoshi to the account of the party they are voting for.

Finally, when the elections are over, the blockchain can be frozen at a particular block number and each party can reveal their received amount. These amounts can then be compared to elect a winner or counted to receive seats in a parliament.

This scheme satisfies both your stated properties of double-spending prevention and vote secrecy.

However, this is not a good voting scheme, as it has many problems. One important problem is coercion; a citizen can be forced to give away their vote at gunpoint.

  • $\begingroup$ A good way to mitigate this would be to bind the satoshi given to the citizen to a multisig address, with the government's key as the other signature. Then, after physical presence at the polling place, the second signature is given. $\endgroup$ Commented Nov 13, 2015 at 13:03
  • $\begingroup$ So physical presence is required for every election? If that is the case, then why do we need the blockchain at all? $\endgroup$
    – dionyziz
    Commented Nov 14, 2015 at 19:07
  • $\begingroup$ Nice explanation. Even in the regular process, the coercion cannot be ruled out. $\endgroup$
    – AD.Net
    Commented May 31, 2017 at 20:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.