Fully Homomorphic Encryption (FHE)

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.

FHE C++ Transpiler

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.

Support

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.

Support disclaimer

This is not an officially supported Google product.

License

Apache License 2.0. See LICENSE.

Contact information

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.

Contributors

The contributors to this project are (sorted by last name):

GitHub

View Github