Electronic voting

Hey folks,

this is peercoin-offtopic but I dont want to post at bitcointalk (that place is just too “busy”) …

I read about electronic voting and fraud recently and “the world of coins and blockchains” popped into my mind immediately. I guess cryptography could help solve all the problems of electronic voting but I cant yet prove it will work.

I spotted an idea that points into the right direction:

So this is just a semi-automatic system. People still need to show up to vote. For a (almost) completely automized system people should have some form of a private key which enables them to vote and also serves as an instrument to check if the vote was counted. the election outcome is thereby documented in a blockchain, its hard to manipulate and if it was manipulated it would be easy to find out and cancel that election.

the most difficult question to me is: how can we stop a person from selling his key/vote?

hope this is an interesting thought experiment and am excited to hear about your ideas :slight_smile:

Interesting thought, have read many ideas on betting, IPOs, contracts etc to add to the blockchain. Many have been implemented either as demo or PoC and some still live only in people’s minds. Nothing about elections though.

Given what I read I think it would certainly possible to use a blockchain for this. After all voting is not much more than a pool with each person having just a stake. I’m assuming a blockchain specifically for voting here:

So if you can invent a blockchain where you just distribute 1 coin / vote to everyone who’s eligible to vote. You won’t allow people to make outgoing transactions except one. The voting address.
Ingoing transactions could only come from a kind of genesis address controlled by an entity which oversees the voting and the issuing of eligible votes. You could use a parameter like coin-age for destroying votes depending on the principles of your voting system. E.g your eligiblity to vote expires after 9 days (or 90 years). Haven’t seen a principle where e.g. the genesis block could revoke a coin/vote based on certain rules. But I don’t see any technical issues which would prevent from building that. The revocation rules have to be very clear and secure and acceptable to all voters. I think that’s the hardest part.
On top of that you need a mechanism where you can provide some metacode (e.g. vote for A, B, C or D) with the transaction back to the only voting address. The transactions into that voting address would be the votes together with the metacode (A,B,C,D). These can be counted by the overseeing entity and are verifiable by each voters (and others assuming public blockchain).

I’m sure that there are ways to use existing blockchains but that would be more complicated as you have to add functionality. That’s why I’m begging Sunny to add ability to add meta blockchains etc. to Peercoin. This would create a whole range of possibilities like your voting system.
How would you stop people from selling (outgoing transactions) in e.g. the Peercoin system? You could just set a rule that if someone does attempt that his vote would be revoked. Technically you would be able to trace a coin/vote from issuer to the voting address checking number of transactions in between issuing and voting. E.g. for Peercoin blockchain, you suggest buying one Peercoin (or equal fractions) from 1 specific address for all your voters and create a wallet where they can submit their transactions to. Valid transaction are only those which originate from the issuing address and comply to the agreed fractions of Peercoin and arrive in the agreed wallet during a certain timeframe. Still need that metacode to find out what people actually voted for (A, B, C or D or whatever coding system you would have)

I’m sure there are other ways to create a voting system, e.g. with multi signatures. Above way is just a way of creating a voting system which I would like. Simple and straightforward for voters, possibly a bit harder to build.

Afterthoughts:

I think just solved the issue with the metacode in the current Peercoin blockchain for your voting system. You don’t need it.
By using multiple wallets and advertising them as such. E.g pay to wallet 1 is voting for option 1, pay to wallet 2 is voting for option 2 (best to use vanity addresses so it’s clear what you vote for)

The only thing you need to built is a blockchain analyser which looks for transactions into those wallets and what are eligible votes (valid source transaction and only one transaction from issuing wallet) as per my previous post. Transactions for voting can be as small as a satoshi, but would attract a 0.01 fee on Peercoin blockchain. So minimal cost of a vote for the voter would at least be 0.010000001 (enough zeros?). The issuer would also attract fees for every voter and minimal a satoshi to issue to each voter. Small catch is that you do need a specific voting wallet as you can’t specify in the current wallet which Peercoin you want to vote with (and it has to be that specific on for this system to work). Hopefully v0.4 will change that.

So who is going to build this based on Hackstutz brilliant idea, the first Peercoin based election system! Anyone good for bounties to get this done?

Such election system can also be used within Peercoin community and you would even be able to play with adding more voting power to Peercoin holders than non-Peercoin holders etc.
The issuing rules for voters and voting power would need to be set. Your imagination is the only boundary ::slight_smile:

Or any flaws in my thoughts?

Edits: grammar, clarifications

Heyho,

thanks for those thoughful replies. I also think its technically possible (in theory) but depending on what one really want, there might be a lot of work to implement this. in a most easy first step it would indeed be ok to distribute some amount of coins (equally or unequally depending on the kind of election one wants to do) and offer addresses for A, B, C, D to send a fixed amount of money to (counting just the payment or if you want “weighted” voting counting the amount that was transferred).

The problem with selling I was thinking about is when this is used for political elections. One could try to buy the private keys of some thousand people that dont care about their vote and manipulate the election in favor of his candidate. In political elections nowadays this is not possible because you need both, an identitiy card and the “election-invitation” and the election helpers will check your face. In a completely digital system its hard to check your real life identity so nothing hinders you from selling your vote. In an extreme case imagine the US buys 51% of Cubas peoples voting-keys to install a pro-US-puppet.
I have a few ideas, but none is really strong. E.g. if there is just a small time window to vote after you received your coins (or the second part of your key). Or you must register an IP-range from where you are going to vote… or the your key is a combination of two things, the private key plus some “private” info which you are not easily willing to give away… something like this… but its not bulletproof as it needs to be for political elections.

actually in the current “physical” voting process you can also sell your vote by promising you are going to vote in favor of some candidate… you can document this with your smartphone camera etc. but these votes might be more expensive to buy…

for non-political stuff however, the existing peercoin concept might actually be sufficent (voting for changes in code of opensource projects, or something else where you cant make money by manipulating the election). proof of stake is perfect for this, in most cases the initiator of the vote could even keep 51% of the stake to ensure the network (like in the peershare concept).

i found this discussion. so this idea has been around for a while i guess…

Yes, it looks like that. Was a good brain exercise though. I’m just surprised that no-one build something like this, just for community voting with relatively low value at stake.
Maybe it is that hard to write code against the blockchain, or people are busy with more interesting stuff.

Reading reddit, I don’t think they solved the problem with selling the private keys. As you said two-factor authentication with something valuable would work (biometrics, expensive tokens).

Working out expensive tokens a bit further. You might not need a separate token. If you load a up a voter with say $100 from the same issuing address and you would check that one can only vote as long as that original $100 is there (check address source) most people won’t be too keen to give away their vote (private key) AND $100. A government can easily handout such amounts to their citizens (tax return) as long as they are paying taxes. They would save a lot of money on old-fashioned voting systems etc. The $100 is an example. What is the right price of a vote? Buying votes and fraud is always happening to some extent. Depending on what is at stake one should adjust the ‘value’ of the vote.
I guess the above is what your meant with a small window to vote.

Another token would be an electronic identity of some kind which is used for other important means, but that could make voting quickly less anonymous.