All Projects → encryptogroup → MOTION

encryptogroup / MOTION

Licence: MIT license
An efficient, user-friendly, modular, and extensible framework for mixed-protocol secure multi-party computation with two or more parties

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to MOTION

awesome-secure-computation
Awesome list for cryptographic secure computation paper. This repo includes *Lattice*, *DifferentialPrivacy*, *MPC* and also a comprehensive summary for top conferences.
Stars: ✭ 125 (+111.86%)
Mutual labels:  mpc, secure-computation, ot-extension, oblivious-transfer, privacy-enhancing-technologies
conclave
Query compiler for secure multi-party computation.
Stars: ✭ 86 (+45.76%)
Mutual labels:  mpc, secure-computation, privacy-enhancing-technologies, multiparty-computation
emp-tool
No description or website provided.
Stars: ✭ 155 (+162.71%)
Mutual labels:  mpc, secure-computation, garbled-circuits
rust-threshold-secret-sharing
A pure-Rust implementation of various threshold secret sharing schemes
Stars: ✭ 129 (+118.64%)
Mutual labels:  secret-sharing, secure-computation
garbled-circuit
A two-party secure function evaluation using Yao's garbled circuit protocol
Stars: ✭ 41 (-30.51%)
Mutual labels:  secure-computation, garbled-circuits
WeDPR-Lab-Core
Core libraries of WeDPR instant scenario-focused solutions for privacy-inspired business; WeDPR即时可用场景式隐私保护高效解决方案核心算法组件
Stars: ✭ 147 (+149.15%)
Mutual labels:  mpc, multiparty-computation
PPML-Resource
Materials about Privacy-Preserving Machine Learning
Stars: ✭ 93 (+57.63%)
Mutual labels:  mpc, secure-computation
mpc
Secure Multi-Party Computation (MPC) with Go. This project implements secure two-party computation with Garbled circuit protocol.
Stars: ✭ 41 (-30.51%)
Mutual labels:  mpc, oblivious-transfer
high mpc
Policy Search for Model Predictive Control with Application to Agile Drone Flight
Stars: ✭ 299 (+406.78%)
Mutual labels:  mpc
QR-secret-sharing
🔒 Create QR codes to secret-share a message. Ideal for cryptocurrency wallet recovery keys and passwords.
Stars: ✭ 94 (+59.32%)
Mutual labels:  secret-sharing
gpc-optmeowt
Browser extension for opting out from the sale and sharing of personal information per the California Consumer Privacy Act and other privacy laws
Stars: ✭ 75 (+27.12%)
Mutual labels:  privacy-enhancing-technologies
bee2
A cryptographic library
Stars: ✭ 59 (+0%)
Mutual labels:  secret-sharing
Model-Predictive-Control
C++ implementation of Model Predictive Control(MPC)
Stars: ✭ 51 (-13.56%)
Mutual labels:  mpc
Hemmelig.app
Keep your sensitive information out of chat logs, emails, and more with encrypted secrets.
Stars: ✭ 183 (+210.17%)
Mutual labels:  privacy-enhancing-technologies
privapi
Detect Sensitive REST API communication using Deep Neural Networks
Stars: ✭ 42 (-28.81%)
Mutual labels:  privacy-enhancing-technologies
project1
Project 1
Stars: ✭ 48 (-18.64%)
Mutual labels:  mpc
ParNMPC
A Parallel Optimization Toolkit for Nonlinear Model Predictive Control (NMPC)
Stars: ✭ 173 (+193.22%)
Mutual labels:  mpc
OTExtension
C++ OT extension implementation
Stars: ✭ 109 (+84.75%)
Mutual labels:  oblivious-transfer
PrivacyQA EMNLP
PrivacyQA, a resource to support question-answering over privacy policies.
Stars: ✭ 24 (-59.32%)
Mutual labels:  privacy-enhancing-technologies
secrets
Simple Secret Sharing Service for social and decentralised management of passwords
Stars: ✭ 30 (-49.15%)
Mutual labels:  secret-sharing

MOTION - A Framework for Mixed-Protocol Multi-Party Computation Build Status

Check out our paper (published at ACM TOPS'22) for details.

This code is provided as an experimental implementation for testing purposes and should not be used in a productive environment. We cannot guarantee security and correctness.

Requirements


  • A Linux distribution of your choice (MOTION was developed and tested with recent versions of Ubuntu, Manjaro and Arch Linux).
  • Required packages for MOTION:
    • g++ (version >=10) or another compiler and standard library implementing C++20 including the filesystem library
    • make
    • cmake
    • boost (version >=1.75.0)
    • OpenMP
    • OpenSSL (version >=1.1.0)
  • For Windows, set these paths in PATH System Variable:
    • path\to\cmake\bin
    • path\to\MinGW\bin
    • OpenSSL can be configured by setting these variables: OPENSSL_ROOT_DIR, OPENSSL_INCLUDE_DIR , OPENSSL_LIBRARIES, OPENSSL_CRYPTO_LIBRARY, and OPENSSL_SSL_LIBRARY or pass them via -DOPENSSL_ROOT_DIR etc. in cmake ..

Building MOTION

Short Version
  1. Clone the MOTION git repository by running:

    git clone https://github.com/encryptogroup/MOTION.git
    
  2. Enter the Framework directory: cd MOTION/

  3. Create and enter the build directory: mkdir build && cd build

  4. Use CMake configure the build:

    cmake ..
    

    For Windows:

    cmake -G "MinGW Makefiles" ..
    

    This also initializes and updates the Git submodules of the dependencies located in extern/.

  5. Call make in the build directory. Optionally, add -j $number_of_parallel_jobs to make for faster compilation. You can find the build executables and libraries in the directories bin/ and lib/, respectively.

Detailed Guide
External Dependencies

MOTION depends on the following libraries:

These are referenced using the Git submodules in the extern/ directory. During configure phase of the build (calling cmake ..) CMake searches your system for these libraries.

  • If they are already installed at a standard location, e.g., at /usr or /usr/local, CMake should find these automatically.
  • In case they are installed at a nonstandard location, e.g., at ~/some/path/, you can point CMake to their location via the CMAKE_PREFIX_PATH option:
    cmake .. -DCMAKE_PREFIX_PATH=~/some/path/
    
  • Otherwise, CMake updates and initializes the Git submodules in extern/ (if not already done), and the missing dependencies are built together with MOTION. If you want to do this without a network connection, consider to clone the repository recursively.
Test Executables and Example Applications

MOTION executables and test cases are not built by default. This can be enabled with the MOTION_BUILD_EXE or MOTION_BUILD_TESTS option, respectively, e.g.:

cmake .. -DMOTION_BUILD_EXE=On
Build Options

You can choose the build type, e.g. Release or Debug using CMAKE_BUILD_TYPE:

cmake .. -DCMAKE_BUILD_TYPE=Release
# or
cmake .. -DCMAKE_BUILD_TYPE=Debug

Release is selected as default and will enable optimizations, whereas Debug includes debug symbols.

To choose a different compiler, use the CXX environment variable:

CXX=/usr/bin/clang++ cmake ..
Cleaning the Build Directory

Executing make clean in the build directory removes all build artifacts. This includes built dependencies and examples. To clean only parts of the build, either invoke make clean in the specific subdirectory or use make -C:

  • make clean - clean everything
  • make -C src/motioncore clean - clean only the MOTION library
  • make -C src/examples clean - clean only the examples
  • make -C src/test clean - clean only the test application
  • make -C extern clean - clean only the built dependencies
Installation

In case you plan to use MOTION for your own application, you might want to install the MOTION library to some place, for example system-wide (e.g. at /usr/local) or somewhere in your workspace (e.g. /path/to/motion). There are two relevant options:

  • CMAKE_INSTALL_PREFIX defaults to /usr/local and is preprended by CMake to all installation paths (e.g. lib/ and include/ for library and header files, respectively, become /usr/local/lib and usr/local/include). CMake will also look for dependencies at this location.
  • DESTDIR is used by the Makefile to install to a nonstandard location.

Example: If you want to install MOTION to ~/path/to/motion/prefix/{include,lib} you can use:

cmake .. -DCMAKE_INSTALL_PREFIX=""
make
make DESTDIR=~/path/to/motion/prefix install

or

cmake .. -DCMAKE_INSTALL_PREFIX=~/path/to/motion/prefix
make
make install
Docker setup
  1. Create a Docker image. This may take a few minutes, but you will only have to do this once.

    docker build -t motion .
    
  2. Run the Docker image.

    docker run -it --rm motion
    

To check correctness, run the test using --gtest_filter='-*ipv6*' because Docker doesn't support IPv6 by default.

Developer Guide and Documentation

TODO (in work): We provide an extensive developer guide with many examples and explanations of how to use MOTION.

Also, for further information see comments on the code and the online doxygen documentation for MOTION. Alternatively, it can be built locally in your_build_folder/doc by adding -DMOTION_BUILD_DOC=On to the cmake command.

MOTION Applications


Running Applications

Adding -DMOTION_BUILD_EXE=On to the cmake command enables the compilation of the applications implemented in MOTION. Currently, the following applications are implemented and can be found in src/examples/:

  • AES-128 encryption
  • SHA-256 hashing
  • millionaires' problem: each party has an integer input (amount of money), the protocol yields the index of the party with the largest input (i.e., the richest party)
  • TODO (in work, cleanup): All the applications implemented in HyCC via our HyCC adapter

Three other examples with a detailed README can be found in src/examples/tutorial/ :

  • Crosstabs
  • Inner Product
  • Multiply 3: multiply three real inputs from three parties or three shared inputs from two parties.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].