32个版本 (8个重大更改)
新 0.8.0-alpha.3 | 2024年8月19日 |
---|---|
0.8.0-alpha.2 | 2024年7月29日 |
0.7.2 | 2024年7月19日 |
0.5.3 | 2024年2月28日 |
0.1.4 | 2022年11月16日 |
#99 in 密码学
1,716 每月下载量
用于 2 crates
8MB
153K SLoC
📒 文档 | 💛 社区支持 | 📚 Zama的FHE资源
关于
什么是TFHE-rs
TFHE-rs是TFHE在布尔和整数算术上加密数据的纯Rust实现。
它包括
- 一个 Rust API
- 一个 C API
- 以及一个 客户端WASM API
TFHE-rs旨在为想要完全控制TFHE功能的开发人员和研究人员提供,同时无需担心底层实现。目标是拥有一个稳定、简单、高性能且可用于生产的TFHE高级功能库。
主要功能
- 底层密码学库,实现了Zama的TFHE变体,包括可编程引导
- TFHE原始布尔API的实现,可以作为其他TFHE库的替代品使用
- 短整数API,允许使用多达8位消息空间的精确、无界的FHE整数算术
- 高效的公钥加密
- 密文和服务器密钥压缩,用于高效的数据传输
- 完整的Rust API,C绑定到Rust高级API,以及使用WASM的客户端JavaScript API.
在文档中了解更多关于TFHE-rs功能的信息。
目录
入门
Cargo.toml配置
要在您的项目中使用 TFHE 的最新版本 TFHE-rs
,您首先需要将其添加到 Cargo.toml
中的依赖项
- 适用于基于 x86_64 的运行类 Unix 操作系统的机器
tfhe = { version = "*", features = ["boolean", "shortint", "integer", "x86_64-unix"] }
- 适用于苹果硅或基于 aarch64 的运行类 Unix 操作系统的机器
tfhe = { version = "*", features = ["boolean", "shortint", "integer", "aarch64-unix"] }
- 适用于具有
rdseed 指令
的基于 x86_64 的机器,且正在运行 Windows
tfhe = { version = "*", features = ["boolean", "shortint", "integer", "x86_64"] }
[!Note] 注意:您需要使用 Rust 版本 >= 1.73 来编译 TFHE-rs。
[!Note] 注意:由于目前缺少用于 TFHE-rs 中的加密的加密安全伪随机数生成器 (CSPRNG) 的种子源,基于 aarch64 的机器尚未支持 Windows。
一个简单的示例
以下是一个完整示例
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint32, FheUint8};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Basic configuration to use homomorphic integers
let config = ConfigBuilder::default().build();
// Key generation
let (client_key, server_keys) = generate_keys(config);
let clear_a = 1344u32;
let clear_b = 5u32;
let clear_c = 7u8;
// Encrypting the input data using the (private) client_key
// FheUint32: Encrypted equivalent to u32
let mut encrypted_a = FheUint32::try_encrypt(clear_a, &client_key)?;
let encrypted_b = FheUint32::try_encrypt(clear_b, &client_key)?;
// FheUint8: Encrypted equivalent to u8
let encrypted_c = FheUint8::try_encrypt(clear_c, &client_key)?;
// On the server side:
set_server_key(server_keys);
// Clear equivalent computations: 1344 * 5 = 6720
let encrypted_res_mul = &encrypted_a * &encrypted_b;
// Clear equivalent computations: 6720 >> 5 = 210
encrypted_a = &encrypted_res_mul >> &encrypted_b;
// Clear equivalent computations: let casted_a = a as u8;
let casted_a: FheUint8 = encrypted_a.cast_into();
// Clear equivalent computations: min(210, 7) = 7
let encrypted_res_min = &casted_a.min(&encrypted_c);
// Operation between clear and encrypted data:
// Clear equivalent computations: 7 & 1 = 1
let encrypted_res = encrypted_res_min & 1_u8;
// Decrypting on the client side:
let clear_res: u8 = encrypted_res.decrypt(&client_key);
assert_eq!(clear_res, 1_u8);
Ok(())
}
要运行此代码,请使用以下命令
cargorun --release
[!Note] 注意:当运行使用
TFHE-rs
的代码时,强烈建议使用 cargo 的--release
标志以发布模式运行,以获得最佳性能。
在文档的这部分找到带有更多解释的示例
资源
TFHE 深入研究
- TFHE 深入研究 - 第一部分 - 密文类型
- TFHE 深入研究 - 第二部分 - 编码和线性分层操作
- TFHE 深入研究 - 第三部分 - 密钥切换和分层乘法
- TFHE 深入研究 - 第四部分 - 可编程引导
教程
- [视频教程] 使用 TFHE-rs 实现有符号整数
- 同态奇偶校验位
- 同态在 ASCII 字符串上的大小写转换
- 使用 TFHE-rs 的布尔 SHA256
- 使用 TFHE-rs 的暗网
- 使用 TFHE-rs 的正则表达式引擎
在TFHE-rs 教程和Awesome Zama 仓库中探索更多有用的资源
文档
完整的综合文档可在此处找到: https://docs.zama.ai/tfhe-rs。
使用 TFHE-rs
免责声明
安全性评估
使用 Lattice Estimator 和 red_cost_model = reduction.RC.BDGL16
进行安全性评估。
当 Lattice Estimator 发布新更新时,我们将相应地更新参数。
安全模型
TFHE-rs 库的默认参数是在考虑 IND-CPA 安全模型的情况下选择的,并且选择了具有固定引导失败概率 p_error = $2^{-64}$ 的参数。特别是,假设解密计算的结果不会被密钥持有者与任何第三方共享,因为此类行为可能导致秘密加密密钥泄露。如果您正在设计必须共享解密结果的应用程序,则需要设计自定义加密参数,这些参数是在考虑 IND-CPA^D 安全模型 [1] 的情况下选择的。
[1] Li, Baiyu, et al. "Securing approximate homomorphic encryption using differential privacy." Annual International Cryptology Conference. Cham: Springer Nature Switzerland, 2022. https://eprint.iacr.org/2022/816.pdf
侧信道攻击
TFHE-rs 中尚未实现侧信道攻击的缓解措施,将在未来的版本中发布。
引用
要在学术论文中引用 TFHE-rs,请使用以下条目
@Misc{TFHE-rs,
title={{TFHE-rs: A Pure Rust Implementation of the TFHE Scheme for Boolean and Integer Arithmetics Over Encrypted Data}},
author={Zama},
year={2022},
note={\url{https://github.com/zama-ai/tfhe-rs}},
}
贡献
有两种方式可以向 TFHE-rs 贡献
- 打开问题 报告错误和拼写错误,或提出新想法
- 通过发送邮件至 [email protected] 申请成为官方贡献者。
成为批准的贡献者需要签署我们的贡献者许可协议(CLA)。只有批准的贡献者才能发送拉取请求,请在操作前确保与我们取得联系!
许可证
本软件在 BSD-3-Clause-Clear 许可下分发。有关更多详细信息,请参阅 此处。
常见问题解答(FAQ)
Zama 的技术是免费使用的吗?
在 BSD 3-Clause Clear 许可下,Zama 的库可用于开发、研究、原型设计和实验目的。然而,对于 Zama 开源代码的任何商业用途,公司必须购买 Zama 的商业专利许可。
我们的一切都是开源的,我们对用户意味着非常透明。您可以在 这篇博客文章 中了解更多关于我们在 Zama 如何货币化我们的开源产品的信息。
我想用 Zama 的技术进行商业用途,我需要做什么?
要商业使用 Zama 的技术,您需要获得 Zama 的专利许可。请通过 [email protected] 联系我们获取更多信息。
您在技术上申请知识产权吗?
是的,Zama 的所有技术都是专利的。
您可以为我的特定用例定制解决方案吗?
我们愿意与我们的合作伙伴合作,共同推进 FHE 领域。如果您有特定需求,请通过 [email protected] 邮件联系我们。
支持
🌟 如果您觉得这个项目很有帮助或很有趣,请考虑在 GitHub 上给它一个星标!您的支持有助于社区的增长并激励进一步的开发。
依赖关系
~6–11MB
~209K SLoC