This repository contains a Python library implementing the secure index construction and its runtime usage, and a complete system showing how to leverage our secure index in order to store encrypted databases on PostgreSQL and Redis, and how to query them.
To enable the flat secure indexing of an encrypted dataset, multiple steps are necessary:
- construction of the flat representation
- construction of the maps on top of the flat representation
- dataset wrapping
- dataset outsourcing
Upon sending a query to the backend, the client:
- parses it
- uses the maps to rewrite it
- leverages different server execution strategies based on the current setup
When receiving the response, the client:
- decrypts the encrypted blocks pulled from the server
- creates a temporary table in a local SQLite instance
- filters spurious tuples by re-running the original query in SQLite
- returns the results of the query as if it was run against a plaintext database
To construct the maps and use them to prepare the dataset for secure outsourcing, run:
make preprocess
NOTE: multiple preprocessing targets exist, take a look into the Makefile to have a complete view of the configurations available.
To upload the dataset and query it run:
make query
NOTE: multiple query targets exist, depending on the preprocessing done previously, take a look into the Makefile to have a complete view of the configurations available.
The experiments can be reproduced with:
make test
NOTE: This takes few days to execute on our hardware. If you don't have the time to reproduce the experiments you can still recreate our figures starting from our experimental data as follows.
In order to visualize the results of the experimental evaluation you can run:
make visualization