<p>E-voting is a hard problem. There are three major sub-problems: (with two extras if you use a Bitcoin-based system)</p>
<ol>
<li>How do you provide a trustworthy computing environment?</li>
<li>How do you distribute voting keys to voters? (Or, how does the government get an accurate list of keys that belong to real voters, with no duplicates?)</li>
<li>How do you prevent denial of service attacks against the network being used to send completed ballots, and the network that announces the results?</li>
<li>(Bitcoin only) Does it scale?</li>
<li>(Bitcoin only) What's the preference of the hashpower majority?</li>
</ol>
<p>Actually <em>counting the vote</em> is a comparatively simple problem.</p>
<h3>Trustworthy Computing Environment</h3>
<p>Most people's computers are not very secure. Depending on who you ask, between 30%-48% <a href="https://web.archive.org/web/20121205051648/http://press.pandasecurity.com/wp-content/uploads/2012/08/Quarterly-Report-PandaLabs-April-June-2012.pdf" rel="nofollow noreferrer">(1)</a>, <a href="http://docs.apwg.org/reports/apwg_report_Q3_2009.pdf" rel="nofollow noreferrer">(2)</a> of computers are infected with some kind of malware.</p>
<p>If there's some kind of malware on a computer, how do you prevent it from altering the vote before it's signed and sent out?</p>
<p>As far as I can tell, the linked whitepaper doesn't address this.</p>
<h3>Getting Keys to Voters</h3>
<p>I don't think this part is any more difficult than distributing absentee ballots.</p>
<p>You keep a list of voters along with contact information and addresses. If there's a question about whether two people are the same, or whether a person exists, or whether a person is qualified to vote, you use a series of gradually more expensive identity verification methods.</p>
<h3>Denial of Service</h3>
<p>Some of the people who tamper with an election do so to alter the result. However, some people are satisfied with preventing the election from completing, or calling the results of the election into question. This could be something like <a href="https://en.wikipedia.org/wiki/BGP_hijacking" rel="nofollow noreferrer">BGP hijacking</a>, or a <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" rel="nofollow noreferrer">denial of service</a> attack against the DNS servers that <a href="https://bitcoin.stackexchange.com/questions/3536/how-do-bitcoin-clients-find-each-other">introduce new nodes</a> into the network. Or, as a more targeted option, find a list of people who are likely to vote for Candidate A based on what Facebook groups they're a member of, then send a denial of service attack to their home internet connections.</p>
<h3>(Bitcoin only) Scale</h3>
<p>Let's do some back of the envelope math. You need to count 150 million votes. A bitcoin transaction takes about 200 bytes per vote. Multiply those two numbers. That's 30 GB. Bitcoin has a block size limit of 1-4MB, meaning that a day of blocks can contain 600 MB at most. Even if you make some very optimistic assumptions, it's an order of magnitude too small.</p>
<p>This implies that you need something more efficient than 'broadcast all votes to everybody.'</p>
<p>The whitepaper suggests using simplified payment verification, but since Counterparty rules are not consensus rules, an invalid Counterparty transaction can be included in a block without making that block invalid. Therefore, even if every miner is honest, SPV cannot be trusted.</p>
<h3>(Bitcoin only) Hashpower preference</h3>
<p>What happens if a majority of hashpower have a preference for who should win the election, and they decide to rig the election in that person's favor?</p>
<p>Well, they can. They can exclude any opposition votes from their blocks, and refuse to build on blocks that contain opposition votes. It's not clear how you could punish them for doing this, or that it's even illegal.</p>
<p>If that's too overt for your tastes, you could exclude opposition votes from blocks you mine, but still build on the longest chain. This doesn't even require a majority of hashpower, but it could still change the final tally.</p>
<hr />
<h3>Things that aren't problems</h3>
<ol>
<li><p>Brute force attacks</p>
<p>There are certain physical limits about how efficient computers can be. There is also a limited (but very big) amount of energy in the universe. Therefore, there's also a limit on the number of bruteforce attacks you can attempt, which is smaller than the number of keys in a 256 bit keyspace. There's a more detailed version of this argument <a href="https://crypto.stackexchange.com/a/1160/6705">here</a>.</p>
<p>The bottom line is that you shouldn't worry about brute-force attacks. Instead, worry about attacks which are more efficient than brute-force.</p>
</li>
</ol>

CC BY-SA 3.0
2017-12-20T20:52:13.080Z
One of the hardest problems in electronic voting is making it impossible for people to prove what they voted for. This may sound contradictory, but it's essential to avoid vote buying (if you can't prove who you voted for, you can't be paid based on it). Any system that relies on publishing the votes (blockchains are about publishing) very fundamentally undermines that.
Pieter Wuille
CC BY-SA 4.0
2020-06-29T15:42:31.650Z
@PieterWuille: And you also need to prevent that voters can allow someone to cast the vote in their stead: otherwise they just sell the ballot.
Murch
CC BY-SA 4.0
2020-06-29T16:05:53.480Z
@PieterWuille this seems to be less important than being able to prove (at least to yourself) that your vote has been counted correctly. Especially, since any such protection is worked around by "delegating" the voting itself, as Murch mentions.
Dan M.
CC BY-SA 3.0
2017-12-20T20:47:20.247Z
2017-12-20T20:47:20.247Z
2020-06-16T11:10:03.350Z
Nick ODell
<p>I have seen in some videos and blogs that Blockchain can be used in our election voting system for example <a href="https://www.thebalance.com/how-the-blockchain-will-change-how-we-vote-4012008" rel="nofollow noreferrer">here</a>:</p>

<blockquote>
  <p>Another company working on creating a platform that uses Blockchain
  technology to replace and/or enhance the current voting methods used
  today is BitCongress, which released a White Paper on its approach.</p>
  
  <p>The company uses the Blockchain technology with a token based system
  to control the voting system ensuring one person, one “unchangeable”
  vote.</p>
  
  <p>This token is called a VOTE and by using the blockchain to permanently
  record each vote, it ensures that there can be no manipulation of
  those votes or voting twice</p>
</blockquote>

<p>As far as I understand it, the company would assure that each person that is allowed to vote gets a unique token and can only vote once. </p>

<p>Then each block of the blockchain contains the information for which party one voted and the unique token. But I don't understand the following:</p>

<ul>
<li>If there is a company who assigns each user a unique token, then how can I possibly check if the token actually belongs to a human?</li>
<li>How can we check that the company does'nt create some fake tokens that do not belong to a user?</li>
<li>How can we prevent a Brut force attack that someone just tries billions of possible tokens to make their vote?</li>
</ul>

CC BY-SA 3.0
2017-12-20T17:25:52.037Z
Have you actually read the white paper in question?
Nate Eldredge
CC BY-SA 3.0
2017-12-20T17:27:29.830Z
For the last part, presumably it's the usual thing in cryptography: make the key space bigger.  If there are 10^100 possible keys, then trying "billions" (10^9) has a negligible chance of hitting a valid one.
Nate Eldredge
<blockchain><voting>
How can Blockchain help to vote?
Adam
# How can Blockchain help to vote?

(Asked by: username_0 on 2017-12-20)

I have seen in some videos and blogs that Blockchain can be used in our election voting system for example [here](https://www.thebalance.com/how-the-blockchain-will-change-how-we-vote-4012008):

> Another company working on creating a platform that uses Blockchain
> technology to replace and/or enhance the current voting methods used
> today is BitCongress, which released a White Paper on its approach.
>
> The company uses the Blockchain technology with a token based system
> to control the voting system ensuring one person, one “unchangeable”
> vote.
>
> This token is called a VOTE and by using the blockchain to permanently
> record each vote, it ensures that there can be no manipulation of
> those votes or voting twice

As far as I understand it, the company would assure that each person that is allowed to vote gets a unique token and can only vote once.

Then each block of the blockchain contains the information for which party one voted and the unique token. But I don't understand the following:

* If there is a company who assigns each user a unique token, then how can I possibly check if the token actually belongs to a human?
* How can we check that the company does'nt create some fake tokens that do not belong to a user?
* How can we prevent a Brut force attack that someone just tries billions of possible tokens to make their vote?

**Tags:** blockchain, voting

> **Comments:**
> **username_1**: Have you actually read the white paper in question?  
> **username_1**: For the last part, presumably it's the usual thing in cryptography: make the key space bigger.  If there are 10^100 possible keys, then trying "billions" (10^9) has a negligible chance of hitting a valid one.  

---

## 1 answers

### Answer by username_2 on 2017-12-20. Score: 2

E-voting is a hard problem. There are three major sub-problems: (with two extras if you use a Bitcoin-based system)

1. How do you provide a trustworthy computing environment?
2. How do you distribute voting keys to voters? (Or, how does the government get an accurate list of keys that belong to real voters, with no duplicates?)
3. How do you prevent denial of service attacks against the network being used to send completed ballots, and the network that announces the results?
4. (Bitcoin only) Does it scale?
5. (Bitcoin only) What's the preference of the hashpower majority?

Actually *counting the vote* is a comparatively simple problem.

### Trustworthy Computing Environment

Most people's computers are not very secure. Depending on who you ask, between 30%-48% [(1)](https://web.archive.org/web/20121205051648/http://press.pandasecurity.com/wp-content/uploads/2012/08/Quarterly-Report-PandaLabs-April-June-2012.pdf), [(2)](http://docs.apwg.org/reports/apwg_report_Q3_2009.pdf) of computers are infected with some kind of malware.

If there's some kind of malware on a computer, how do you prevent it from altering the vote before it's signed and sent out?

As far as I can tell, the linked whitepaper doesn't address this.

### Getting Keys to Voters

I don't think this part is any more difficult than distributing absentee ballots.

You keep a list of voters along with contact information and addresses. If there's a question about whether two people are the same, or whether a person exists, or whether a person is qualified to vote, you use a series of gradually more expensive identity verification methods.

### Denial of Service

Some of the people who tamper with an election do so to alter the result. However, some people are satisfied with preventing the election from completing, or calling the results of the election into question. This could be something like [BGP hijacking](https://en.wikipedia.org/wiki/BGP_hijacking), or a [denial of service](https://en.wikipedia.org/wiki/Denial-of-service_attack) attack against the DNS servers that [introduce new nodes](https://bitcoin.stackexchange.com/questions/3536/how-do-bitcoin-clients-find-each-other) into the network. Or, as a more targeted option, find a list of people who are likely to vote for Candidate A based on what Facebook groups they're a member of, then send a denial of service attack to their home internet connections.

### (Bitcoin only) Scale

Let's do some back of the envelope math. You need to count 150 million votes. A bitcoin transaction takes about 200 bytes per vote. Multiply those two numbers. That's 30 GB. Bitcoin has a block size limit of 1-4MB, meaning that a day of blocks can contain 600 MB at most. Even if you make some very optimistic assumptions, it's an order of magnitude too small.

This implies that you need something more efficient than 'broadcast all votes to everybody.'

The whitepaper suggests using simplified payment verification, but since Counterparty rules are not consensus rules, an invalid Counterparty transaction can be included in a block without making that block invalid. Therefore, even if every miner is honest, SPV cannot be trusted.

### (Bitcoin only) Hashpower preference

What happens if a majority of hashpower have a preference for who should win the election, and they decide to rig the election in that person's favor?

Well, they can. They can exclude any opposition votes from their blocks, and refuse to build on blocks that contain opposition votes. It's not clear how you could punish them for doing this, or that it's even illegal.

If that's too overt for your tastes, you could exclude opposition votes from blocks you mine, but still build on the longest chain. This doesn't even require a majority of hashpower, but it could still change the final tally.

---

### Things that aren't problems

1. Brute force attacks

   There are certain physical limits about how efficient computers can be. There is also a limited (but very big) amount of energy in the universe. Therefore, there's also a limit on the number of bruteforce attacks you can attempt, which is smaller than the number of keys in a 256 bit keyspace. There's a more detailed version of this argument [here](https://crypto.stackexchange.com/a/1160/6705).

   The bottom line is that you shouldn't worry about brute-force attacks. Instead, worry about attacks which are more efficient than brute-force.

> **Comments:**
> **username_3**: One of the hardest problems in electronic voting is making it impossible for people to prove what they voted for. This may sound contradictory, but it's essential to avoid vote buying (if you can't prove who you voted for, you can't be paid based on it). Any system that relies on publishing the votes (blockchains are about publishing) very fundamentally undermines that.  
> **username_4**: @username_3: And you also need to prevent that voters can allow someone to cast the vote in their stead: otherwise they just sell the ballot.  
> **username_5**: @username_3 this seems to be less important than being able to prove (at least to yourself) that your vote has been counted correctly. Especially, since any such protection is worked around by "delegating" the voting itself, as username_4 mentions.  

---

