# Cloud Storage Assurance Architecture (CSAA) Proof-of-Concept ## Introduction CSAA is a system first described in [Mohanty et al.](https://fwei.tk/csass.pdf). 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. ## Usage ### Prerequisites 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 ``` ### Compiling ``` make ``` 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: ``` ./prepopulate2.sh ./prepopulate_dummy.sh ``` 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 Run: ``` 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: ``` ./genlabels.sh ./graph.gnu ``` This will generate graphs with the prefix `graph_`.