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
libprefix 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/includeand/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-aes64in 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_ADDRESSinIM-DSSE/config.hto belocalhost. - Choose
SERVER_PORTidentical with what indicated inPEER_ADDRESS. - Compile the code with
makein theIM-DSSE/folder. - Go to
IM-DSSE/Debugand run the compiledIM-DSSEfile with two different Terminals, each playing the client/server role.
- Set
PEER_ADDRESSandSERVER_PORTinIM-DSSE/config.hwith the corresponding server's IP address and port number. - Run
makeinIM-DSSE/to compile and generate executable fileIM-DSSEinIM-DSSE/Debugfolder. - Copy the file
IM-DSSEinIM-DSSE/Debugto 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].