Private Voting
Portfolio
Innovation LabZK

Private Voting

Zero-knowledge proof implementation for fully private, verifiable on-chain voting — accurate vote counts without revealing individual votes.

Proof Generation and Nullifier Derivation

The Private Voting PoC leverages NoirLang's zk-email's noir-jwt library to turn a standard Google login into a privacy-preserving voting credential. On the client side, users sign in with their Google account, generate a JSON Web Token, and employ noir-jwt to construct a zero-knowledge proof that they hold valid Google credentials while deriving a unique "nullifier." This nullifier — computed from secret data only known by Google and the user — ensures that each account can cast exactly one vote without revealing any identifying information. Once generated client-side, the proof and nullifier are submitted to a lightweight backend that verifies the proof and records the ballot, enforcing uniqueness and unlinkability in a single step.

Extensibility and On-Chain Integration

Beyond basic one-vote enforcement, the PoC's modular design allows for easy customization. For example, it can enforce domain-specific eligibility by verifying that an email belongs to a certain domain (e.g., @ratherlabs.com), embed additional attributes (like user role) in the proof, or integrate alternative identity schemes such as zk-passport. For fully decentralized elections, protocols like Semaphore can replace the server backend, enabling on-chain vote submission, public verifiability, and group-membership proofs — all while preserving voter anonymity and preventing double-voting.