Skip to main content

Multi-Party Computation Cryptography - Final Project

tenor

Table of contents generated with markdown-toc

About

This project is an implementation of a secure multi-party protocol for the secure set-union problem and the secure all-pairs shortest path problem. The protocol is devised from existing literature and is tailored for enhanced efficiency in a semi-honest setting with a dishonest majority.

What is Multi-Party Computation (MPC)?

Multi-Party Computation (MPC) is a subfield of cryptography that enables multiple entities to jointly compute a function over their inputs while keeping those inputs private. In the context of this project, we focus on a 2-party computation, where both entities share inputs and follow the MPC protocol, ensuring the privacy of their inputs. Without the intervention of a server (Third party) in the proccess.

Authors

Project Overview

Project Goal

The primary objective of this project is to implement a secure multi-party protocol that is specifically designed for the secure set-union problem and the secure all-pairs shortest path problem. Our protocol aims to achieve greater efficiency than generic MPC protocols, especially in semi-honest settings with a dishonest majority. We base our approach on existing research by Justin Brickell and Vitaly Shmatikov, which you can access here.

Introduction

Our protocol deals with two semi-honest groups. Since the late 1980s, general protocols have theoretically allowed secure computation in polynomial time and with a security parameter, enabling both players to compute safely under computational complexity assumptions. While these general protocols are theoretically efficient, they are not always practically efficient. Therefore, people have been trying to create specific security protocols for specific functions that are more efficient than the general protocols.

The use of various generic libraries, such as YAO, and GMW, has proven to be less efficient, prompting efforts to develop more efficient approaches. We will implement the All-Pairs Shortest Path functionality to contribute to the ecosystem of implementations, aiming to create more efficient implementations in this domain.

Methods & Algorithms

Design Considerations

There were two algorithms for the set union to implement in our protocol:

  1. A provided pseudocode that utilized YAO and GMW for the calculation of the minimum using a generic library. However, this did not fit with our chosen programming language.
  2. A tree pruning method that utilized ElGamal and BitOr to reveal information securely.

Selected approach

We have decided to implement the BitOr operation to achieve a union without relying on a generic library.

Image Cryptographer Link
Elgamal Wikipedia
Yao Wikipedia

because the iterative method required using a generic library to calculate the minimum in a secure way.

Pseudo Code Bit OR

Procedure PrivacyPreservingBitOr:

  1. Alice initializes:
    • Selects cyclic group $G$ of prime order $q$
    • Chooses $g$ (quadratic residue) and large prime p $(p=2q+1)$
    • Chooses private key $k ∈ {0, ..., q-1}$
    • Picks random $r ∈ {2, ..., q-1}$
    • If Alice's bit is $0$, calculates $C_a = (g^r, g^{(kr)})$
    • If Alice's bit is $1$, calculates $C_a = (g^r, g\cdot g^{(kr)})$
  2. Alice sends $(C_a, q, g, g^k)$ to Bob, keeping k private
  3. Bob receives $(C_a, q, g, g^k)$ and unpacks $C_a$ into $(α, β)$
    • Picks random $r' ∈ {2, ..., q-1}$
    • If Bob's bit is $0$, calculate C_b = (α^r', β^r')
    • If Bob's bit is $1$, calculate C_b = (α^r', g^r'*β^r')
  4. Bob sends $C_b$ back to Alice
  5. Alice receives $C_b$, unpacks it into $(γ, δ)$
    • Calculates $b = \frac{δ}{γ^k}$
      • If $b = 1$, returns $0$
      • If $b ≠ 1$, returns $1$ insert diagram here

Infrastracture

Using Flask and Gunicorn servers on cloud platforms of Microsoft Azure. we represent parties involved in the secure computation.

User Interface

We built a library mainly for software developers, but included visual aids and infrastructure for easier understanding. It's designed to show anyone how our system works, especially in Multi-party computation. Our simple interface gives a clear view of the protocol's progress and even includes a log output to follow the entire process.

Insert screens here

[ QR code for GitHub repo on bottom-right ]

Development proccess

At first the Development process was to read a lot and get deep into the article of Justin Brickell and Vitaly Shmatikov, which you can access here. and we met every week from the begining reading it, and also reading the article A Proof of Security of Yao’s Protocol for Two-Party Computation by Yehuda Lindell Benny Pinkas and we had to learn a lot about the secure computation proofs and theory Semi-Honest Adversaries and this lecture as well. This is the first step is to get into the field so we can understand the problem more deeply. then we wrote the

Synchronization was one of our biggest obstacle for us as a team and for the threads in the program between the clients

API Reference

GET /api/datapoint

| Parameter | Type | Description |

| :-------- | :------- | :------------------------- |

| api_key | string | Required. Your API key |

Get item

GET /api/items/${id}

| Parameter | Type | Description |

| :-------- | :------- | :-------------------------------- |

| id | string | Required. Id of item to fetch |

add(num1, num2)

Takes two numbers and returns the sum.

Appendix

Any additional information goes here

License

MIT

Tech Stack

Client: HTML CSS JAVASCRIPT, Jinja engine for flask Server: PYTHON FLASK

Usage/Examples

import  Component  from  'my-project'

  

function  App()  {

return  <Component />

}

Demo

Insert gif and image for the video demo on youtube

Deployment

  1. get a user on Microsoft Azure

To deploy this project run

gunicorn 

Environment Variables

To run this project, you will need to add the following environment variables to your .env file

API_KEY

ANOTHER_API_KEY

Run Locally

Clone the project

git clone https://link-to-project

Go to the project directory

cd my-project

Install dependencies

pip install flask .....

Start the server

npm run start

Files & Project structure

Documents

Vision Statement - MPC protocol implementation

Vision Statement

image

SRD Document

image image image image

Privacy-Preserving Graph Algorithms in the Semi-honest Model

by Justin Brickell and Bitaly Shmatikov The University of Texas at Austin, Austin TX 78712, USA

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

A Proof of Security of Yao’s Protocol for Two-Party Computation

by Yehuda Lindell∗ Benny Pinkas June 26, 2006

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

for original code go here

notes

Metadata

Release files for addy-mpc 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for addy-mpc 0.0.1
File Size Uploaded Provenance
addy_mpc-0.0.1.tar.gz 13.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for addy-mpc 0.0.1
File Interpreter ABI Platform
addy_mpc-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 31.5 kB

Release files / addy_mpc-0.0.1.tar.gz

Download URL addy_mpc-0.0.1.tar.gz
Size 13.3 kB
Tags Source
SHA-256 checksum
How to use checksums
2c80aba0782fee80fc6ab389703d172219f16b0cd88262a747ad483dde4ad0c5
BLAKE2b-256 checksum
How to use checksums
f5c8d85da1591ce663b191dbd8e6d816588db88e5b5cc3b768d35452268c49a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4

Release files / addy_mpc-0.0.1-py3-none-any.whl

Download URL addy_mpc-0.0.1-py3-none-any.whl
Size 18.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
632e37cd7bfe93c252615bd4e5bcb8fe612d91ebebf28731e7d056d9201c88d1
BLAKE2b-256 checksum
How to use checksums
ef41670bee7c304ee5a093a88b4d83016dd94119756933522527122925593c84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4

Security for addy-mpc 0.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page