Giter Site home page Giter Site logo

vt-asaplab / muses Goto Github PK

View Code? Open in Web Editor NEW
3.0 2.0 0.0 3.31 MB

Efficient Multi-User Searchable Encrypted Database

License: MIT License

Shell 0.01% C++ 35.10% C 64.55% Assembly 0.33% Makefile 0.01%
distributed-point-function encrypted-search mpc multi-party-computation oblivious-search searchable-encryption key-homomorphic-pseudorandom-function oblivious-count oblivious-shuffle linear-group-action oblivious-padding

muses's Introduction

MUSES: Efficient Multi-User Searchable Encrypted Database

This is our full implementation for our MUSES paper.

WARNING: This is an academic proof-of-concept prototype and has not received careful code review. This implementation is NOT ready for production use.

Required Libraries

  1. NTL

  2. ZeroMQ

  3. Secp256k1

  4. EMP-Toolkit

You can run the script file auto_setup.sh to automatically install the required libraries and build source code.

sudo ./auto_setup.sh

Build & Compile

Go to the folder Server and folder Client then execute:

make clean
make

This is going to create executable files Server in Server folder and Client in Client folder.

Testing

  1. Launch server:
cd Server
./Server <Server_ID> <Server_Port> [-b <Bloom_Filter_Size>] [-d <Number_of_Documents>] [-w <Number_of_Writers>] [-ns <Search_Result_Size>]

For example, we launch server 1:

./Server 1 12345

Then launch server 2:

./Server 2 12345

The default parameters: Bloom_Filter_Size is 1120, Number_of_Documents is 1024, Number_of_Writers is 1 and Search_Result_Size is 255.

  1. Launch client:
cd Client
./Client [-b <Bloom_Filter_Size>] [-d <Number_of_Documents>] [-w <Number_of_Writers>] [-ns <Search_Result_Size>] 

For example:

./Client

NOTE: The configuration (including Bloom_Filter_Size, Number_of_Documents, Number_of_Writers and Search_Result_Size) need to be consistent when starting servers and client. For instance (Bloom_Filter_Size = 2000, Number_of_Documents = 32768, Number_of_Writers = 25, Search_Result_Size = 1023):

./Server 1 12345 -b 2000 -d 32768 -w 25 -ns 1024
./Server 2 12345 -b 2000 -d 32768 -w 25 -ns 1024
./Client -b 2000 -d 32768 -w 25 -ns 1024

You can start server/client applications in any order.

Configuring Number of Servers:

Change the constant defined at line 11 const int nP = 2; in file config.hpp and recompile both Server and Client.

Configuring Number of Threads:

Change the constant defined at line 9 const int MAX_THREADS = 8; in file config.hpp and recompile both Server and Client.

Configuring IP Addresses:

To run experiments with EC2 instances, we need to change the IP loopback 127.0.0.1 to the IP addresses of EC2 servers as follows.

  1. Server: modify servers' IP address from line 13 to line 18 in file emp_lib/emp_agmpc/cmpc_config.h and recompile Server.
const static char *IP[] = {""
                          , "127.0.0.1"
                          , "127.0.0.1"
                          , "127.0.0.1"
                          , "127.0.0.1"
                          , "127.0.0.1"
                          , "127.0.0.1"}; 
  1. Client: modify servers' IP addresses at line 786 string ip_addresses[] = {"127.0.0.1", "127.0.0.1", "127.0.0.1", "127.0.0.1", "127.0.0.1", "127.0.0.1"}; in file Client/Client.cpp and recompile Client.

Configuring Number of Test Execution:

By default, keyword search, document update and permission revocation operations are executed one time. We can increase the number of operations to evaluate their average execution time as follows:

  1. Server: file Server/Server.cpp

Line 29 int n_secret_key_update_times = 1; is to change the number of permission revocations.
Line 80 int n_document_update_times = 1; is to change the number of document updates.
Line 181 int n_keyword_search_times = 1; is to change the number of keyword search.

  1. Client: file Client/Client.cpp

Line 74 int n_secret_key_update_times = 1; is to change the number of permission revocations.
Line 255 int n_document_update_times = 1; is to change the number of document updates.
Line 402 int n_keyword_search_times = 1; is to change the number of keyword search.

Then recompile both Server and Client.

Note: The configuration need to be kept consistent between Client and Server.

Citing

If the code is found useful, we would be appreciated if our paper can be cited with the following bibtex format

@inproceedings {le2024muses,
author = {Le, Tung and Behnia, Rouzbeh and Guajardo, Jorge and  Hoang, Thang},
title = {{MUSES}: Efficient {M}ulti-User {S}earchable {E}ncrypted {D}atabase},
booktitle = {33rd USENIX Security Symposium (USENIX Security 24)},
year = {2024},
address = {Philadelphia, PA},
publisher = {USENIX Association},
month = aug,
}

Further Information

For any inquiries, bugs, and assistance on building and running the code, please contact me at [email protected].

muses's People

Contributors

tunglethanh avatar mathsorcerer avatar

Stargazers

Thang Hoang avatar  avatar  avatar

Watchers

Thang Hoang avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.