gRPC client/server for zero-knowledge proof authentication
Chaum Pederson Zero-Knowledge Proof in Rust. Chaum Pederson is a zero-knowledge proof protocol that allows a prover to prove to a verifier that they know a discrete logarithm without revealing the discrete logarithm. This is useful for authentication, where the prover can prove to the verifier that they know a secret without revealing the secret.
In zero-knowledge proof authentication, the prover and verifier are both clients of a server. The server has a public key and a private key. The prover knows the private key and the verifier knows the public key. The prover wants to prove to the verifier that they know the private key without revealing the private key. The verifier wants to verify that the prover knows the private key without learning the private key.
Usage
You can run the program with Docker. First build the containers:
$ docker-compose build zkpserver
Run the container:
$ docker-compose run --rm zkpserver
In the remote terminal that appears run the server:
root@e84736012f9a:/zkp-server# cargo run --bin server --release
Open a new terminal on your machine and connect to the container:
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e84736012f9a zkp-course-zkpserver "bash" 20 minutes ago Up 20 minutes zkp-course_zkpserver_run_b1f3fa2cd94a
$ docker exec -it e84736012f9a /bin/bash
Run the client:
root@e84736012f9a:/zkp-server# cargo run --bin client --release