/pancake

System that employs frequency smoothing to protect key-value stores from frequency analysis attacks.

Primary LanguageC++

Pancake

Pancake is the first system designed to protect key-value stores from access pattern leakage attacks with small constant factor bandwidth overhead. Pancake uses a new approach, that we call frequency smoothing, to transform plaintext accesses into uniformly distributed encrypted accesses to an encrypted data store.

Table of Contents

Requirements

Building

After installing the requirements run

./build.sh

at the top-level directory.

Download one of our workload traces from s3 and place it into the root of pancake's directory.

aws s3 --no-sign-request cp s3://pancaketranscripts/ycsb-c-1m .

Running

Running Pancake requires at least three machines.

  1. Client with a CLIENT_IP and CLIENT_PORT
  2. Proxy with a PROXY_IP
  3. Redis or Rocksdb backing storage server with STORAGE_SERVER_IP and STORAGE_PORT

To run the benchmark code with a particular:

  • batch size - BATCH_SIZE
  • number of clients - NUM_CLIENTS
  • workload file - WORKLOAD_FILE
  • number of proxy threads - NUM_PROXY_THREADS

First start the storage server

Then start the proxy:

./bin/proxy_server -h <STORAGE_SERVER_IP> -p <STORAGE_PORT> -b <BATCH_SIZE> -t <NUM_PROXY_THREADS> -l <WORKLOAD_FILE>

Pancake will now initialize - it will take longer with larger keysets. After the proxy says it's reachable launch the benchmark code:

./bin/proxy_benchmark -n <NUM_CLIENTS> -h <PROXY_IP> -t <WORKLOAD_FILE>

After completion the benchmark will display the throughput during the run. There will be a new folder in the data folder that contains one file for each client displaying the latency of each operation in nanoseconds.