Cloud Storage Assurance Architecture (CSAA) Proof-of-Concept


CSAA is a system first described in Mohanty et al.. It is designed to allow the secure storage of data with an untrusted service provider, bootstrapping trust from a "trusted module."

This program is an implementation of CSAA, adapted for use with storing Docker containers. It should be considered research-quality code, and does not (and can not!) provide any guarantees to the trustworthiness of the trusted module, since it executes on a general-purpose computer, in the same monolithic executable as the untrusted service.



You need the following packages for compiling and testing this program: SQLite3, OpenSSL, GCC, G++, Make, and the bc calculator.

On Debian, type:

sudo apt-get install libsqlite3-dev libssl-dev sqlite3 make gcc g++ bc

Also, graphs require Gnuplot:

sudo apt-get install gnuplot



This will produce three executables: client, server, and postprocess.

client and server implement the CSAA architecture; postprocess is for processing timing data and generating graphs -- you should not use it directly.

Generating Timing Graphs

Prepopulating Databases

Edit service_provider.c and dummy_service.c to uncomment the PREPOPULATE macro in each one. Also, disable error checking in main.c (perror() block).

Edit the prepopulate2.sh and prepopulate_dummy.sh scripts to have the desired logleaves range (default is 10-12).

Then recompile and run:


This should populate the databases directory with prepopulated databases and module states. This step only needs to be done once; the generated databases can be re-used as needed.

Running Tests

Run testmain_preinit.sh with the desired logleaves range and number of trials as its command-line arguments. For example, the following will run logleaves 10-25 with 5 trials for each logleaves value:

./testmain_preinit.sh 10 25 5

This script will produce results in the results directory.

Producing Graphs


cd results
../tabulate.sh 10 25 5

Your working directory must be in the results directory for the second command to work. The arguments to tabulate.sh must be exactly the same as those passed to testmain_preinit.sh.

This step will produce many files with the prefix final_ in the results directory. These are the final data.

To use Gnuplot to produce graphs from these, change to the project root directory and run:


This will generate graphs with the prefix graph_.