/zkCNN

A GKR-based zero-knowledge proof protocol for CNN model inference.

Primary LanguageC++MIT LicenseMIT

zkCNN

Introduction

This is the implementation of this paper, which is a GKR-based zero-knowledge proof for CNN reference, containing some common CNN models such as LeNet5, vgg11 and vgg16.

Requirement

  • C++14
  • cmake >= 3.10
  • GMP library

Input Format

The input has two part which are data and weight in the matrix.

Data Part

This part is the picture data, a vector reshaped from its original matrix by

formula1

where formula2 is the number of channel, formula3 is the height, formula4 is the width.

Weight Part

This part is the set of parameters in the neural network, which contains

  • convolution kernel of size formula10

    where formula11 and formula12 are the number of output and input channels, formula13 is the sideness of the kernel (here we only support square kernel).

  • convolution bias of size formula16.

  • fully-connected kernel of size formula14.

  • fully-connected bias of size formula15.

Experiment Script

Clone the repo

To run the code, make sure you clone with

git clone --recurse-submodules git@github.com:TAMUCrypto/zkCNN.git

since the polynomial commitment is included as a submodule.

Run a demo of LeNet5

The script to run LeNet5 model (please run the script in script/ directory).

./demo_lenet.sh
  • The input data is in data/lenet5.mnist.relu.max/.
  • The experiment evaluation is output/single/demo-result-lenet5.txt.
  • The inference result is output/single/lenet5.mnist.relu.max-1-infer.csv.

Run a demo of vgg11

The script to run vgg11 model (please run the script in script/ directory).

./demo_vgg.sh
  • The input data is in data/vgg11/.
  • The experiment evaluation is output/single/demo-result.txt.
  • The inference result is output/single/vgg11.cifar.relu-1-infer.csv.

Polynomial Commitment

Here we implement a hyrax polynomial commitment based on BLS12-381 elliptic curve. It is a submodule and someone who is interested can refer to this repo hyrax-bls12-381.

Reference