Basic implementation of FS-DSSE. The full paper is published in IEEE ICC 2018 and available at https://eprint.iacr.org/2017/1222.pdf.
This project is built on CodeLite IDE (link: http://codelite.org). It is recommended to install CodeLite to load the full FS_DSSE workspace.
-
ZeroMQ (download link: http://zeromq.org/intro:get-the-software)
-
Libtomcrypt (download link: https://github.com/libtom/libtomcrypt)
-
Google sparsehash (download link: https://github.com/sparsehash/sparsehash)
-
Intel AES-NI (optional) (download link: https://software.intel.com/en-us/articles/download-the-intel-aesni-sample-library)
FS_DSSE leverages Intel AES-NI to accelerate cryptographic operations. The Intel-AES-NI is available in Intel® Core™ i5, Intel® Core™ i7, Intel® Xeon® 5600 series and newer processor (see https://ark.intel.com/Search/FeatureFilter?productType=processors&AESTech=true for a complete list). This functionality can be disabled to test FS_DSSE with other CPU models (see the Configuration Section below). Here the brief instruction to install Intel-AES-NI:
- Extract the .zip file downloaded from https://software.intel.com/en-us/articles/download-the-intel-aesni-sample-library
- Open the Terminal and go to
Intel_AESNI_Sample_Library_v1.2/intel_aes_lib
- Run
./mk_lnx_lib64.sh
, which will generate the header and library files inintel_aes_lib/include
andintel_aes_lib/include
directories, resp. - Copy header files and library files to your local folders (e.g.,
/usr/local/include
and/usr/local/lib
).
All FS_DSSE configurations are located in FS_DSSE/config.h
.
#define INTEL_AES_NI -> If enabled, use Intel AES-NI library
#define DISK_STORAGE_MODE -> If enabled, encrypted index will be stored on HDD (RAM if disabled)
#define SEND_SEARCH_FILE_INDEX -> If enabled, search result will contain specific file indexes
#define PEER_ADDRESS "tcp://localhost:5555" -> Server IP Address & Port
const std::string SERVER_PORT = "5555"; -> Server Port number
#define MAX_NUM_OF_FILES 1024 -> Maximum number of files (It MUST be the power of 2 and divisible by 8)
#define MAX_NUM_KEYWORDS 12000 -> Maximum number of keywords
The folder FS_DSSE/data
as well as its structure are required to store generated FS_DSSE data structures. The database is located in FS_DSSE/data/DB
. The implementation recognize DB as a set of document files so that you can copy your DB files to this location. The current DB contains a small subset of enron DB (link: https://www.cs.cmu.edu/~./enron/).
Goto folder FS_DSSE/
and execute
make
, which produces the binary executable file named FS_DSSE
in FS_DSSE/Debug/
.
- Access the header file named
iaesni.h
, go to line 51, and comment that line as follows:
#ifndef bool
//#define bool BOOL -> line 51
#endif
-
Disable INTEL_AES_NI in
FS_DSSE/config.h
-
Change the make file in
FS_DSSE/MakeFile
by removing the library linker-lintel-aes64
Run the binary executable file FS_DSSE
, which will ask for either Client or Server mode. The FS_DSSE implementation can be tested using either single machine or multiple machines with network:
- Set
PEER_ADDRESS
inFS_DSSE/config.h
to belocalhost
. - Choose
SERVER_PORT
identical with what indicated inPEER_ADDRESS
. - Compile the code with
make
in theFS_DSSE/
folder. - Go to
FS_DSSE/Debug
and run the compiledFS_DSSE
file with two different Terminals, each playing the client/server role.
- Set
PEER_ADDRESS
andSERVER_PORT
inFS_DSSE/config.h
with the corresponding server's IP address and port number. - Run
make
inFS_DSSE/
to compile and generate executable fileFS_DSSE
inFS_DSSE/Debug
folder. - Copy the file
FS_DSSE
inFS_DSSE/Debug
to different machines - Execute the file and follow the instruction on the screen.
For any inquiries, bugs, and assistance on building and running the code, please contact Muslum Ozgur Ozmen ([email protected]) or Thang Hoang ([email protected]).