/Juliet

Primary LanguagePythonMIT LicenseMIT

Juliet

An Execution Engine for an Encrypted Processor

Prerequisites

  1. Install TFHE
  2. Update library path if necessary:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TFHE_INSTALL_DIR>/lib
export LIBRARY_PATH=$LIBRARY_PATH:<CUFHE_DIR>/cufhe/bin
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:<CUFHE_DIR>/cufhe/include

Overview

Juliet is a framework for general-purpose computation with Fully Homomorphic Encryption (FHE).

docker build -t juliet .

docker run --rm -i -t juliet bash

Client Setup

  1. Run make client_scripts_cpu for the CPU-based TFHE backend or make client_scripts_gpu for the cuFHE GPU-based backend.
  2. Navigate to the client directory and run ./keygen.out to generate an FHE keypair. The evaluation key needed for FHE operations will be placed in the cloud_enc directory.
  3. Create a file named preAux.txt and load this with cleartext integer inputs (one per line) that represent sensitive data and will serve as sensitive program inputs for Juliet.
  4. Run ./ppscript.sh to automatically generate a ciphertext memory directory, which will be placed in the cloud_enc directory.
  5. Upload the entire cloud_enc directory to the cloud server.

How to cite this work

The Juliet paper can be accessed here; you can cite this work as follows:

@misc{gouert2024Juliet,
    author       = {Charles Gouert and Dimitris Mouris and Nektarios Georgios Tsoutsos},
    title        = {{Juliet: A Configurable Processor for Computing on Encrypted Data}},
    year         = {2024},
    note         = {\url{https://trustworthycomputing.github.io/Juliet/Juliet.2024.pdf}},
}

Trustworthy Computing Group