TFHE-rs v0.6:零知识支持和 GPU 上的有符号整数运算

  • ZamaFHE
  • 发布于 2024-04-09 16:48
  • 阅读 158

TFHE-rs v0.6 版本引入了零知识证明技术,增强了 GPU 对有符号整数运算的支持,并引入了加密随机数生成等新的加密功能。该版本现在包含 Marc Joye 提出的公钥方案,并生成零知识证明以验证公钥加密过程的正确性。此外,新版本还支持 GPU 上的有符号整数运算,并改进了 GPU 用户的多位 PBS。

TFHE-rs v0.6 引入了一种补充 FHE 的密码学技术,称为零知识证明。此外,此版本还增强了对有符号整数运算的 GPU 支持。此外,它还引入了额外的密码学特性,例如加密随机数的生成。

用于紧凑公钥加密的零知识证明

除了标准的私钥设置外,TFHE-rs 现在还包含 Marc Joye 的工作 中描述的公钥方案。这种方法允许任何人加密密文,因此在某些情况下,证明加密已正确执行至关重要。最新版本的 TFHE-rs 能够生成零知识证明,以验证公钥加密过程是否已正确执行。换句话说,证明的创建不会泄露有关加密消息的任何信息,除了其已知的范围。这项技术源自 Benoit Libert 的工作

部署此功能非常简单:客户端在加密时生成证明,而服务器在进行同态计算之前对其进行验证。以下是一个示例,演示了客户端如何加密和证明密文,以及服务器如何验证密文并对其进行计算:

use rand::prelude::*;
use tfhe::prelude::FheDecrypt;
use tfhe::set_server_key;
use tfhe::zk::{CompactPkeCrs, ZkComputeLoad};

pub fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut rng = thread_rng();

    let max_num_message = 1;

    let params = tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_TUNIFORM_2M40;

    let client_key = tfhe::ClientKey::generate(tfhe::ConfigBuilder::with_custom_parameters(params, None));
    // This is done in an offline phase and the CRS is shared to all clients and the server
    // 这是在离线阶段完成的,并且 CRS 将共享给所有客户端和服务器
    let crs = CompactPkeCrs::from_shortint_params(params, max_num_message).unwrap();
    let public_zk_params = crs.public_params();
    let server_key = tfhe::ServerKey::new(&client_key);
    let public_key = tfhe::CompactPublicKey::try_new(&client_key).unwrap();

    let clear_a = rng.gen::();
    let clear_b = rng.gen::();

    let a = tfhe::ProvenCompactFheUint64::try_encrypt(
        clear_a,
        public_zk_params,
        &public_key,
        ZkComputeLoad::Proof,
    )?;
    let b = tfhe::ProvenCompactFheUint64::try_encrypt(
        clear_b,
        public_zk_params,
        &public_key,
        ZkComputeLoad::Proof,
    )?;

    // Server side
    // 服务端
    let result = {
        set_server_key(server_key);

        // Verify the ciphertexts
        // 验证密文
        let a = a.verify_and_expand(&public_zk_params, &public_key)?;
        let b = b.verify_and_expand(&public_zk_params, &public_key)?;

        a + b
    };

    // Back on the client side
    // 回到客户端
    let a_plus_b: u64 = result.decrypt(&client_key);
    assert_eq!(a_plus_b, clear_a.wrapping_add(clear_b));

    Ok(())
}

在模拟客户端的 Dell XPS 15 9500 上,加密和证明 FheUint64 需要 6.9 秒。另一方面,在使用更便宜的验证模式下,在 AWS 上提供的 hpc7a.96xlarge 上,验证仅需 123 毫秒即可完成。

还有另一种具有更广泛验证的模式,在这种模式下,在同一台笔记本电脑上生成证明仅需 2.5 秒,在同一 AWS 实例上验证需要 467 毫秒。

增强的 GPU 支持

此版本引入了对 GPU 上的有符号整数运算的支持,以及:

  • 无符号和有符号标量乘法,
  • 无符号和有符号加密移位和旋转,
  • 无符号溢出减法。

由于新的 C API 包装了 GPU 上的整数算术运算,因此现在可以实现跨语言支持。

此版本还带来了性能改进:多位 PBS(又名 多线程 PBS)支持已稳定,现在建议 GPU 用户使用,因为它比经典 PBS 快得多。它确实是一种用于 PBS 的算法,可以暴露更多的并行性,因此它在 GPU 上的性能优于 CPU。以下是如何使用它的示例:

use tfhe::{ConfigBuilder, set_server_key, FheUint8, ClientKey, CompressedServerKey};
use tfhe::prelude::*;
use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS;

fn main() {

    let config = ConfigBuilder::with_custom_parameters(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, None).build();

    let client_key= ClientKey::generate(config);
    let compressed_server_key = CompressedServerKey::new(&client_key);

    let gpu_key = compressed_server_key.decompress_to_gpu();

    let clear_a = 27u8;
    let clear_b = 128u8;

    let a = FheUint8::encrypt(clear_a, &client_key);
    let b = FheUint8::encrypt(clear_b, &client_key);

    //Server-side
    //服务端

    set_server_key(gpu_key);
    let result = a + b;

    //Client-side
    //客户端
    let decrypted_result: u8 = result.decrypt(&client_key);

    let clear_result = clear_a + clear_b;

    assert_eq!(decrypted_result, clear_result);
}

此外,随着 LLM 训练和推理的兴起,H100 GPU 变得越来越容易和便宜地访问,并且比以前针对的 V100 GPU 提供更高的计算吞吐量。TFHE-rs v0.6 中增强了 H100 支持,并且这些 GPU 现在已在参考基准测试结果中作为目标,如表 1 所示。

在单个 H100 上,GPU 性能现在非常接近用作参考的高端 CPU 的性能。

其他

最新版本的 TFHE-rs 还包括新操作、新噪声分布和其他一些增强功能:

  • 支持前导/尾随零/一和 log2;
  • 实现检查除法,返回一个加密标志,指示除数是否等于 0;
  • 将乘法速度提高 8%,现在 64 位整数的运行时间为 366 毫秒;
  • 引入一个计数器来跟踪 PBS 执行次数;
  • 添加了对 TUniform 噪声分布的支持。

对于即将发布的版本,重点将转移到减少密文的大小,并引入对多 GPU 计算的支持,以进一步提高性能。

其他链接

  • 原文链接: zama.ai/post/tfhe-rs-v0-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ZamaFHE
ZamaFHE
Zama是一家开源密码学公司,专注于为区块链和人工智能构建最先进的完全同态加密(FHE)解决方案。