Experiments for Decentralized Iris Code Membership Protocols using MPC

Disclaimer: This repository is intended for experiments only and may contain unfinished protocols, unoptimized code and minimal documentation.

This is the repository containing code and benchmarking harnesses for decentralized iris code membership protocols using secure multiparty computation.

Table of Contents

Report

A report of the preliminary results of this project is located in docs/report/main.pdf. This report includes a description of the protocol, the most challenging parts for efficient MPC evaluation, discussions of the MPC protocols, as well as benchmarks and potential future work.

Dependencies

  • Rust 1.75
    • We use this version because we are using async fn in traits, which is only stabilized in this version.

Repository Structure

The repository consists of 3 crates.

  • iris-mpc: Implementation of various base MPC protocol functionalities, as well as implementations of iris code membership checks using said protocols.
  • plain-reference: Implementation of the Iris Code Matching functionality in plain Rust, to serve as a comparison point for the MPC functionality.
    • Also contains a binary for generation of test data, which is stored in a SQlite DB for uses in tests/examples.
  • mpc-net: Implementation of networking used in the MPC protocols
    • Uses QUIC as the underlying transport protocol, which also captures the overhead of TLS for connections between parties.
    • Also contains a binary for generation of the required self-signed TLS certificates for testing.

Implemented MPC protocols

We are investigating several different MPC protocols:

As discussed in the report in docs/report/main.pdf, we recommend using SPDZWise MACs in combination with cut-and-choose to achieve malicious security.

Examples

In iris-mpc/examples, there are a few end-to-end examples that run the iris code matching for a single incoming iris code with associated mask against a prepared database of iris codes of a certain size.

As an example, executing an iris match against (a database size of 100k, set in the bash script) using the semi-honest implementation of ABY3, using real networking, but running all nodes on the current machine:

cd iris-mpc
bash examples/run_aby3.sh

You will see the output of a single party in the current terminal.