• Stars
    star
    124
  • Rank 288,207 (Top 6 %)
  • Language
    C++
  • License
    GNU Lesser Genera...
  • Created about 11 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

C++ OT extension implementation

OTExtension Build Status

DESCRIPTION

Implementation of the passive secure OT extension protocol of [1] and the active secure OT extension protocols of [2] and [3]. Implements the general OT (G_OT), correlated OT (C_OT), global correlated OT (GC_OT), sender random OT (SR_OT), and receiver random OT (RR_OT) (Definitions of the functionalities will follow). Implements the base-OTs by Naor-Pinkas [4], Peikert-Vaikuntanathan-Waters [5], and Chou-Orlandi [6]. The code is based on the OT extension implementation of [7] and uses the MIRACL libary [8] for elliptic curve arithmetic.

Update: Implemented 1-out-of-2 OT from the 1-out-of-N OT extension of [9].

REQUIREMENTS

  • A Linux distribution of your choice (the OT extension code was developed under Ubuntu).

  • Required packages:

    Install these packages with your favorite package manager, e.g, sudo apt-get install <package-name>.

COMPILING

  1. Clone a copy of the OTExtension git repository:

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

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

  4. Use CMake to create build files. Use

    cmake ..
    

    The following options are available:

    • -DCMAKE_INSTALL_PREFIX=/path/to/installation
    • -DOTEXTENSION_BUILD_EXE=On to build executables (they are written to mains/ in the build directory)

In case ENCRYPTO_utils cannot be found on your system, it will automatically be compiled. If it is installed in a non-standard location, the path can be provided via -DCMAKE_PREFIX_PATH=/some/path.

  1. Call make in the build directory to compile.

USE

To start OT extension, open two terminals on the same PC and call otmain -r 0 in one terminal to start OT extension as sender and call otmain -r 1 in the second terminal to start OT extension as receiver. This will invoke the passive secure IKNP 1-out-of-2 OT extension protocol for 1 million OTs on 8-bit strings. The result of the OT will be checked for correctness and the times (in ms) for the base-OTs, for the OT extensions, the number of bytes sent and the number of bytes received will be printed on the terminals. A list of all available options can be obtained via otmain -h.

NOTES

An example implementation of OT extension can be found in mains/otmain.cpp.

OT related source code is found in ot/.

Some compilation flags can be set in ot/OTconstants.h.

REFERENCES

  • [1] G. Asharov, Y. Lindell, T. Schneider, M. Zohner: More Efficient Oblivious Transfer and Extensions for Faster Secure Computation (CCS'13).
  • [2] G. Asharov, Y. Lindell, T. Schneider, M. Zohner: More Efficient Oblivious Transfer Extensions with Security for Malicious Adversaries. EUROCRYPT (1) 2015: 673-701.
  • [3] J. B. Nielsen, P. S. Nordholt, C. Orlandi, S. S. Burra: A New Approach to Practical Active-Secure Two-Party Computation. CRYPTO 2012: 681-700.
  • [4] M. Naor, B. Pinkas: Efficient oblivious transfer protocols. SODA 2001: 448-457.
  • [5] C. Peikert, V. Vaikuntanathan, B. Waters: A Framework for Efficient and Composable Oblivious Transfer. CRYPTO 2008: 554-571.
  • [6] T. Chou, C. Orlandi: The Simplest Protocol for Oblivious Transfer. Online at: http://eprint.iacr.org/2015/267.
  • [7] S.G. Choi, K.W. Hwang, J.Katz, T. Malkin, D. Rubenstein: Secure multi-party computation of Boolean circuits with applications to privacy in on-line market-places. In CT-RSA’12. LNCS, vol. 7178, pp. 416–432.
  • [8] CertiVox, Multiprecision Integer and Rational Arithmetic Cryptographic Library (MIRACL) https://github.com/CertiVox/MIRACL
  • [9] V. Kolesnikov, R. Kumaresan: Improved OT Extension for Transferring Short Secrets. In CRYPTO'13 (2).
  • [10] D. Demmler, T. Schneider, M. Zohner: ABY - A Framework for Efficient Mixed-Protocol Secure Two-Party Computation. NDSS 2015. https://github.com/encryptogroup/ABY

More Repositories

1

ABY

ABY - A Framework for Efficient Mixed-protocol Secure Two-party Computation
C++
456
star
2

PSI

Implementations of Private Set Intersection Protocols
C++
177
star
3

MOTION

An efficient, user-friendly, modular, and extensible framework for mixed-protocol secure multi-party computation with two or more parties
C++
85
star
4

UC

Implementation of Valiant's universal circuit construction optimized for private function evaluation
C++
38
star
5

MOTION2NX

A framework for generic hybrid two-party computation and private inference with neural networks
C++
29
star
6

SAFEFL

SAFEFL: MPC-friendly Framework for Private and Robust Federated Learning
Python
28
star
7

OPPRF-PSI

C++
22
star
8

FLUTE

FLUTE: Fast and Secure Lookup Table Evaluations
Rust
20
star
9

ENCRYPTO_utils

Crypto and networking utils used for ABY and OTExtension
C++
19
star
10

LEAKER

Python
16
star
11

LLVM-for-MPC

C++
13
star
12

MobilePSI

Implementation of precomputed PSI for smartphone
Java
12
star
13

RAID-PIR

Multi-Server PIR (CCSW'14)
Python
11
star
14

ppDBSCAN

C++
11
star
15

linearPFE

Linear-complexity Private Function Evaluation (PFE) based on homomorphic encryption (as presented at ESORICS'20).
C++
10
star
16

PDTE

Private Decision Tree Evaluation protocols
C++
10
star
17

tasty

Tool for Automating efficient Secure Two-partY computation protocols
Python
9
star
18

PQ-MPC

Code for "Secure Two-Party Computation in a Quantum World" by N. Büscher, D. Demmler, N. Karvelas, S. Katzenbeisser, J. Krämer, D. Rathee, T. Schneider, and P. Struck, which will appear at ACNS'20.
C++
8
star
19

me-sfe

Memory Efficient Secure Function Evaluation
Java
8
star
20

FUSE

FUSE: A Framework for Unifying and Optimizing Secure Multi-Party Computation Implementations with Efficient Circuit Storage.
C++
8
star
21

GSHADE

Framework for Privacy-Preserving Distance Computation based on Oblivious Transfer
C++
7
star
22

SoK_ppClustering

C++
5
star
23

SEEC

SEEC: Memory-Safety Meets Efficiency in Secure Two-Party Computation
Rust
5
star
24

VASA

VASA: Vector AES Instructions for Security Applications
C++
4
star
25

mpc-bench

MPC Benchmarking Tool
Rust
4
star
26

onionPIR

OnionPIR - a privacy-preserving communication service
Python
3
star
27

PrivMail

PrivMail: A Privacy-Preserving Framework for Secure Emails
Python
3
star
28

cip-pir

C++
2
star
29

amid

AMI aiD (AMID) - Scanning a system for security or privacy critical data before publishing or when started as Amazon Machine Image (AMI)
Python
1
star
30

ppIndoorLocalization

C
1
star
31

Hashing

Outsourced subtree that contains simple hashing and Cuckoo hashing routines
C++
1
star
32

CryptoSPN

Python
1
star
33

dp-KRE

Secure and Differentially Private kth Ranked Element
C
1
star
34

LUC

Implementation of Universal Circuits capable to compute LUT-based circuits
C++
1
star