TFHE-rs v0.6 版本引入了零知识证明技术,增强了 GPU 对有符号整数运算的支持,并引入了加密随机数生成等新的加密功能。该版本现在包含 Marc Joye 提出的公钥方案,并生成零知识证明以验证公钥加密过程的正确性。此外,新版本还支持 GPU 上的有符号整数运算,并改进了 GPU 用户的多位 PBS。
/
2024 年 4 月 8 日
-
Jean-Baptiste Orfila, Arthur Meyre, Agnes Leroy
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 上的有符号整数运算的支持,以及:
由于新的 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 还包括新操作、新噪声分布和其他一些增强功能:
对于即将发布的版本,重点将转移到减少密文的大小,并引入对多 GPU 计算的支持,以进一步提高性能。
[视频教程] 使用 TFHE-rs 在同态计算上实现 GPU 加速 \ 在本教程中,Zama 团队成员 Agnes Leroy 向你展示如何使用 TFHE-rs 实现 GPU 加速。 2024 年 5 月 6 日\ \ Agnes Leroy
TFHE-rs
教程
Zama 产品发布 - 2024 年 4 月 \ 随时了解 Zama 2024 年 4 月的产品发布,其中包括 TFHE-rs、Concrete、Concrete ML 和 fhEVM 的进展... 2024 年 4 月 9 日\ \ Zama 团队
公告
Concrete ML v1.5:加密数据帧和更快的神经网络 \ Concrete ML v1.5 引入了新的 DataFrame API 和一个加速神经网络的新选项。 2024 年 4 月 8 日\ \ Andrei Stoian
公告
Concrete ML
Concrete v2.6:近似 PBS、输入压缩、扩展可组合函数、速度改进 \ Concrete v2.6 引入了近似可编程自举 (PBS)、输入压缩和其他增强功能。 2024 年 4 月 8 日\ \ Quentin Bourgerie
公告
Concrete
fhEVM v0.4:新的加密类型和异步解密 \ fhEVM v0.4 引入了新的加密类型、新的异步解密 API 和标准 fhEVM 合约库。 2024 年 4 月 8 日\ \ Clément Danjou
公告
fhEVM
Concrete ↗ Concrete ML ↗ FHEVM ↗ TFHE-rs ↗
博客 文档 ↗ GITHUB ↗ FHE 资源 ↗ 研究论文 ↗ 赏金计划 ↗ FHE 状态操作系统
与专家交谈 联系我们 X Discord Telegram 所有社区渠道
在电子时代,隐私对于一个开放的社会是必要的。隐私不是秘密。私事是不想让全世界知道的事情,但秘密事是任何人都不想知道的事情。隐私是选择性地向世界展示自己的力量。如果双方有某种交易,那么每一方都会记住他们的互动。每一方都可以谈论他们自己对这件事的记忆; 谁能阻止呢?你可以通过立法来反对它,但言论自由,甚至比隐私更重要,对一个开放的社会至关重要; 我们不寻求限制任何言论。如果许多方在同一个论坛中一起发言,每个人都可以向所有其他人发言,并将关于个人和其他方的知识汇总在一起。电子通信的力量促成了这种群体言论,它不会仅仅因为我们可能希望它消失而消失。既然我们渴望隐私,我们必须确保交易的每一方只知道该交易直接需要的知识。既然任何信息都可以被说出,我们必须确保我们尽可能少地透露信息。在大多数情况下,个人身份并不重要。当我在商店购买一本杂志,并将现金交给店员时,没有必要知道我是谁。当我要求我的电子邮件供应商发送和接收消息时,我的供应商不需要知道我和谁说话,我说了什么,或者其他人对我说什么; 我的供应商只需要知道如何将消息发送到那里,以及我欠他们多少费用。当我的身份被交易的底层机制泄露时,我就没有隐私了。我不能在这里选择性地展示自己; 我必须总是暴露自己。因此,在一个开放的社会中,隐私需要匿名交易系统。到目前为止,现金一直是主要的此类系统。匿名交易系统不是秘密交易系统。匿名系统使个人能够在需要时以及仅在需要时才透露自己的身份; 这是隐私的本质。在一个开放的社会中,隐私也需要密码学。如果我说了一些话,我希望只有我打算让听的人听到。如果我的讲话内容对全世界公开,我就没有隐私。加密是为了表达对隐私的渴望,而用弱加密来加密是为了表明对隐私没有太多的渴望。此外,当默认是匿名时,要有保证地揭示自己的身份,就需要密码签名。我们不能期望政府、公司或其他大型的、没有面孔的组织出于好意而给予我们隐私。对他们来说,谈论我们是有利的,我们应该期望他们会谈论。试图阻止他们的言论是与信息的现实作斗争。信息不仅仅是想要自由,它渴望自由。信息会扩展以填充可用的存储空间。信息是谣言的年轻的、更强大的表弟; 信息比谣言跑得更快,眼睛更多,知道的更多,但理解的更少。如果我们希望拥有隐私,我们必须捍卫自己的隐私。我们必须走到一起,创建允许进行匿名交易的系统。几个世纪以来,人们一直在用耳语、黑暗、信封、紧闭的门、秘密握手和信使来捍卫自己的隐私。过去的技术不允许强大的隐私,但电子技术允许。我们这些密码朋克致力于建立匿名系统。我们正在用密码学、匿名邮件转发系统、数字签名和电子货币来捍卫我们的隐私。密码朋克编写代码。我们知道必须有人编写软件来捍卫隐私,而且因为除非我们都这样做,否则我们无法获得隐私,所以我们将编写它。我们发布我们的代码,以便我们的密码朋克伙伴可以练习和使用它。我们的代码对全世界所有人免费使用。如果你不赞成我们编写的软件,我们不太关心。我们知道软件是无法摧毁的,而且一个广泛 распространения 的系统是无法关闭的。密码朋克谴责对密码学的监管,因为加密从根本上说是一种私人行为。事实上,加密行为将信息从公共领域移除。即使是反对密码学的法律也只触及到一个国家的边界和它的暴力手臂。密码学将不可避免地传播到全球,并随之传播它所实现的匿名交易系统。为了使隐私得到广泛应用,它必须成为社会契约的一部分。人们必须走到一起,为了共同利益而部署这些系统。隐私的延伸程度仅限于社会中同伴的合作程度。我们这些密码朋克寻求你们的问题和你们的担忧,并希望我们能够与你们互动,这样我们就不会欺骗自己。但是,我们不会因为有些人不同意我们的目标而改变我们的目标。密码朋克们正在积极地使网络更安全,以保护隐私。让我们一起加快步伐。前进。作者:Eric Hughes。1993 年 3 月 9 日。
- 原文链接: zama.ai/post/tfhe-rs-v0-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!