Multiparty Computation in Python
MPyCMPyC supports secure m-party computation tolerating a dishonest minority of up to t passively corrupt parties, where m ≥ 1 and 0 ≤ t < m/2. The underlying cryptographic protocols are based on threshold secret sharing over finite fields (using Shamir's threshold scheme and optionally pseudorandom secret sharing).
The details of the secure computation protocols are mostly transparent due to the use of sophisticated operator overloading combined with asynchronous evaluation of the associated protocols.
Documentation
Read the Docs for Sphinx
-based documentation, including an overview of the demos
.
GitHub Pages for pydoc
-based documentation.
See demos
for Python programs and Jupyter notebooks with lots of example code. Click the "launch binder" badge above to view the entire
repository and try out the Jupyter notebooks from the demos
directory in the cloud, without any install.
The MPyC homepage has some more info and background.
Installation
Pure Python, no dependencies. Python 3.9+ (following NumPy's deprecation policy).
Run pip install .
in the root directory (containing file setup.py
).
Or, run pip install -e .
, if you want to edit the MPyC source files.
Use pip install numpy
to enable support for secure NumPy arrays in MPyC, along with vectorized implementations.
Use pip install gmpy2
to run MPyC with the package gmpy2 for considerably better performance.
Some Tips
-
Try
run-all.sh
orrun-all.bat
in thedemos
directory to have a quick look at all pure Python demos. Demosbnnmnist.py
andcnnmnist.py
require NumPy, demokmsurvival.py
requires pandas, Matplotlib, and lifelines, and demoridgeregression.py
(and therefore demomultilateration.py
) even require Scikit-learn.
Trynp-run-all.sh
ornp-run-all.bat
in thedemos
directory to run all Python demos employing MPyC's secure arrays. Major speedups are achieved due to the reduced overhead of secure arrays and vectorized processing throughout the protocols. -
To use the Jupyter notebooks
demos\*.ipynb
, you need to have Jupyter installed, e.g., usingpip install jupyter
. An interesting feature of Jupyter is the support of top-levelawait
. For example, instead ofmpc.run(mpc.start())
you can simply useawait mpc.start()
anywhere in a notebook cell, even outside a coroutine.
For Python, you also get top-levelawait
by runningpython -m asyncio
to launch a natively async REPL. By runningpython -m mpyc
instead you even get this REPL with the MPyC runtime preloaded! -
Directory
demos\.config
contains configuration info used to run MPyC with multiple parties. The filegen.bat
shows how to generate fresh key material for SSL. To generate SSL key material of your own, first runpip install cryptography
(alternatively, runpip install pyOpenSSL
).
Copyright © 2018-2023 Berry Schoenmakers