OpenMined / PySyft

Perform data science on data that remains in someone else's server
https://www.openmined.org/
Apache License 2.0
9.48k stars 2k forks source link

YASHE Tensor Demo #227

Closed iamtrask closed 6 years ago

iamtrask commented 7 years ago

Helium : YASHE Tensor Demo

Background: One of the most valuable contributions of the PySyft library to the Cryptography and AI communities is our Tensor level abstractions of Homomorphic Encryption algorithms. This allows users with no knowledge of Encryption to perform Encrypted Linear Algebra using a wide variety of encryption techniques. In this (and similar) tickets, we want to extend this ability to new Homomorphic Encryption schemes, such that users with no knowledge of Encryption can empirically try out various backend encryption techniques for their front end use cases with minimal effort. As such, while the backend API will differ from Tensor to Tensor, we want the front-end Linear Algebra interface to be as similar as possible, and to give intuitive explanations if the API differs such that calling functions in an Encrypted Tensor that doesn't support those operations explains WHY that specific type of Encryption cannot support the operation (i.e., Paillier can't multiply two encrypted numbers together... perhaps you should try another backend Encryption scheme).

Part 1: User Stories

Part 2: Mockup

This Notebook is an excellent mockup of the functionality that we want to see with this new encrypted tensor class. It should be able to do all the operations in this notebook, with the added functionality of multiplication between two encrypted tensors (since that is explicitly supported by YASHE).

Part 3: Acceptance Criteria

aeroaks commented 7 years ago

@iamtrask I would like to try this one. I would need some guidance along the way. For starters, I understood that i have to implement a basic YasheTensor class similar to syft.he.paillier.basic.PaillierTensor class. Where does it reside in the repo structure?

iamtrask commented 7 years ago

Great question! It should reside in syft.he.yashe.basic.YasheTensor.