Today, Zama announces the release of a new version of Concrete, following the concrete-core V1.0.0 release. Concrete v0.2 provides a high-level and easy-to-use interface for developers that relies on three crates, namely concrete-boolean, concrete-shortint, and concrete-integer. Below, we will be walking you through the major features that we are introducing today.
General Updates
All crates are now based on the latest concrete-core release. This offers many advantages:
- The concrete-core-experimental crate is now deprecated;
- Fast Fourier transforms computations relies on the new concrete-fft instead of FFTW;
- The key generation is now parallelised: this drastically improves the required time to generate new keys. Basically, the timings are divided by the number of available cores;
- Native support of Apple Silicon architectures: by using a nightly version of the Rust compiler and aarch64 target architecture.
Concrete-boolean & concrete-integer
Regarding concrete-boolean, the main novelty lies in the support of the GPU to compute homomorphic boolean operations via the concrete-cuda integration. This feature can easily be activated using a compile flag (more details can be found in the Git repository).
The major upgrade of concrete-integer is that it is now possible to easily evaluate functions over large integers. This is based on the WoPBS (an acronym for Without Padding Programmable Bootstrapping), a new cryptographic approach generalizing the classical PBS.
In practice, it allows to compute univariate functions over 16-bit integers, and bivariate functions over smaller sizes (e.g., 10-bits integers). One other advantage of the WoPBS is that it is agnostic from the underlying integer representation (i.e., Radix or CRT-based). More cryptographic details can be found in the research report: Parameter Optimization & Larger Precision for (T)FHE.
In order to make this feature easily used, the functions generating the Look-Up Table (LUT) associated with the function that should be computed using the WoPBS have been added. As for the PBS, there are automatic LUT generations for each integer flavor (i.e., for the radix and CRT decompositions). Still concerning new functionalities, many CRT-based operations now complete the already existing ones. For instance, it is now possible to compute negations, subtractions or scalar operations.
Most of the operations now have a parallelized version, in order to offer better performance. Note that the overall gain depends on the operation and the chosen decomposition.
Finally, the API has been updated to offer dedicated ciphertext types, i.e., RadixCiphertext and CrtCiphertext. It now offers a protection over the mix-and-matches between the operations and the ciphertext type.
Concrete
Using the concrete-integer new functionalities, the Concrete frontend offers the possibility to compute functions over integers. The changes over underlying cryptographic primitives are completely hidden in the API: the same syntax is used for any proposed types. By default, the parallelized version of operations is provided. This means that an already existing program using large precision will have better performance without requiring any changes. For the sake of versatility, it is now possible to use a CRT decomposition in concrete by defining a new homomorphic type. Despite being a more advanced feature, using this approach might offer performance improvements for many use-cases.
Additional Links