This repository contains open-source libraries and tools to perform fully homomorphic encryption (FHE) operations on an encrypted data set.
About Fully Homomorphic Encryption
Fully Homomorphic Encryption (FHE) is an emerging cryptographic technique that allows developers to perform computations on encrypted data. This represents a paradigm shift in how data processing and data privacy relate to each other.
Previously, if an application had to perform some computation on data that was encrypted, this application would necessarily need to decrypt the data first, perform the desired computations on the clear data, and then re-encrypt the data. FHE, on the other hand, simply removes the need for this decryption-encryption steps by the application, all at once.
In practice, for an application that needs to perform some computation F on data that is encrypted, the FHE scheme would provide some alternative computation F' which when applied directly over the encrypted data will result in the encryption of the application of F over the data in the clear. More formally: F(unencrypted_data) = Decrypt(F'(encrypted_data)).
As a result, FHE can have an enormous impact to our society. It can change the way computations are performed by preserving end-to-end privacy. For example, users would be able to offload expensive computations to cloud providers in a way that cloud providers will not have access to the users' data at all.
The main hindrance for the adoption of FHE has been its very poor performance. Despite significant scientific improvements, performing computations on encrypted data using FHE is still orders of magnitude slower than performing the computation on the plaintext. On top of that, converting a program that operates on unencrypted data to one that FHE-operates on encrypted data is far from being a trivial translation. If not properly done, this translation can significantly increase the performance gap between computing on unencrypted data and the FHE-computation on encrypted data, thus precluding wide FHE adoption.
The FHE C++ Transpiler is a general purpose library that converts C++ into FHE-C++ that works on encrypted input.
The transpiler has a modular architecture that allows varying the underlying FHE library, the high-level program description and the output language as well. We hope that this flexibility will allow researchers from different fields to work together on this exciting goal of making FHE more efficient and broadly applicable.
The code, examples, and more information is in the transpiler
subdirectory.
We will continue to publish updates and improvements to the FHE library. We are not yet accepting external contributions to this project. We will respond to issues filed in this project. If we ever intend to stop publishing improvements and responding to issues we will publish notice here at least 3 months in advance.
This is not an officially supported Google product.
Apache License 2.0. See LICENSE
.
We are committed to open-sourcing our work to support your use cases. We want to know how you use this library and what problems it helps you to solve. We have two communication channels for you to contact us:
-
A public discussion group where we will also share our preliminary roadmap, updates, events, and more.
-
A private email alias at [email protected] where you can reach out to us directly about your use cases and what more we can do to help and improve the library.
Please refrain from sending any sensitive or confidential information. If you wish to delete a message you've previously sent, please contact us.
The contributors to this project are (sorted by last name):
- Eric Astor
- Damien Desfontaines
- Christoph Dibak
- Alain Forget
- Bryant Gipson
- Shruthi Gorantala (Lead)
- Miguel Guevara
- Aishwarya Krishnamurthy
- Sasha Kulankhina
- William Lam
- David Marn
- Rafael Misoczki
- Bernat Guillén Pegueroles
- Milinda Perera
- Sean Purser-Haskell
- Sam Ruth
- Rob Springer
- Yurii Sushko
- Cameron Tew
- Royce Wilson
- Xinyu Ye
- Itai Zukerman