A Blockchain based electronic voting machine for Indian elections
The very essence of blockchain technology lies in its decentralized nature and data immutability. With the controversy regarding the tampering of the Electronic Voting Machines (EVM), this was one project that offered a solution.
This project is not an "online voting system" but instead deals with connecting the voting machines in a blockchain network.
Motivation
-
The election commission of India talks of existing EVMs as "perfect" and "infallible" however no verifiable arguments supported these claims.
-
No cryptography systems built into the system, no information available on the security of the local storage of the existing EVMS.
-
Largely manual technique for voter authentication, this gives way to human errors and allows malpractices to seep in, as is evident.
-
India has been a model country with respect to having a 100% electronic voting process and its high time that these problems be addressed by a new state of the art system.
Process
Primary objectives
-
Data Immutability: The votes once cast, should be immutable i.e there should be no scope of change in the attributes of the vote once it has been cast.
-
Security: The system must be built with iron clad security features.
-
Reliability: The system must be robust enough to continue providing full functionality even in case of anomalies like power failure or network failure.
-
Scalability: The system must be capable enough to handle even national elections that are carried out in a single phase. It must have concurrency control mechanisms to handle large amount of concurrent requests.
prototype and related processes-An overview
System Overview
When we had finalized the architecture of our system at an abstract level it was as depicted by the diagram below. Each EVM (Electronic Voting Machine) would be connected to a blockchain network. Every vote that would be cast on an EVM would be first encrypted, then stored locally and would finally be pushed onto the blockchain. The presiding officers would be able to monitor the network and would be alerted instantaneously of discrepancies, if any.
The Electronic Voting Machine
The components of our EVM as depicted in the figure were:
-
Biometric authentication: With the advent of the Aadhar identification in India, ensuring that only legitimate citizens are able to vote was quite simple. Every voter would be required to authenticate themselves in order to vote. The fingerprint sensor of our system would be responsible for this.
-
Touch-based GUI: We decided to replace the current button-based system with a touchscreen GUI. This had a couple of benefits. The most major being that we no longer relied on the underlying wiring to ensure that each voting button cast a vote to the correct candidate but would instead be dependent on the underlying code. Another positive side effect of this was being able to display the GUI in a particular regional language.
-
Authentication System: THis is a back-end system component that would be responsible for all Aadhar related authentication communications. It would be running inside a Linux system.
-
Blockchain framework: Once a vote has been casted, the blockchain fraework would be responsible for reflecting that onto the shared ledger. This too would be running inside a Linux system.
-
Hardware: For our prototype, we used a Pi Zero that allowed us to develop this system relatively quickly and cheaply.
How would the voting process be?
Voter is verified by the Presiding Officer (PO) of the voting booth
The PO unlocks the EVM
Voter authenticates through biometric identification
Vote is stored in the local memory and recorded on the blockchain
On successful authentication, the voter cast their vote
The prototype and GUIs developed
The EVM 2.0
Screen 1 - The init screen
This was the first screen that one would see when the EVM was switched on
(this prototype was put together by cutting a switchboard, putting a Pi Zero and a power supply into it and mounting the fingerprint sensor and touchscreen over it. It had seen a lot of wear and tear by the time this capture was taken hence the "dirty-white" look)
Screen 2 - Register or Vote
Once the system initialization had completed this was the next screen.
To allow people to experience our prototype there was also a register feature provided that allowed them to store their biometric data which in turn granted them access to the voting screen. In the real world scenario, this screen wouldn't exist.
Screen 2.1 - Registration screen
This was the screen that the user would see if they chose to register. Once the registration was successful, the'd be redirected to Screen 2.
Screen 3 - Presiding Officer verification
Once the voter selects the "Start Voting" option, the Presiding Officer of the voting booth would verify the voter and unlock the EVM.
Screen 4 - Voter verification
Once the Presiding Officer verification is successful, the candidate would be authenticated. This authentication would use the Aadhaar system.
Screen 5 - Candidate list
Once the voter has been verified, they would be presented with the list of candidates they can vote for.
Screen 6 - Voting
The voter votes and confirms their selection.
Screen 7 - Vote confirmation
The voter receives confirmation of the vote
Epilogue
What was my role in the team?
We were a team of 4 people, Each of us were driven and passionate about this project so we hit it off really well. The way we went about distributing the work was:
Blockchain was a foreign concept to us. We were essentially starting from scratch and had 9 months to develop this. Once we had brainstormed and finalized the objectives of our solution, we had to pick a blockchain framework to move forward with.
This was a dilemma, so we decided to split into groups of 2, each group would pick a framework and completely understand and implement a smaller version of our prototype in it. Once that was done, we evaluated each of our results to pick the framework that we felt would suit our needs better and went ahead with the rest of the development.
I worked with Hyperledger Fabric and was responsible for developing the front-end of the voting unit. Hyperledger Fabric uses Go as its programming language so I had to read up and get familiar with it. The GUIs were written from scratch using plain HTML, CSS, and JS. Bootstrap 4 made it easier to get the content organized.
What were the end results of this project?
This project was patented with the Indian Patent Office. It is currently published with the application number: 201821015256 and the documents can be viewed here.
There was also a research paper published which delves into the finer technical details of our system, the paper can be found here.