A novel scalable ZK proof framework for non-linear mathematical functions in machine learning based on LUT techniques. We carefully design several important building blocks, including digital decomposition, comparison, and truncation, such that they can effectively utilize table lookup with a quite small table size while ensuring the soundness of proofs. Based on these building blocks, we implement complex mathematical operations and further construct ZK proofs for current mainstream non-linear functions in ML such as ReLU, sigmoid, and normalization.
Contents
This repository consists of the following parts:
src: Implementations for our ZKP protocols.
test: Test script for performance evaluation.
Installation
NOTE: Our implementation is built based on emp-zk and a complete compilation process is required.
For any issues occurred during step 1, please refer to emp-zk troubleshooting.
Scalable Zero-knowledge Proofs for Non-linear Functions in Machine Learning
Source code and the implementation of the USENIX Security’24 paper - Scalable Zero-knowledge Proofs for Non-linear Functions in Machine Learning.
Introduction
A novel scalable ZK proof framework for non-linear mathematical functions in machine learning based on LUT techniques. We carefully design several important building blocks, including digital decomposition, comparison, and truncation, such that they can effectively utilize table lookup with a quite small table size while ensuring the soundness of proofs. Based on these building blocks, we implement complex mathematical operations and further construct ZK proofs for current mainstream non-linear functions in ML such as ReLU, sigmoid, and normalization.
Contents
This repository consists of the following parts:
Installation
NOTE: Our implementation is built based on emp-zk and a complete compilation process is required. For any issues occurred during step 1, please refer to emp-zk troubleshooting.
Usage
Testing on localhost
./run ./bin/[binary]Testing on two
Change the IP address in the test code, or use
tmuxcommand to initialize another terminalrun
./bin/[binary] 1 [port]on one machine andrun
./bin/[binary] 2 [port]on the other machine.Disclaimer
This repository is a proof-of-concept prototype.