6个版本
0.1.5 | 2020年12月4日 |
---|---|
0.1.4 | 2020年12月4日 |
0.1.3 | 2020年11月20日 |
0.1.0 | 2020年10月1日 |
#757 in 密码学
2MB
28K SLoC
警告
开发已转移到concrete crate。请注意,您的Cargo.toml
文件具有正确的以下依赖项
[dependencies]
concrete = "^0.1"
我们感谢Daniel May支持此项目并捐赠了Concrete crate。
Concrete通过扩展TfhE快速在密文中运行
Concrete是一个完全同态加密(FHE)库,实现了TFHE的Zama变体。Concrete基于学习错误(LWE)问题和环学习错误(RLWE)问题,这些是研究良好的密码学硬度假设,被认为是安全的,甚至对量子计算机也是如此。
要使用Concrete,您必须安装Rust,FFTW并将concrete添加到依赖项列表。
链接
Rust安装
要在Linux或Macos上安装rust,您可以执行以下操作
curl --tlsv1.2 -sSf https://sh.rustup.rs | sh
如果您想了解其他rust安装方法,请参阅rust网站。
FFTW和openssl安装
您还需要安装FFTW和openssl库。
MacOS
安装 fftw 最直接的方法是使用 Homebrew Formulae。要安装 Homebrew,您可以执行以下操作:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
然后安装 FFTW 和 openssl。
brew install fftw
brew install openssl
Linux
要在基于 Debian 的发行版上安装 FFTW,您可以执行以下操作
sudo apt-get update && sudo apt-get install -y libfftw3-dev libssl-dev
从源代码
如果您想直接从源代码安装 FFTW,可以遵循 FFTW 网站上的说明。
在您的项目中使用 concrete
您需要在 Rust 项目中 将 Concrete 库作为依赖项添加。
要这样做,只需在 Cargo.toml
文件中添加依赖项。这里是一个 简单示例
[package]
name = "play_with_fhe"
version = "0.1.0"
authors = ["FHE Curious"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.net.cn/cargo/reference/manifest.html
[dependencies]
concrete_lib = "0.1"
现在,您可以使用 cargo build
命令来编译您的项目,这将获取 Concrete 库。
您还可以通过克隆此存储库并运行来从源代码构建库
cd concrete
make build
测试
要运行测试,您可以执行以下操作
cd concrete
make test
示例
use concrete_lib::*;
use crypto_api::error::CryptoAPIError;
fn main() -> Result<(), CryptoAPIError> {
// generate a secret key
let secret_key = LWESecretKey::new(&LWE128_630);
// the two values to add
let m1 = 8.2;
let m2 = 5.6;
// specify the range and precision to encode messages into plaintexts
// here we encode in [0, 10[ with 8 bits of precision and 1 bit of padding
let encoder = Encoder::new(0., 10., 8, 1)?;
// encode the messages into plaintexts
let p1 = encoder.encode_single(m1)?;
let p2 = encoder.encode_single(m2)?;
// encrypt plaintexts
let mut c1 = VectorLWE::encrypt(&secret_key, &p1)?;
let c2 = VectorLWE::encrypt(&secret_key, &p2)?;
// add the two ciphertexts homomorphically
c1.add_with_padding_inplace(&c2)?;
// decrypt and decode the result
let m3 = c1.decrypt_decode(&secret_key)?;
// print the result and compare to non-FHE addition
println!("Real: {} + {} = {}", m1, m2, m1 + m2);
println!(
"FHE: {} + {} = {}",
p1.decode()?[0],
p2.decode()?[0],
m3[0]
);
Ok(())
}
致谢
此库使用多个依赖项,我们感谢这些库的贡献者
-
FFTW (rust 封装) : Toshiki Teramura (GPLv3)
-
FFTW (lib) : M. Frigo 和 S. G. Johnson (GPLv3)
-
kolmogorov_smirnov: D. O. Crualaoich (Apache 2.0)
-
openssl (rust 封装): S. Fackler (Apache-2.0)
-
openssl (lib)
-
serde: E. Tryzelaar 和 D. Tolnay (MIT 或 Apache 2.0)
-
colored: T. Wickham (MPL-2.0)
我们还使用了一些由 The Rust Project Developers
发布的、MIT 或 Apache 2.0 许可证的 crate
许可证
本软件根据 AGPL-v3 许可证分发。如果您有任何疑问,请联系我们 [email protected]。
依赖项
~8–20MB
~246K SLoC