-
Notifications
You must be signed in to change notification settings - Fork 6
idea Blockchain voting
Using a Blockchain for voting seems like the perfect solution. It's distributed, every action/transaction has to be validated by the peers and it's open. I think it is possible to leverate the blockchain technology to create a trusted voting system.
I know about the following projects related to voting with blockchains.
-
State on their front page that they use blockchains but I cannot find this in their code. I think it is in the infant stages and has not been implemented yet.
-
Your Priorities/Dyne.org
Also in infant stages. Dyne.org will probably implement a solution for Your Priorities that is based on FreeCoin.
-
Jesper Borgstrup - Private, trustless and decentralized message consensus and voting schemes
M.Sc. thesis by a danish university student. Uses a modified BitMessage protocol to post the votes to a "shared bulletin board", but uses Bitcoin (through www.blockr.io web api) to post timestamp messages on the bitcoin blockchain
- Wikipedia - List of proof-of-work functions
- BitMessage wiki - how does BitMessage work?
- BitMessage paper - very readable
- Bitcoin paper
The approach by Borgstrup has a full implementation on github and should be considered the most complete (of the ones I know about). However, it has one shortcoming: it does not rely on it's own modified BitMessage blockchain.
The idea is that before an election, a voting blockchain could be bootstrapped. The same blockchain might be used for multiple elections, or a new blockchain can be used.
There are two blockchain implementations to consider. First the original Bitcoin blockchain (as described in the Bitcoin paper or the BitMessage variation. With the BitMessage variation, messages are only kept for a certain amount of time before being discarded -- which suits an election perfectly. The votes can be archived, either by the voting authority or the community, by other means. Unclear weather this gives an advantage or not.
- Why did Borgstrup also use the Bitcoin blockchain?
- Is it possible to use the blockchain from a modified BitMessage protocol for timestamps?
- Is an economic incentive really needed for voting?
- Is an incentive needed at all or is a non-economic incentive needed/useful?
- What would be the proof-of-work function?
- Are there any benefits to making it hard for the Voting Authority to authorize users/addresses?
- How can a Voting Authority authorize a user and guaranteeing that it does not link the user to their ballot/address or other identifying parts of information?
What is needed first is a blockchain implementation. The traditional way to create new altcoins is to fork the Litecoin project and build off there (multiple tutorials available). Borgstrup forked the PyBitMessage reference implementation.
-
Bitcoin/Litecoin blockchain
Pros: Most mature blockchain implementation.
Cons: Designed aroud the idea of a currency.
-
BitMessage blockchain
Pros: Not designed around the idea of a "currency". Messages are only kept for a certain amount of time.
Cons: Messages kept for a certain amount of time.
-
Independent/own blockchain implementation
Pros: Could be used in other projects (CertChain?), will not be designed around the idea of a currency.
Cons: Crypto is hard, high likelyhood of mistakes. Timeconsuming without concentrating on the core idea of a voting system.
Blockchains are agnostic as to which sort of transactions they carry, although almost all implementations are designed for some sort of currency.
A "minimum viable blockchain" is excatly what the name says; a blockchain without a "currency layer". This seems to be a relatively new term and not much as been written about it. See the following links:
- A minimum viable blockchain implementation in Go
- The article on Minimum Viable Blockchains
- Minimum viable blockchain - Reddit: Not much info.
- Minimum viable blokchain - Hacker news: Very good info
Borgstrup's seems solid. Need to read more though.
Needs to have the following properties
- A vote cannot be linked with it's voter with a better probability than random guessing. (anonimity)
- A voter must be able to change his vote. (coercion-resistence)
- A vote cannot be disupted, or disputes must be easily solved.
The blockchain was designed for Bitcoin, a currency. There are three kinds of participants in the network
- Half-nodes that post transactions for miners to pick up.
- Miners, they generate the blocks
- Full nodes that are relaying transactions and validating blocks.
When miners create new blocks, they get a monetary block reward (25 BTC currently). This economic incentive is seen as both useful and needed for Bitcoin, otherwise there would be no miners to generate new blocks.
But with a Voting-blockchain, economic incentives aren't possible in the same way. But a Voting System has a lot of differences compared to be a Currency system. For starters, Elections span a few days but a currency has to always be available.
Thus, miners in a voting blockchain will probably be motivated by something other than money. They might do it for idelogical reasons, e.g. because they believe in a public and open voting system. Parties in the election would probably also be motivated to run miners. Media organizations, free software organizations and educational institutions also come to mind as potential miners.
In a general parliametary election in Iceland, only Icelandic citizen should be able to vote. Then authentication can possibly happen on two levels;
- Authenticate the user before they cast their vote.
- Everybody can vote, but each vote must be validated before being counted.
In iceland, we have multiple schemes to authenticate icelanders. Íslandslykill and digital certificates issued by Auðkenni. There also is Íslandsrót, but it hasn't signed anything beyond the itermediary certs of Auðkenni.
Other schemes apply to other voting domains as appropriate.
The Bitcoin blockchain requires proof-of-work from participants in the network (partially colliding hash) to proove spent CPU cycles of miners to form new blocks. Since the proof-of-work is a hash, it proves that the particiant has seen the transactions that it claims. If the participant finds a hash collision of the required length (the difficulty in the network), it forms a block and reaps the block reward.
Even if a participant does not compute a hash collision, the proof-of-work still proves that the included transactions were seen like that by the client. The power of the proof comes from many participants hashing the same transactions, thereby confirming what they saw. (Need to read up on this a little better)
The BitMessage protocol requires a proof-of-work to SEND a message. The proof-of-work is adjusted with a difficulty (like in Bitcoin), with the aim of taking about 4 minutes to complete on an average computer. BitMessage also utilizes partial hash collisions (adjusted to the difficulty) as proof-of-work. The BitMessage paper is not clear on the purpose for the proof-of-work, but supposedly it is mean to make sending spam or other unsolicited messages hard/costly.
- What is a vote on the blockchain?
- What is the proof-of-work?
- What is the work?