当前位置: 首页 > article >正文

Zama TFHE-rs v1.0 发布

1. 引言

2025年2月,Zama 发布了 TFHE-rs v1.0,这是 TFHE-rs 库的第一个稳定版本。这标志着一个重要的里程碑,稳定了 x86 CPU 后端的高级 API,同时确保了向后兼容性。——即,现在可以依赖 TFHE-rs API,而不必担心未来更新中出现重大变化。

此版本中最显著的改进是:

  • 关键参数的细化,这增强了密码学安全性,保留了性能并优化了它们以用于分布式协议。
  • 还引入了官方手册和简化的贡献流程。

值得注意的是,计算错误的概率已降至 2 − 128 2^{ -128} 2128 以下,同时保持了性能。从实际角度来看,这意味着发生错误的可能性与破坏现代密码学标准一样微不足道。

2. TFHE-rs 手册第一版

随着 TFHE-rs v1.0 的发布,Zama 发布了其TFHE-rs 手册的第一版,详细介绍了后端的所有实现。

TFHE-rs 手册涵盖:

  • 底层算法,包括引导等低级操作;
  • 实现同态整数级别运算的方法和算法,特别是针对 FheUint 和 FheInt;
  • 关键功能的实现细节,如压缩;
  • 深入的技术基准,以供进一步分析。

另一个重要点是,与文档不同,该手册重点关注高斯噪声分布​​,与学术文献中使用的标准定义一致。

3. 细化密码学参数,以实现最高安全级别

此版本的一个核心增强功能是密码学参数的改进,将计算错误的概率从小于 2 − 64 2^{-64} 264 降低到小于 2 − 128 2^{ -128} 2128

尽管密码学参数通常对用户隐藏,但它们对于 TFHE-rs 来说至关重要,可确保计算的安全性、效率和正确性。

直到最近,TFHE-rs 的标准参数集才保证了计算正确性,错误概率低于 2 − 64 2^{ -64} 264 ——对于传统的client-server用例来说,几乎可以忽略不计。然而,最近的研究表明,在加密和解密数据都可能被访问的情况下,某些理论上的攻击可能会出现。虽然以前的参数集在计算上仍然不可行 ——平均需要 2 63 2^{63} 263 次计算才能成功——但此更新进一步增强了对此类可能性的安全性。

Zama 设计了 ​​TFHE-rs,为所有应用程序提供最高级别的安全性。借助 TFHE-rs v1.0,密码学参数已得到改进,可将计算错误概率降低到 2 − 128 2^{ -128} 2128 以下,符合标准密码学安全级别并确保稳健性——即使在分布式协议中也是如此。

通常,将故障概率从 2 − 64 2^{-64} 264 降低到 2 − 128 2^{ -128} 2128 至少会使计算时间增加一倍。然而,TFHE-rs 通过实施一种称为drift mitigation漂移缓解的新技术将减速限制在 10% 左右(详情见2024年论文《Drifting Towards Better Error Probabilities in Fully Homomorphic Encryption Schemes》)。

由于 TFHE-rs 是 Zama 区块链协议的支柱,开发人员可以使用 FHE 编写机密智能合约。此新版本旨在更好地支持分布式协议(其中私钥和公钥生成可能由多个用户共享),TFHE-rs v1.0 现在默认使用 TUniform 噪声分布——Uniform 的这种变体避免了高斯分布施加的约束。

对于喜欢传统方法的用户,基于高斯分布的密码学参数仍然可用。

TFHE-rs 文档提供了有关选择密码学参数和理解不同分布的全面指导,详情参见Zama->FHE Computation->Core workflow->Parameters。

为了获得更深入的技术见解,使用新参数集执行的基准测试(包括整数运算和引导等低级操作的基准测试)也可在Zama->Get Started->Benchmarks->CPU Benchmarks->Integer文档中获取。

4. 一个实际的例子

下面是如何在client-server设置中使用 TFHE-rs 的简单演示。

为了使这个例子简单明了,有意省略了一些高级功能,比如公钥加密及其相关的零知识证明——这些功能通常用于分布式环境中,让用户共享一个通用加密密钥并验证密文是否正确形成。

此示例重点关注核心工作流程,模拟客户端和服务器之间的交互:

  • 1)客户端加密:客户端使用其私钥加密数据并将密文发送给服务器。
  • 2)服务器端计算:服务器在不访问明文的情况下处理加密数据。如果需要,它可以压缩数据进行存储,稍后再解压以进行进一步的同态运算。
  • 3)客户端解密:计算完成后,服务器将加密结果返回给客户端,客户端解密得到最终输出。
use tfhe::prelude::*;
use tfhe::shortint::parameters::{COMP_PARAM_MESSAGE_2_CARRY_2, PARAM_MESSAGE_2_CARRY_2};
use tfhe::{set_server_key, CompressedCiphertextListBuilder, FheAsciiString, FheBool, FheInt64, FheUint16,FheUint2, FheUint32,
};fn main() {// Use aliases for ease of use, do not use aliases for production (not stable through time)let config = tfhe::ConfigBuilder::with_custom_parameters(PARAM_MESSAGE_2_CARRY_2).enable_compression(COMP_PARAM_MESSAGE_2_CARRY_2).build();// On the client side, generate the ClientKey, must remain SECRETlet client_key = tfhe::ClientKey::generate(config);// Also generate the ServerKey which will allow the server to perform computations, this one is// sent to the serverlet server_key = tfhe::ServerKey::new(&client_key);// Encrypt some values required by service providerlet ct1 = FheUint32::encrypt(17_u32, &client_key);let ct2 = FheInt64::encrypt(-1i64, &client_key);let ct3 = FheBool::encrypt(false, &client_key);let ct4 = FheUint2::encrypt(3u8, &client_key);let ct5 = FheAsciiString::encrypt("1.0!", &client_key);// On the server side, once the server key has been received, set it as the active keyset_server_key(server_key);// The server does some computations without seeing the datalet ct1_res = ct1 + 25;let ct2_res = 43 + ct2;let ct3_res = ct3 & true;let ct4_res = ct4 - 1;let ct5_res = ct5.len().into_ciphertext();// We can compress the data to send or store smaller amounts of data to the clientlet compressed_list = CompressedCiphertextListBuilder::new().push(ct1_res).push(ct2_res).push(ct3_res).push(ct4_res).push(ct5_res).build().unwrap();// On the client side after receiving the compressed datalet a: FheUint32 = compressed_list.get(0).unwrap().unwrap();let b: FheInt64 = compressed_list.get(1).unwrap().unwrap();let c: FheBool = compressed_list.get(2).unwrap().unwrap();let d: FheUint2 = compressed_list.get(3).unwrap().unwrap();let e: FheUint16 = compressed_list.get(4).unwrap().unwrap();let a: u32 = a.decrypt(&client_key);assert_eq!(a, 42);let b: i64 = b.decrypt(&client_key);assert_eq!(b, 42);let c = c.decrypt(&client_key);assert!(!c);let d: u8 = d.decrypt(&client_key);assert_eq!(d, 2);let e: u16 = e.decrypt(&client_key);assert_eq!(e, 4);// The compressed data can be reused by the server if it kept it on disklet recovered_a: FheUint32 = compressed_list.get(0).unwrap().unwrap();let new_a = recovered_a << 4u32;// The result can be sent uncompressed to the Client, which can also decrypt this new resultlet new_a: u32 = new_a.decrypt(&client_key);assert_eq!(new_a, a << 4);
}

5. 为 TFHE-rs 做贡献

在 Zama,成为一家开源密码公司不仅仅是一项要求,更是其积极拥抱的理念。开放性推动着创新、协作以及Zama技术的持续改进。

TFHE-rs 正是基于这一理念而建立的,主要通过两种方式欢迎贡献:

  • 1)通过 Zama 赏金计划为 TFHE-rs 做出贡献:推进 FHE,一次应对一个挑战
    Zama 赏金计划奖励开发人员解决推动 TFHE-rs 发展的技术挑战。每个季度都会开放一个新的 TFHE-rs 赏金计划,参与者的解决方案通常会为库带来有意义的改进。
    最近的一个例子是同态字符串功能,它最初是作为赏金贡献而来的,后来被整合到主存储库中。得益于这一新增功能,用户现在可以运行以下代码来检查子字符串是否包含在另一个字符串中:
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ClearString, ConfigBuilder, FheAsciiString};fn main() {let config = ConfigBuilder::default().build();let (cks, sks) = generate_keys(config);set_server_key(sks);// Encrypt without padding, does not hide the string length and has better performancelet string = FheAsciiString::try_encrypt("TFHE-rs rocks!", &cks).unwrap();// Encrypt with padding, hide the true length of the stringlet search_string = FheAsciiString::try_encrypt_with_padding("is meh", 1, &cks).unwrap();// We can also use clear stringslet clear_search_string = ClearString::new("rocks".to_string());// Does our initial string contain "is meh"?let does_not_contain = string.contains(&search_string);// Does our initial string contain "rocks"?let contains = string.contains(&clear_search_string);// Decryptlet decrypted_does_not_contain = does_not_contain.decrypt(&cks);let decrypted_contains = contains.decrypt(&cks);// Check all worked properlyassert!(!decrypted_does_not_contain);assert!(decrypted_contains);
}

Zama->FHE Computation->Types->Strings文档中可以找到此新功能的优势的详细比较。
其他几项赏金驱动的贡献也被整合到 TFHE-rs 中,包括同态 SHA-256:

  • SHA-256 示例(整数表示)

  • SHA-256 示例(布尔表示)
    赏金计划下一季即将开启!关注官方赏金计划仓库Zama Bounty Program参与。

  • 2)直接为 TFHE-rs 做出贡献:构建、改进和创新
    引入了简化的贡献流程,让开发者和研究人员能够更轻松地为 TFHE-rs 添加新功能和改进。无论是构建应用程序还是试验新颖的原型,都可以按照以下步骤将相应工作集成到库中:

    • fork存储库并创建一个新的分支;
    • 使你的代码与现有约定保持一致并提交你的更改;
    • 运行测试套件来验证正确性;
    • rebase到主分支的最新版本并打开拉取请求。

    一旦被接受,该贡献将会随着时间的推移而得到维护,就像库中的任何其他功能一样。

6. TFHE-rs 的未来规划

展望未来,TFHE-rs 将朝着两个主要目标发展:

  • 1)以用户为中心的功能——通过引入简化更广泛受众使用的功能,使 FHE 更加直观、更易于访问;
  • 2)性能和硬件支持——集成最先进的优化来改进同态计算。重点是扩展 GPU 后端,它已经是 TFHE-rs 的一部分,现在有望达到 x86 CPU 后端的稳定性和生产就绪状态。

参考资料

[1] 2025年2月27日博客 TFHE-rs v1.0: Stable CPU Backend

相关文章:

Zama TFHE-rs v1.0 发布

1. 引言 2025年2月&#xff0c;Zama 发布了 TFHE-rs v1.0&#xff0c;这是 TFHE-rs 库的第一个稳定版本。这标志着一个重要的里程碑&#xff0c;稳定了 x86 CPU 后端的高级 API&#xff0c;同时确保了向后兼容性。——即&#xff0c;现在可以依赖 TFHE-rs API&#xff0c;而不…...

AArch64架构及其编译器

—1.关于AArch64架构 AArch64是ARMv8-A架构的64位执行状态&#xff0c;支持高性能计算和大内存地址空间。它广泛应用于现代处理器&#xff0c;如苹果的A系列芯片、高通的Snapdragon系列&#xff0c;以及服务器和嵌入式设备。 • 编译器&#xff1a;可以使用GCC、Clang等编译器编…...

【ISP】对于ISP的关键算法补充

本篇是对于ISP的关键算法进行补充说明&#xff0c; 后面我们将开始逐渐深入讨论ISP的pipeline 1. 非局部均值&#xff08;NLM, Non-Local Means&#xff09; 原理 非局部均值&#xff08;NLM&#xff09;是一种基于 块匹配&#xff08;Patch Matching&#xff09; 的去噪算法…...

几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结

在 PyCharm 中创建虚拟环境是一个非常直接的过程&#xff0c;可以帮助你管理项目依赖&#xff0c;确保不同项目之间的依赖不会冲突。 通过 PyCharm 创建虚拟环境 打开 PyCharm 并选择或创建一个项目。 打开项目设置&#xff1a; 在 Windows/Linux 上&#xff0c;可以通过点击…...

Ubuntu安装问题汇总

参考文章&#xff1a; 【Ubuntu常用快捷键总结】 【王道Python常用软件安装指引】 1. 无法连接虚拟设备 sat0:0 【问题】&#xff1a;出现下图所示弹框。 【问题解决】&#xff1a; 点击 “否” 。 点击左上角的 “虚拟机” → “设置…” → “CD/DVD (SATA)” &#xff0c;…...

Ceph(1):分布式存储技术简介

1 分布式存储技术简介 1.1 分布式存储系统的特性 &#xff08;1&#xff09;可扩展 分布式存储系统可以扩展到几百台甚至几千台的集群规模&#xff0c;而且随着集群规模的增长&#xff0c;系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性&#xff1a; 节点…...

从0开始的操作系统手搓教程43——实现一个简单的shell

目录 添加 read 系统调用&#xff0c;获取键盘输入 :sys_read putchar和clear 上班&#xff1a;实现一个简单的shell 测试上电 我们下面来实现一个简单的shell 添加 read 系统调用&#xff0c;获取键盘输入 :sys_read /* Read count bytes from the file pointed to by fi…...

【Spring】基础/体系结构/核心模块

概述&#xff1a; Spring 是另一个主流的 Java Web 开发框架&#xff0c;该框架是一个轻量级的应用框架。 Spring 是分层的 Java SE/EE full-stack 轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse of Control&#xff0c;控制反转&#xff09;和 AOP&#xff08;Aspect…...

01 音视频知识学习(视频)

图像基础概念 ◼像素&#xff1a;像素是一个图片的基本单位&#xff0c;pix是英语单词picture的简写&#xff0c;加上英 语单词“元素element”&#xff0c;就得到了“pixel”&#xff0c;简称px&#xff0c;所以“像素”有“图像元素” 之意。 ◼ 分辨率&#xff1a;是指图像…...

vue3自定义hooks遇到的问题

问题 写了一个输入查询参数和url返回加载中状态、请求方法、接口返回列表的hooks&#xff0c;出现的结果是只有请求方法有效&#xff0c;加载状态无效&#xff0c;接口返回了数据&#xff0c;页面却不显示数据。 代码如下 只展示部分关键代码 import { ref, toRefs, toRef, o…...

用Python和Docker-py打造高效容器化应用管理利器

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着容器化技术的发展,Docker已成为现代化应用部署的核心工具。然而,手动管理容器在规模化场景下效率低下。本文深入探讨如何利用Python结…...

liunx磁盘挂载和jar启动命令

一、磁盘挂载 查看历史磁盘挂载命令&#xff1a;history | grep mount 查看所有挂载硬盘命令&#xff1a;mount 磁盘挂载命令&#xff1a;mount -t cifs -o usernamesh**,passwordP!ss**** //192.168.1.2/attachmentfilesShare2.2/pdfCert /home/nybzg/cnfai1/pdfCert 二、j…...

gbase8s rss集群通信流程

什么是rss RSS是一种将数据从主服务器复制到备服务器的方法 实例级别的复制 (所有启用日志记录功能的数据库) 基于逻辑日志的复制技术&#xff0c;需要传输大量的逻辑日志,数据库需启用日志模式 通过网络持续将数据复制到备节点 如果主服务器发生故障&#xff0c;那么备用服务…...

使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密(安全密钥管理)

环境 OpenSSLPython 使用 OpenSSL 加密 1. 生成 AES 密钥和 IV 强烈推荐使用方法一&#xff08;Python secrets 模块&#xff09;&#xff0c;因为它更安全。 方法一: Python 的 secrets 模块&#xff08;安全方式&#xff09; 不要使用 OpenSSL 的 rand 命令直接生成密钥…...

1-001:MySQL的存储引擎有哪些?它们之间有什么区别?

MySQL 存储引擎 ├── InnoDB&#xff08;默认引擎&#xff09; │ ├── 事务支持&#xff1a;支持 ACID 和事务&#xff08;事务日志、回滚、崩溃恢复&#xff09; │ ├── 锁机制&#xff1a;支持行级锁&#xff0c;提高并发性能 │ ├── 外键支持&#xff1a;支持外键…...

持续集成与部署(CI/CD)实践指南:测试工程师的效率革命之路

一、引言 在当今快速发展的软件开发领域&#xff0c;效率和质量是至关重要的。随着软件项目的规模和复杂度不断增加&#xff0c;传统的开发和测试流程逐渐暴露出诸多问题&#xff0c;如开发周期长、集成困难、测试覆盖不足以及部署风险高等。持续集成&#xff08;Continuous I…...

C盘清理技巧分享:释放空间,提升电脑性能

目录 1. 引言 2. C盘空间不足的影响 3. C盘清理的必要性 4. C盘清理的具体技巧 4.1 删除临时文件 4.2 清理系统还原点 4.3 卸载不必要的程序 4.4 清理下载文件夹 4.5 移动大文件到其他盘 4.6 清理系统缓存 4.7 使用磁盘清理工具 4.8 清理Windows更新文件 4.9 禁用…...

如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统

我在业余时间开发了一款自己的独立产品&#xff1a;升讯威在线客服与营销系统。陆陆续续开发了几年&#xff0c;从一开始的偶有用户尝试&#xff0c;到如今线上环境和私有化部署均有了越来越多的稳定用户。 随时近来 AI 大模型的火热&#xff0c;越来越多的客户&#xff0c;问…...

能否调整爬虫以支持多页商品列表?

当然可以&#xff01;调整爬虫以支持多页商品列表是一个常见的需求&#xff0c;尤其是在商品数量较多时。通过分析目标网站的分页机制&#xff0c;可以实现自动翻页并获取多页商品列表。以下是如何调整爬虫代码以支持多页商品列表的详细步骤和代码示例。 一、分析分页机制 首…...

【AI智能体报告】开源AI助手的革命:OpenManus深度使用报告

一、引言&#xff1a;当开源智能体走进生活 2025年3月&#xff0c;MetaGPT团队用一场"开源闪电战"改写了AI Agent的竞争格局。面对商业产品Manus高达10万元的邀请码炒作&#xff0c;他们仅用3小时便推出开源替代品OpenManus&#xff0c;首日即登顶GitHub趋势榜。 …...

Python 逆向工程:2025 年能破解什么?

有没有想过在复杂的软件上扭转局面&#xff1f;到 2025 年&#xff0c;Python 逆向工程不仅仅是黑客的游戏&#xff0c;它是开发人员、安全专业人员和好奇心强的人解开编译代码背后秘密的强大方法。无论您是在剖析恶意软件、分析 Python 应用程序的工作原理&#xff0c;还是学习…...

自动同步多服务器下SQL脚本2.0

考虑到1.0的适用场景太过苛刻&#xff0c;一次只支持读取至多一个版本的脚本变化&#xff0c;想涉及多个脚本的连续读取就有困难&#xff0c;于是有了2.0。 该版本支持读取多个版本的sql脚本&#xff0c;并且如果某一脚本出现sql问题【如重复插入相同名称的字段】&#xff0c;…...

深度学习与大模型-张量

大家好&#xff01;今天我们来聊聊张量&#xff08;Tensor&#xff09;。别被这个词吓到&#xff0c;其实它没那么复杂。 什么是张量&#xff1f; 简单来说&#xff0c;张量就是一个多维数组。你可以把它看作是一个装数据的容器&#xff0c;数据的维度可以是一维、二维&#…...

DeepSeek+Maxkb+Ollama+Docker搭建一个AI问答系统

DeepSeekMaxkbOllamaDocker搭建一个AI问答系统 文章目录 DeepSeekMaxkbOllamaDocker搭建一个AI问答系统前言一、创建同一内网的网络二、拉取两个镜像三、启动Ollama以及调试Maxkb4.Maxkb创建一个应用并建立知识库5、应用效果总结 前言 我觉得只要是使用Docker技术&#xff0c;…...

江科大51单片机笔记【12】DS18B20温度传感器(上)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…...

P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS

P8662 [蓝桥杯 2018 省 AB] 全球变暖--dfs 题目 解析讲下DFS代码 题目 解析 这道题的思路就是遍历所有岛屿&#xff0c;判断每一块陆地是否会沉没。对于这种图的遍历&#xff0c;我们首先应该想到DFS。 代码的注意思想就是&#xff0c;在主函数中遍历找出所有岛屿&#xff0c…...

【让POSTGRESQL支持MS SQLSERVER的 extension】 Babelfish for PostgreSQL介绍及源码安装

什么是 Babelfish for PostgreSQL? Babelfish for PostgreSQL(简称 Babelfish)是一个扩展(extension),使 PostgreSQL 兼容 Microsoft SQL Server(MSSQL),允许 MSSQL 客户端和应用程序直接连接到 PostgreSQL 数据库,而无需对 SQL 语法、T-SQL 存储过程、数据类型等进…...

Vue 侧边栏导航栏 el-menu单个item和多个item

在固钉的下面去写菜单导航栏。 <el-menu class"aside-menu" router :default-active"$route.path" :collapse"isCollapse" background-color"#131b27" text-color"#bfcbd9" active-text-color"#20a0ff" :defau…...

Unity Dots从入门到精通之 Prefab引用 转 实体引用

文章目录 前言安装 DOTS 包实体引用Authoring 前言 DOTS&#xff08;面向数据的技术堆栈&#xff09;是一套由 Unity 提供支持的技术&#xff0c;用于提供高性能游戏开发解决方案&#xff0c;特别适合需要处理大量数据的游戏&#xff0c;例如大型开放世界游戏。 本文讲解我在…...

无人机避障——XTDrone中运行VINS-Fusion+Ego-planner进行路径规划

本文聚焦于无人机避障技术领域的经典方案&#xff0c;重点探讨视觉双目VINS-Fusion建图与Ego-planner路径规划的组合应用。通过视觉双目VINS-Fusion实现精准的环境建图与自身定位&#xff0c;结合Ego-planner的高效路径规划能力&#xff0c;使无人机在复杂环境中实现自主避障飞…...