Zero-knowledge voting based on Semaphore
zkVote is based on Semaphore which is introduced by barryWhiteHat as a method of zero-knowledge signaling - a method for an approved user to broadcast an arbitrary string without exposing their identity. Semaphorejs is an implementation of an upgraded version of the concept, including the zero-knowledge circuits and web side. This repo is copied from semaphorejs but remove the smart contract part, it’s replaced by golang client. We use semaphore as base to achieve private-voting.
The project is separated into two parts, one is implemented in plain Node.JS and uses circom for the zero-knowledge proofs.The other is implemented in Golang for verification of zero-knowledge proofs and p2p network.
Implemented in semaphorejs/cricom.
The statement assures that given public inputs:
and private inputs:
Semaphore uses a few cryptographic primitives provided by circomlib:
Note: MiMCHash, and especially the specific paramteres used in the circuit, have not been heavily audited yet by the cryptography community. Additionally, the circuit and code should also receive further review before relying on it for production applications.