Files
concrete/docs
Arthur Meyre ff03bc2220 feat(optimization): support more fusing topologies
- corrected docstring that was mistaken on what was returned
- updated pyproject.toml to ignore warnings that happened naturally in
networkx and that was blocking proper test execution (no way around that
this is code from networkx that triggered the warning)
- add a test case for the newly supported fusing topology

closes #499
2021-11-18 09:08:50 +01:00
..
2021-10-29 14:15:34 +02:00
2021-09-20 13:40:55 +02:00
2021-10-29 18:21:48 +02:00
2021-07-15 16:56:53 +02:00
2021-07-15 16:56:53 +02:00
2021-09-24 18:32:48 +02:00

What is Concrete

Introduction

Concrete Framework, or Concrete for short, is an open-source framework which aims to simplify the use of so-called fully homomorphic encryption (FHE) for data scientists.

FHE is a new powerful cryptographic tool, which allows e.g. servers to perform computations directly on encrypted data, without needing to decrypt first. With FHE, privacy is at the center, and one can build services which ensure full privacy of the user and are the perfect equivalent of their unsecure counterpart.

FHE is also a killer feature regarding data breaches: as anything done on the server is done over encrypted data, even if the server is compromised, there is in the end no leak of any kind of useful data.

Concrete is made of several parts:

  • a library, called concrete-lib, which contains the core cryptographic API's for computing with FHE
  • a compiler, called concrete-compiler, which allows to turn an MLIR program into an FHE program, on the top of concrete-lib
  • some frontends, which convert different langages to MLIR, to finally be compiled.
In the first version of Concrete, there is a single frontend, called homomorphic numpy (or hnp), which is the equivalent of numpy. With our toolchain, a data scientist can convert a numpy program into an FHE program, without any a-priori knowledge on cryptography.

Organization of the documentation

Basically, we have divided our documentation into several parts:

  • one about basic elements, notably description of the installation, that you are currently reading
  • one dedicated to users of Concrete, with tutorials, how-to's and deeper explanations
  • and finally, one dedicated to developers of Concrete, who could be internal or external contributors to the framework

A work in progress

Concrete is a work in progress, and is currently limited to a certain number of operators and features. In the future, there will be improvements as described in this [section](user/explanation/FUTURE_FEATURES.md).

The main current limits are:

  • Concrete is only supporting unsigned integers
  • Concrete needs the integer to be less than 7 bits (included)
  • Concrete is mostly restricted to scalars (by opposition to tensors). The only exception is the dot operator, which can dot a tensor of encrypted values with a tensor of constant values

The first two limits can be taken care of with the use of quantization, as explained a bit further in this and this parts of the documentation.

The scalar limitation is mainly an engineering issue, and will be fixed in the next release. Today, one needs to split all the tensors into small scalars, which is inconvenient and will be no more needed very soon.