Giter VIP home page Giter VIP logo

libs3oram's Introduction

I have merged this repo to the original S3ORAM repo under the new branch. Check it out here. This repository will not be updated any more.


libS3ORAM

Implementation of libS3ORAM framework, an extension of S3ORAM scheme in CCS'17 that supports k-ary tree and Circuit-ORAM layout. The full paper is currently under review, which will be available soon.

This repository is just open for review purpose. We will merge this with our original S3ORAM repo (http://github.com/thanghoang/S3ORAM) after the review is complete! The code is not fully well-organized, we will update it soon.

This project is built on CodeLite IDE (link: http://codelite.org). It is recommended to install CodeLite to load the full libS3ORAM workspace.

Updates

  • 2018-12-30: S3ORAM now has a new scheme that leverages the eviction paradigm in Circuit-ORAM. S3ORAM now also supports k-ary tree layout.
  • 2017-12-25: S3ORAM now supports more than 3 servers with higher privacy levels.

Required Libraries

  1. NTL v9.10.0 (download link: http://www.shoup.net/ntl/download.html)

  2. ZeroMQ (download link: http://zeromq.org/intro:get-the-software)

Configuration

All libS3ORAM Framework configurations are located in libS3ORAM/config.h.

To use Circuit-ORAM eviction paradigm

Enable the macro #define CORAM_LAYOUT in libS3ORAM/config.h.

To use k-ary tree Layout

Modify the value in the macro #define K_ARY in libS3ORAM/config.h.

To use the default S3ORAM in CCS'17

Disable the macro #define CORAM_LAYOUT and enable the macro #define TRIPLET_EVICTION in libS3ORAM/config.h.

Highlighted Parameters:


#define BLOCK_SIZE 128                                -> Block size (in bytes)

#define HEIGHT 4                                      -> Height of S3ORAM Tree

static const unsigned long long P = 1073742353;       -> Prime field (size should be equal to the defined TYPE_DATA)

#define NUM_SERVERS 7                                 -> Number of servers \ell.
#define PRIVACY_LEVEL 3                               -> Privacy level t. 

const long long int vandermonde[NUM_SERVERS]          -> The first row of inverse of vandermonde matrix (should be defined according to SERVER_ID from 1....n)

const std::string SERVER_ADDR[NUM_SERVERS]            -> Server IP addresses
#define SERVER_PORT 5555                              -> Define the first port for incremental to generate other ports for client-server / server-server communications

Notes

It is recommended to select EVICT_RATE = BUCKET_SIZE/2, and BUCKET_SIZE>73 to avoid bucket overflow.

The folder libS3ORAM/data is required to store generated S3ORAM data structure.

Build & Compile

Goto folder libS3ORAM/ and execute

make

, which produces the binary executable file named libS3ORAM in libS3ORAM/Debug/.

Usage

Run the binary executable file libS3ORAM, which will ask for either Client or Server mode. The S3ORAM implementation can be tested using either single machine or multiple machines:

Local Testing:

  1. Set SERVER_ADDR in libS3ORAM/config.h to be localhost.
  2. Choose unique SERVER_PORT and SERVER_RECV_PORT for each server entity.
  3. Compile the code with make in the libS3ORAM/ folder.
  4. Go to libS3ORAM/Debug and run the compiled libS3ORAM file in different Terminals, each playing the client/server role.

Real Network Testing:

  1. Copy the binary file libS3ORAM compiled under the same configuration to running machines.
  2. For first time usage, run the libS3ORAM/Debug/libS3ORAM file on the client machine to initialize the S3ORAM structure first.
  3. Copy the folder libS3ORAM/data/i/ to server i, or follow the instruction on the client machine to transmit all data to corresponding server (It is recommend to manually copy the folder to avoid interuption during tranmission).
  4. For each server i, run the compiled file libS3ORAM and select the server role (option 2) and the corresponding ID i.

Android Build

(to be updated)

Further Information

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

libs3oram's People

Stargazers

 avatar  avatar  avatar

Watchers

 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.