E-voting is a hard problem. There are three major sub-problems: (with two extras if you use a Bitcoin-based system)
- How do you provide a trustworthy computing environment?
- 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?)
- How do you prevent denial of service attacks against the network being used to send completed ballots, and the network that announces the results?
- (Bitcoin only) Does it scale?
- (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), (2) 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, or a denial of service attack against the DNS servers that introduce new nodes 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
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.
The bottom line is that you shouldn't worry about brute-force attacks. Instead, worry about attacks which are more efficient than brute-force.