Blockchain Voting Protocol


Blockchain Voting Protocol (Working Title) is a protocol that allows for a blind vote to be conducted cryptographically, without the need of a third party to administer the vote.

Blockchain Voting Protocol uses cryptographic principles such as onion routing and RSA to ensure that no party in the vote can personally identify another user's vote, while ensuring all users vote only once. In essence, BVP is akin to everyone placing their votes in a hat, the hat being shaken up, and the votes then being counted publicly.

BVP uses a new procedure known as an Onion Wave in order to prevent packet sniffing. The protocol's security does not rely on secure connections between nodes. In fact, all communications are done as blocks that all nodes have access to.

Protocol Summary

Note: This protocol is in the draft stage. It may be modified at any time, and it has not yet been reviewed.

The first step in the protocol is also the least specific. The people who will be voting must exchange RSA public keys (known as Keyset A) and verify their identites to each other (likely through an existing platform). One node forms the Genesis Block, which serves as the basis for the vote, and contains the public keys of the voters (which each node uses to sign its blocks) as well as the question that is being asked.

Next, each node creates two new temporary RSA keypairs (known as Keyset B and Keyset C) for use specifically in this vote. Each node puts their public key in a block, one after the other, so that all nodes know all public keys.

Next, each node determines its vote. The node then computes the encrypted version of its vote, by encrypting it to each Set C RSA public key in order (encrypting with the first public key, then the second public key, et cetera). Only a person holding all of the Set C RSA keys can undo each layer of decryption and retreive the original vote.

Next, the encrypted vote is onion waved with Keyset B. "Onion Waving" means that it is encrypted to each Set B key after this node, then all Set B keys. This is sent to the next node, which undoes one layer of encryption (only sent once the node receives the "wave" of keys)

The first node receives all of the encrypted votes. All nodes vote to confirm that their vote is in the list, and after that all nodes reveal their Set C private keys.

With all Set C keys in hand, each node can decrypt the encrypted votes, and they have a list of all votes, without knowing which node made each vote.