This framework allows executing homomorphically encrypted programs based on the BGV scheme implementation in Micorsoft SEAL and verifying the computation using Rinocchio ZKP protocol.
The PEEV article that describes this work can be cited as follows:
@article{ahmed2023verifiableFHE,
author = {Ahmed, Omar and Gouert, Charles and Georgios Tsoutsos, Nektarios},
journal = {IEEE Access},
title = {PEEV: Parse Encrypt Execute Verify - A Verifiable FHE Framework},
year = {2024},
volume = {12},
number = {},
pages = {94673-94689},
note = {\url{https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=10587231}}
}
- opl - a directory includes the OpL files that are used to create the arithmetic circuit executed in PEEV. The OpL is created by parsing CirC programs using YAP.
- Driver.cpp - for reading the
.opl
file and executing the arithmetic circuit. This used for executing most of the benchmarks provided with the following parameters' values:- BGV ploynomial modulus degree =
$2^{14}$ - ZKP plaintext bit size =
$30$ bits - SEAL plaintext bit size =
$30$ bits
- BGV ploynomial modulus degree =
- Driver_eq_check.cpp - has different parameters set for executing programs that involve equality check (e.g., hamming distance) and doesn't use batching. It has the following parameters' values:
- BGV ploynomial modulus degree =
$2^{15}$ - ZKP plaintext bit size =
$20$ bits - SEAL plaintext modulus value =
$13$ bits. Notice that this the value of the plaintext modulus, not its size.
- BGV ploynomial modulus degree =
- Driver_larger_params.cpp - this has another parameters used for executing the factorial program. It has the following parameters' values:
- BGV ploynomial modulus degree =
$2^{15}$ - ZKP plaintext bit size =
$30$ bits - SEAL plaintext bit size =
$30$ bits
- BGV ploynomial modulus degree =
- Driver_larger_ptxt.cpp - provides a plaintext bit size of 42 bits for Rinocchio and SEAL.
- BGV ploynomial modulus degree =
$2^{15}$ - ZKP plaintext bit size =
$42$ bits - SEAL plaintext bit size =
$42$ bits
- BGV ploynomial modulus degree =
git https://github.com/TrustworthyComputing/PEEV-verifiableFHE/
cd PEEV
mkdir build && cd build && cmake ..
cd .. && cmake --build build --config RELEASE
Navigate to binary path (on Windows, it is on the build/Release directory), open the cmd, execute <program.exe> -f <file.opl>
. For example,
vppc.exe -f dot_product_v8.opl
.
- vppc.exe is the executable of Driver.cpp
- vppc2.exe is the executable of Driver_eq_check.cpp
- vppc3.exe is the executable of Driver_larger_params.cpp
- vppc4.exe is the executable of Driver_larger_ptxt.cpp
The project needs Boost library.
This a proof-of-concept implementation for research purposes. It is not ready for deployment in critical and production systems.
This work was supported by the National Science Foundation (Award #2239334).