#encryption-key #homomorphic-encryption #encryption

tfhe

TFHE-rs是一个完全同态加密(FHE)库,实现了Zama的TFHE变体

32个版本 (8个重大更改)

0.8.0-alpha.3 2024年8月19日
0.8.0-alpha.22024年7月29日
0.7.2 2024年7月19日
0.5.3 2024年2月28日
0.1.4 2022年11月16日

#99 in 密码学

Download history 220/week @ 2024-05-01 192/week @ 2024-05-08 326/week @ 2024-05-15 230/week @ 2024-05-22 255/week @ 2024-05-29 187/week @ 2024-06-05 459/week @ 2024-06-12 497/week @ 2024-06-19 427/week @ 2024-06-26 337/week @ 2024-07-03 407/week @ 2024-07-10 492/week @ 2024-07-17 421/week @ 2024-07-24 521/week @ 2024-07-31 441/week @ 2024-08-07 207/week @ 2024-08-14

1,716 每月下载量
用于 2 crates

BSD-3-Clause-Clear

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-rs 教程Awesome Zama 仓库中探索更多有用的资源

文档

完整的综合文档可在此处找到: https://docs.zama.ai/tfhe-rs

↑ 返回顶部

使用 TFHE-rs

免责声明

安全性评估

使用 Lattice Estimatorred_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 贡献

成为批准的贡献者需要签署我们的贡献者许可协议(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