Skip to content
Snippets Groups Projects
Select Git revision
2 results Searching

Project-Code

  • Clone with SSH
  • Clone with HTTPS
  • Dmytro Bogatov's avatar
    Dmytro Bogatov authored
    Resolve "Remove user-supplied values"
    
    Closes #59
    
    See merge request !51
    7de75594
    History

    ORE Schemes Simulator

    The paper is submitted to VLDB. See technical report on eprint.

    George Kollios and Dmytro Bogatov were supported by an NSF SaTC Frontier Award CNS-1414119. Leonid Reyzin was supported in part by NSF grant 1422965.

    Abstract

    Database operations over encrypted data has received a lot of attention recently due to increasing security concerns for many database applications. One of the most promising approaches to perform database queries over encrypted data is to use specialized encryption schemes. Order Preserving Encryption (OPE) and Order Revealing Encryption (ORE) schemes are examples of encryption schemes that trade security for performance and fit very well database systems approaches. However, until now, there is no clear comparison between the different schemes and protocols that have been proposed in this area. In this paper, we present the first comprehensive comparison among a number of important OPE and ORE schemes using a new framework that we implemented from scratch. We analyze and compare the schemes and protocols both theoretically and experimentally in a unified setting. Our comparison reveals some interesting results concerning the relative security and performance of these schemes and protocols. Furthermore, we propose a number of improvements for some of these schemes and provide a number of suggestions and recommendation that will be valuable to database system designers and practitioners.

    Analyzed schemes and protocols

    We have generated synthetic (uniform and normal distributions) and real (CA public employees salaries) datasets.

    The canonical project repository is here.

    Instructions

    To run the tool on your data (or our test data)

    Either compile the code (see below), or use this docker image dbogatov/ore-benchmark. Here are the few examples (for docker-based approach):

    # note that you could simply start an interactive shell session by
    docker run -it dbogatov/ore-benchmark
    
    # to examine arguments and option for the tool
    docker run dbogatov/ore-benchmark /bin/sh -c "dotnet ./cli.dll --help"
    # or see help for specific commands
    docker run dbogatov/ore-benchmark /bin/sh -c "dotnet ./cli.dll scheme --help"
    docker run dbogatov/ore-benchmark /bin/sh -c "dotnet ./cli.dll protocol --help"
    
    # to see our supplied data
    docker run dbogatov/ore-benchmark /bin/sh -c "tree ./data"
    
    # to run simple scheme simulation (e.g. CLWW) on supplied data set
    docker run dbogatov/ore-benchmark /bin/sh -c "dotnet ./cli.dll --dataset ./data/uniform/data.txt -v --ore-scheme practicalore scheme"
    
    # to run simple protocol simulation (e.g. POPE) on supplied data and query sets
    docker run dbogatov/ore-benchmark /bin/sh -c "dotnet ./cli.dll --dataset ./data/uniform/data.txt -v --ore-scheme pope protocol --queries ./data/uniform/queries-1.txt"
    
    # to see the format of data and query files
    # data file line is an integer, coma, string (in quotes)
    # query file line is two integers separated by coma
    docker run dbogatov/ore-benchmark /bin/sh -c "head -n 10 ./data/uniform/data.txt"
    docker run dbogatov/ore-benchmark /bin/sh -c "head -n 10 ./data/uniform/queries-1.txt"
    
    # to run simulations on your data and queries
    # assuming you have a directory /path/to/data/ and it contains data.txt and queries.txt
    # here we have mapped your local directory into docker container
    docker run \
    	-v /path/to/data:/benchmark/your-data/ \
    	dbogatov/ore-benchmark \
    	/bin/sh -c "dotnet ./cli.dll --dataset ./your-data/data.txt -v --ore-scheme pope protocol --queries ./your-data/queries.txt"
    
    # advanced; to generate JSON output and save it locally
    # you have to have a directory /path/to/results, where result.json will appear
    docker run \
    	-v /path/to/data:/benchmark/your-data/ \
    	-v /path/to/results:/benchmark/results/ \
    	dbogatov/ore-benchmark \
    	/bin/sh -c "dotnet ./cli.dll --dataset ./your-data/data.txt --ore-scheme pope protocol --queries ./your-data/queries.txt > ./results/result.json"

    Running the tool locally without docker is more trivial (just omit all docker wrappers).

    To build the code locally

    Prerequisites:

    # build with
    dotnet build -c release ./src/cli/ -o dist/
    # resulting binary is ./src/cli/dist/cli.dll
    
    # run with
    dotnet ./src/cli/dist/cli.dll --help

    Packages