8 releases
0.3.0 | Oct 19, 2022 |
---|---|
0.2.2 | Jul 6, 2022 |
0.2.1 | Apr 6, 2022 |
0.2.0 | Feb 1, 2022 |
0.1.6 | Mar 25, 2021 |
#2497 in Cryptography
49 downloads per month
Used in concrete-core-experimenta…
4MB
63K
SLoC
Concrete Noise Propagation Estimator
This crate contains tools to estimate the propagation of noise in ciphertexts, for the homomorphic operators defined in the concrete-core library, you can find it here in this repo.
Links
License
This software is distributed under the BSD-3-Clause-Clear license. If you have any questions,
please contact us at hello@zama.ai
.
lib.rs
:
Welcome the the concrete-npe
documentation!
Description
This library makes it possible to estimate the noise propagation after homomorphic operations. It makes it possible to obtain characteristics of the output distribution of the noise, that we call dispersion, which regroups the variance and expectation. This is particularly useful to track the noise growth during the homomorphic evaluation of a circuit. The explanations and the proofs of these formula can be found in the appendices of the article Improved Programmable Bootstrapping with Larger Precision and Efficient Arithmetic Circuits for TFHE by Ilaria Chillotti, Damien Ligier, Jean-Baptiste Orfila and Samuel Tap.
Quick Example
The following piece of code shows how to obtain the variance $\sigma_{add}$ of the noise after a simulated homomorphic addition between two ciphertexts which have variances $\sigma_{ct_1}$ and $\sigma_{ct_2}$, respectively.
Example:
use concrete_core::prelude::{DispersionParameter, Variance};
use concrete_npe::estimate_addition_noise;
//We suppose that the two ciphertexts have the same variance.
let var1 = Variance(2_f64.powf(-25.));
let var2 = Variance(2_f64.powf(-25.));
//We call the npe to estimate characteristics of the noise after an addition
//between these two variances.
//Here, we assume that ciphertexts are encoded over 64 bits.
let var_out = estimate_addition_noise::<_, _>(var1, var2, 64);
println!("Expect Variance (2^24) = {}", 2_f64.powi(-24));
println!("Output Variance {}", var_out.get_variance());
assert!((2_f64.powi(-24) - var_out.get_variance()).abs() < 0.0001);