# Syft

Homomorphically Encrypted Deep Learning Library

The goal of this library is to give the user the ability to efficiently train Deep Learning models in a homomorphically encrypted state, without needing to be an expert in either. Furthermore, by understanding the characteristics of both Deep Learning and Homomorphic Encryption, we hope to find a very performant combinations of the two. Also, check the main demonstration from the Sonar project.

## Local setup

### Prerequisites

- Make sure Python 3.5+ in installed on your machine by checking
`python3 --version`

- Set up a virtual environment for the Python libraries (optional, recommended)
- Install our OpenMined Unity app by following the guidelines here

### Python Requirements

The Python dependencies are listed in `requirements.txt`

and can be installed through

`pip3 install -r requirements.txt`

#### PySyft installation

If you simply want to to *use* PySyft, it is enough to install the library with:

`python3 setup.py install`

note: If you have anaconda installed, you can just run `bash install_for_anaconda.sh`

for linux or `install_for_anaconda_on_windows.bat`

for windows.

## For Contributors

If you are interested in contributing to Syft, first check out our Contributor Quickstart Guide and then sign into our Slack Team channel #team_pysyft to let us know which projects sound interesting to you! (or propose your own!).

## Relevant Literature

As both Homomorphic Encryption and Deep Learning are still somewhat sparsely known, below is a curated list of relevant reading materials to bring you up to speed with the major concepts and themes of these exciting fields.

### Encrypted Deep Learning - Recommended Reading:

- How to build a fully encrypted AI model (trained on unencrypted data)
- Simple secure protocol for federated machine learning (using a python-paillier library)
- Prototype for using encrypted AI to preserve user privacy (in python)
- Manual for Using Homomorphic Encryption for Bioinformatics (paper)

### Homomorphic Encryption - Recommended Reading:

- A Comparison of the Homomorphic Encryption Schemes
- Homomorphic Encryption API Software Library
- Faster Homomorphic Function Evaluation using Non-Integral Base Encoding

### Relevant Papers:

- Encrypted accelerated least squares regression
- PSML 2017 - Abstracts
- Encrypted statistical machine learning: new privacy preserving methods
- A review of homomorphic encryption and software tools for encrypted statistical machine learning
- Privacy-Preserving Distributed Linear Regression on High-Dimensional Data
- Secure Computation With Fixed-Point Numbers
- Scalable and secure logistic regression via homomorphic encryption
- ML Confidential: Machine Learning on Encrypted Data
- CryptoNets: Applying Neural Networks to Encrypted Data with High Throughput and Accuracy
- Privacy-Preserving Visual Learning Using Doubly Permuted Homomorphic Encryption

### Related Libraries:

- HomomorphicEncryption - An R package for fully homomorphic encryption
- A Secure Multiparty Computation (MPC) protocol for computing linear regression on vertically distributed datasets
- Dask Tutorial
- Charm-crypto

### Related Blogs:

- Private Deep Learning with MPC - A Simple Tutorial from Scratch
- Secret Sharing, Part 1 - Distributing Trust and Work
- Secret Sharing, Part 2 - Efficient Sharing with the Fast Fourier Transform
- Distributed machine learning and partially homomorphic encryption (Part 1)
- Distributed machine learning and partially homomorphic encryption (Part 2)
- Tutorial: How to verify crowdsourced training data using a Known Answer Review Policy

## License

Apache-2.0 by OpenMined contributors