This is a simple voting application which is designed to ensure secure voter anonymity while preventing fraudulent votes.
Dependencies:
To run, simply execute python main.py
.
This handles the user interaction and encrypts the user's vote before sending it to any other component. It requests voter registration verification from the Election Board and sends a signed, encrypted vote to the Bulletin Board to be counted. A Zero-Knowledge Proof is used to ensure that the correct vote is registered with the Bulletin Board.
The Election Board is responsible for verifying voter registration and signs votes to validate their authenticity. It also takes encrypted results from the Bulletin Board and decrypts them to announce the winner of the election.
The Bulletin Board receives and holds encrypted votes from each voter. Because Paillier encryption is used, the votes can be added together to obtain an encrypted total, which is then sent to the Election Board to be decrypted and revealed.
The application GUI handles each step in the voting process by creating windows containing entries and buttons which keep the user on track until they reach the end of the program where the winner of the election is revealed.