-
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.
There are also technologies such as BitMessage, that are distributed and trust-less in nature, do not use a blockchain to achieve this goal. We can think of a blockchain as a distributed timestamping mechanism, something that is probably needed for a distributed voting protocol.
I know about the following projects related to disributed voting (all seem to be using blockchains at some level of the protocol).
-
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.
He splits participants into two groups. Posters (voters) and Timestampers. The timestamers will then spend bitcoins on the bitcoin blockchain to validate the votes. A bitcoin address is generated from a hash of the message and the smallest spendable amount of bitcoin (also transaction fee) is sent to that address. This will then be a publically verifyable timestamp.
- Wikipedia - List of proof-of-work functions
- BitMessage wiki - how does BitMessage work?
- BitMessage paper - very readable
- Bitcoin paper
- BitMessage wiki - proof-of-work
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 relies on the actual Bitcoin blockchain through a web API. This both requires users to spend actual money to vote (specifically, timestamp the vote) and it requires trust in a aribrary website (although that part can be written off as an implementation detail).
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 mainly two established protocols 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. BitMessage also does not use a blockchain for timestamping.
-
Why did Borgstrup also use the Bitcoin blockchain?- BitMessage doesn't have a blockchain Is it possible to use the blockchain from a modified BitMessage protocol for timestamps?- Does BitMessage timestamp messages? (If yes - How? If no - Why not?)
- 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 a vote on the blochain (How is is represented) ?
- What sort of proof-of-work suits it?
- Is there any point in having the Voting Authority submit proof-of-work for authenticated addresses/users/voters?
- BitMessage doesn't use a blockchain?
- In BitMessage, do other participants (that can not decrypt the message) validate the messages somehow?
-
Linkable ring signatures
Used in Borgstrup's masters thesis. Explenation given is too mathematical and focuses on his adaptation of them for Elliptic Curves.
-
Commitcoin
Mention in Borgstrup's thesis (p.64 and reference 14)
The traditional way to create new altcoins is to fork the Litecoin project and build off there (multiple tutorials available). That would create a new blockchain. Borgstrup forked and modified the PyBitMessage reference implementation for the voting part.
-
Bitcoin/Litecoin blockchain
Pros: Most mature blockchain implementation.
Cons: Designed aroud the idea of a currency.
-
BitMessage
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. No blockchain.
-
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
A voting protocol 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.
- Only registed voters should be able to cast a vote.
Borgstrup's seems solid. Need to read more though. In short, he proposes to use Linkable ring-signatures (with the public keys of a number of valid voters) to
- Prove that the vote comes from a registered voter.
- The identity of the voter cannot be determined with higer probabiliy than random guessing
- Double votes are easily detectable
As we can see, Borgstrup's approach covers all these points (Although point 3. is not explicitly listed).
Borgstrup explains linkable ring-signatures as
Put shortly, it [Linkable ring-signatures] allows anyone to compose a list, or ring, of identities (i.e., public keys) and sign a message on behalf of the entire ring without revealing which of the identities actually signed the message. In addition to this, the signatures are linkable, which means that two signatures from the same identity can be easily linked, so it is possible to detect if someone in the ring has signed more than one message, but without disclosing the identity of that signer.
When the election finishes, all double votes wil be discared but the vote with the highest timestamp is kept. Thus, a voter can change his vote if they are coerced into voting against their own beliefs (or simply changed their mind). To allow a voter to retract their vote, we simply need to allow for the ballot to be empty.
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.
In a voting blockchain, votes would be mined into blocks, instead of transactions. So a miner would essentally be validating the votes on the fly.
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. This would be an implementation "detail" specific to each country, municipality or election.
Wikipedia defines "proof-of-work" as (note the use of "economic"):
A proof-of-work (POW) system (or protocol, or function) is an economic measure to deter denial of service attacks and other service abuses such as spam on a network by requiring some work from the service requester, usually meaning processing time by a computer.
It is currently unclear to me how nessecary a proof-of-work function is for a non-currency blockchain. Perhaps we can do without one?
We need to look at how a Voting Blockchain can be abused and what the attack vectors are and if a proof-of-work function can be used to make said abuse harder or more costly (in terms of e.g. CPU cycles). I think this is heavily linked to how voters are issued voting addresses.
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 almost all participants will not be able to compute the hash collision, the proof-of-work still gives a guarantee that the blockchain contains correct information. This is because finding the hash collision is basically a race, where multiple participants are hashing the same information. If a dishonest node submits a faked hash collision, this will immediately be detected by other participants because the chain of signatures does not validate and thus new blocks will not be chained to the invalid block.
This is how the Bitcoin paper explains this:
New transactions are broadcast to all nodes.
Each node collects new transactions into a block.
Each node works on finding a difficult proof-of-work for its block.
When a node finds a proof-of-work, it broadcasts the block to all nodes.
Nodes accept the block only if all transactions in it are valid and not already spent.
6)Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash
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.
More information in the BitMessage wiki
- What is the proof-of-work?
- What is the work?
One possible way to structure such a blockchain protocol would be
- A new blockchain is bootstrapped for an election
- A bunch of "coins" are pre-mined for the election
- Users can recieve coins after authenticating themselves as valid voters (should be done as seamlessly as possible)
- To vote, the user spends a coin and attaches the a signed ballot (with a linkable ring-signature) to the transaction. Thus, posting their vote to the public blockchain without revealing who they are. (NOTE: Their IP address is connected to the transaction in the blockchain. What are the implications of this?)
- The voluntary miners (see section above) are running during the election and in regular intervals, mine new voting blocks, thus validating the votes.
- Finish this list