Basic implementation of IM-DSSE. The full paper is available here (free, but not updated version here). This project is built on CodeLite IDE. It is recommended to install CodeLite to load the full IM-DSSE workspace.
-
Intel AES-NI (optional)
IM-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 here for a complete list). This functionality can be disabled to test IM-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 here
- Open the Terminal and go to
Intel_AESNI_Sample_Library_v1.2/intel_aes_lib
- Run
./mk_lnx_libXX.sh
, which will generate the header and library files inintel_aes_lib/include/
andintel_aes_lib/lib/xXX/
directories, respectively, whereXX = 64
(if your OS is 64 bits) orXX = 86
(if your OS is 32 bits). - Add the
lib
prefix to the generated library file (intel_aesXX.a -> libintel_aesXX.a
). - Copy header files and library files to your local folders (e.g.,
/usr/local/include
and/usr/local/lib
).
All IM-DSSE configurations are located in IM-DSSE/config.h
.
#define INTEL_AES_NI -> If enabled, use Intel AES-NI library
#define VARIANT_I -> Set 1 of 4 options: VARIANT_MAIN, VARIANT_I, VARIANT_II, VARIANT_III
#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 IM-DSSE/data
as well as its structure are required to store generated IM-DSSE data structures. The database is located in IM-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 IM-DSSE/
and execute
make
, which produces the binary executable file named IM-DSSE
in IM-DSSE/Debug/
.
- Access the AES-NI 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
IM-DSSE/config.h
-
Remove the library linker
-lintel-aes64
in the make fileIM-DSSE/MakeFile
Run the binary executable file IM-DSSE
, which will ask for either Client or Server mode. The IM-DSSE implementation can be tested using either single machine or multiple machines with network:
- Set
PEER_ADDRESS
inIM-DSSE/config.h
to belocalhost
. - Choose
SERVER_PORT
identical with what indicated inPEER_ADDRESS
. - Compile the code with
make
in theIM-DSSE/
folder. - Go to
IM-DSSE/Debug
and run the compiledIM-DSSE
file with two different Terminals, each playing the client/server role.
- Set
PEER_ADDRESS
andSERVER_PORT
inIM-DSSE/config.h
with the corresponding server's IP address and port number. - Run
make
inIM-DSSE/
to compile and generate executable fileIM-DSSE
inIM-DSSE/Debug
folder. - Copy the file
IM-DSSE
inIM-DSSE/Debug
to different machines - Execute the file and follow the instruction on the screen.
(To be updated)
If the code is found useful, we would be appreciated if our paper can be cited with the following bibtex format
@article{8632753,
author={T. {Hoang} and A. A. {Yavuz} and J. {Guajardo Merchan}},
journal={IEEE Transactions on Services Computing},
title={A Secure Searchable Encryption Framework for Privacy-Critical Cloud Storage Services},
year={2019},
volume={},
number={},
pages={1-1},
keywords={Cloud computing;Indexes;Encryption;Privacy;Complexity theory;Privacy-enhancing technologies, private cloud services;dynamic searchable symmetric encryption},
doi={10.1109/TSC.2019.2897096},
ISSN={2372-0204},
month={},}
}
For any inquiries, bugs, and assistance on building and running the code, please contact me at [email protected].