-
Notifications
You must be signed in to change notification settings - Fork 43
Home
Cingulata (pronounced "tchingulata") is a open-source compiler toolchain and runtime environnement (RTE) for running C++ programs over encrypted data by means of Fully Homomorphic Encryption (FHE) techniques. It is (so far) primarily developed by CEA LIST but its development is open to community contributors.
Formerly known as Armadillo, Cingulata provides some very nice features for harnessing the power of FHE computations.
- A high-level C++ programming interface for writing applications running on encrypted data.
Two execution modes are supported (depending on the target cryptosystem):
A. In an offline mode (compiled) Cingulata provides:
- Some optimization modules dedicated to reduce the size and the multiplicative depth of applications Boolean circuits.
- Automatic interfacing with lwe-estimator for secure FHE parameter generation.
- A parallel runtime environment allowing to execute those Boolean circuits using different FHE schemes.
B. In an online mode (on-the-fly execution):
- The C++ input application is directly executed over a low-level implementation of the target cryptosystem.
At present, the offline mode is dedicated to somewhat homomorphic schemes (in-house B/FV implementation) and the online one to fully homomorphic schemes (TFHE library).
In the compiled mode, the Cingulata front-end transforms input code written in C++ into an equivalent Boolean circuit representation (a Boolean circuit is made of logical AND and XOR gates). The middle-end layer optimizes the Boolean circuit produced by the front-end using ABC, an open-source tool used for hardware synthesis. Finally, the optimized circuit is executed dynamically on encrypted data using different FHE schemes.
For this release, the available FHE libraries are:
- A custom implementation of Fan-Vercauteren original cryptosystem (without the bootstrapping step).
- The TFHE library in gate boostrapping mode.
Nov. 2019
Work in progress on making parallel execution back-end available for all supported cryptosystems and beyond. The parallel_bit_exec branch contains a new posix cryptosystem-independent Boolean circuit execution back-end. For the moment the engine supports only the BFV library, TFHE coming soon.
Jun. 2019
Cingulata now supports the TFHE library with an on-the-fly single-core execution mode, which is a first step in the support of that cryptosystem. For the moment, only one test case shows how to use it (more to come soon).
Also, we have introduced a common interface for homomorphic libraries. In a next more integrated release, we will add circuit optimization scripts dedicated to TFHE.
Dec. 2018
Cingulata is now automatically interfaced with the lwe-estimator via its CinguParam submobule to follow new cryptanalysis results when estimating BFV parameters security (however, note that better security generally comes at higher computing costs, just like greater powers come with greater responsibilities 😄).
If you would like to compile and use Cingulata, please refer to the manual page. It contains important guidelines about installing Cingulata and the required dependencies, a list of tests you may want to look at as well as some general comments about the issues you may encounter.
All application examples along with a short description for each test are located in the tests directory. Also you may want to look at our tutorial page for writing, executing and testing your first program with Cingulata.
This is v1.5 version of the open-source toolchain which now supports the TFHE cryptosystem. We are still more than willing to make it live and extend it with further developments. Besides adding as much example programs as possible, the top of our to do list is writing additional backends for other (low-level) FHE librairies, in particular for SEAL.
Our list of publications also gives a glimpse at some of the things to come...
Initial design of Cingulata is described in this paper. If you use Cingulata for an academic project, please cite:
@inproceedings{armadillo,
title={Armadillo: a compilation chain for privacy preserving applications},
author={Carpov, Sergiu and Dubrulle, Paul and Sirdey, Renaud},
booktitle={Proceedings of the 3rd International Workshop on Security in Cloud Computing},
pages={13--19},
year={2015}
}
Cingulata is released under the CeCILL-C license, a free software license adapted to both international and French legal matters that is fully compatible with the FSF's GNU/LGPL license.
For more information about this toolchain and what can be achieved when using it, please check the page with the related publications.
This open-source project is the result of the work done by the CEA-LIST crypto team but wouldn't have been possible without some great external collaborations. Check here the list of people (and supporting research projects) which have contributed to one extent or another to Cingulata current version.
If you would also like to contribute to Cingulata, we welcome any new initiative. So please feel free to make a pull-request and the changes will be merged into the upstream branch, after review, by the awesome admnistrators of the git-hub repository (aka Renaud and Sergiu). As a bare minimum, no update should break any of the existing compiler tests. Of course, we'll be more than happy to have preliminary discussions on any new contributions.
For any issues, feature requests or new ideas, identified bugs and more, please create an issue and we will try to get back to you as soon as possible.
Main contact: Olivier Héron ([email protected]).