Private Voting
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




