How blockchain voting can be completely bribe-resistant

How blockchain voting can be completely bribe-resistant

Make sure you know bits and pieces of blockchain, zero knowledge proofs

In offline voting systems, if you bribe a person about voting for party A, you don’t get the choice to verify if the person voted for party A or not. But if the person is casting the vote on chain, anyone can publicly see the party you have voted for as it is decentralized. To eliminate this collusion, the concept of MACI (Minimal Anti Collusion Infrastructure) keys were introduced

Voting Systems

I know many of you might think that knowing about voting systems makes no sense, but I would request you to just go through it once again

In-person voting systems

In short, it's hard to know for sure how current voting systems operate. Governments and corporations spend lots of resources on their systems and processes in an attempt to ensure their integrity, but ultimately neither the systems nor the processes are fully auditable, so we must trust that these security properties are being enforced.

In-person
Correct execution🤷‍♂️
Censorship resistance🤷‍♂️
Privacy🤷‍♂️
Collusion resistance🤷‍♂️

Blockchain voting systems

Blockchains offer two main features: correct execution and censorship resistance. They process user transactions based on set rules, ensuring no changes to these rules. Anyone can send a transaction if they pay the required fee.

However, blockchain voting has issues. Ethereum, like most blockchains, is transparent, meaning all transaction data is public. This lack of privacy makes bribery easy, as voters can show proof of their vote. Bribery can even be automated with smart contracts, making collusion easy.

In-personEthereum
Correct execution🤷‍♂️
Censorship resistance🤷‍♂️
Privacy🤷‍♂️
Collusion resistance🤷‍♂️

Blockchain voting systems (with ZKPs)

Zero-knowledge proofs (ZKPs) allow private voting on blockchains like Ethereum while keeping results public and verifiable. Votes are counted off-chain, but ZKPs ensure they are accurate without showing individual votes.

In-personEthereumEthereum w/ ZK
Correct execution🤷‍♂️
Censorship resistance🤷‍♂️
Privacy🤷‍♂️
Collusion resistance🤷‍♂️

WTF is MACI?

MACI stands for Minimal Anti Collusion Infrastructure. As the full form suggests, it is an anti-collusion infrastructure made so that on chain voting can be reliable, private while also being censorship resistant. It leverages zk-SNARKs technology to achieve this

Workflow of the entire voting cycle with MACI

There is a detailed article about the workflow on the official MACI docs. I’ll just summarize everything in short

In the voting system, there are 2 parties that are being involved:

  1. The User: Who casts the vote

  2. The Coordinator: Who verifies and publishes the final results of the vote based on the users choices

    We will always assume that the coordinator is not corrupted

After the poll starts this is what users will have to do to create their vote

Signing Up

Before casting the vote, users will have to generate a public, private keypair which will act as their anonymous identity as the voter. The user will make a function call to the signUp() function of the maci smart contract and register their generated public key as the voter

Casting the Vote

Casting the vote involves a few steps

  • Command Creation: The user bundles their vote information (public key, vote option, amount, etc.) into a command.

  • Signing: The user signs this command using their private key (from signup) to prove their identity.

After signing the message, comes the part of encryption:

  • A unique shared key exists between each user and the coordinator

  • The user encrypts both the command and signature together into a message

  • This encryption prevents bribers from seeing vote choices in transaction data

Once the encryption is done, the encrypted message can then securely be passed to the contract where it is verified and stored.

VOTE ENDS

A Poll is "closed", when the voting period ends. At this point, no users may submit any more votes. The Poll remains closed until the coordinator tallies the final results.

At this point, the coordinator must process all the messages, tally the results, and publish the proofs on-chain

Hmm.. How did it resist collusion?

Ever wondered how MACI makes vote buying impossible? At its core, MACI uses a clever system of encrypted messages and shared keys. Think of each vote as a letter sealed with special ink – only the voter and the vote counter have the unique ink formula to read it. Even if someone tries to buy votes, they're out of luck. Why? Because even if a voter shows them their voting transaction on the blockchain, all they'll see is encrypted data – like trying to read a letter written in invisible ink without the decoder.

But here's where it gets interesting. Voters can change their votes as many times as they want, and only their last vote counts. Imagine trying to buy someone's vote when they can simply vote again later, completely nullifying their "sold" vote. And the best part? There's absolutely no way to prove if or when someone changed their vote.

The vote counter (called the coordinator) can see and count the votes, but they have to provide mathematical proof that they counted everything correctly. It's like having a referee who has to show their work, making it impossible to fudge the numbers. This creates a perfect balance: complete privacy for individual votes, but total transparency for the final count.

The result? A voting system where even if voters wanted to sell their votes, they simply couldn't prove how they voted. It's like trying to sell a secret when you can't prove you know it – mathematically impossible.

The End

This article is intended to provide you an overview of how BLOCKCHAIN VOTINGS ARE COLLUSION RESISTANT it doesn’t go into the depth of how MACI keys work. If you want to know everything in depth, then refer to the official docs of MACI