Aztec的客户端证明

1. 引言

隐私保护 zk-rollup 的证明生成与通用 zk-rollup 的证明生成有很大不同。原因是给定交易中存在特定数据(由私有函数处理),我们希望保持完全私有。在本文中,我们探讨了用于证明私有函数正确执行的客户端证明生成,并解释了它与通用汇总中的证明生成有何不同。

本文主要结构为:

  • 1)何为proofs?及其在通用zkRollups中的工作原理
  • 2)Aztec proofs工作原理
  • 3)证明函数的正确执行
    • 对于公共函数:rollup端生成证明
    • 对于私有函数:客户端生成证明
  • 4)proof示例
  • 5)客户端证明生成如何降低内存需求
  • 6)附录:客户端证明生成的其他细节。
  • 7)总结

2. 何为proofs?及其在通用zkRollups中的工作原理

在深入研究 Aztec 的证明,特别是 Aztec 的 zkRollup 的隐私优先 性质之前,先回顾一下通用zkRollups上的proofs的工作原理。
当有状态区块链执行交易时,它会进行状态转换。若网络最初的状态是A,那么在网络上执行一组交易(一个区块),现在网络的状态是B。

Rollups 也是有状态的区块链。他们使用证明来确保状态转换正确执行。为每个块生成并验证证明。所有证明都发布在 L1 上,任何人都可以重新验证它们,以确保状态转换正确完成。

对于通用 zkRollups,证明生成非常简单,因为所有数据都是公开的。sequencer和prover都可以看到所有交易数据,公共状态是公开的,并且重建每个状态转换所需的数据都发布在 L1 上。

3. Aztec proofs工作原理

Aztec 的 zkRollup 是一个不同的故事。在 Aztec 网络中,有两种类型的状态:公共状态和私有状态。
在这里插入图片描述
Aztec 智能合约(用Noir编写)由两种类型的函数组成:

  • 私有函数:用户拥有的状态、客户端证明生成
  • 公共函数:全局/公共状态、汇总端证明生成

对二者均需要正确执行的证明。然而,由于私有函数和公共函数的结构有很大不同,它们的证明生成也有很大不同。

简单概述一下Aztec智能合约的执行方式:首先执行所有私有函数,然后执行所有公共函数。
在这里插入图片描述
然而,深入剖析 Aztec 智能合约超出了本文的范围。要了解更多信息,可查看2024年2月22日博客WTF is Aztec?。

本文将重点关注私有函数正确执行的证明生成以及为什么它是隐私优先 zkRollup 的关键要素。

4. 证明函数的正确执行

区块链中私有状态和私有函数的概念可能看起来有点不寻常。

4.1 证明公共函数正确执行——rollup端生成证明

对于公共函数:

  • rollup端生成证明

首先看公共函数的执行,因为它与其他通用 zkRollups 更相似。

公共状态是每个人都可以使用的全局状态。sequencer执行公共函数,而prover生成正确的执行证明。特别是,最后一步意味着函数(用Noir编写)被编译为特定类型的程序表示形式,然后由虚拟机 (VM) 电路进行evaluate评估。已评估意味着它将一条一条地执行一组指令,从而得出正确执行或失败的证明。rollup端prover可以处理繁重的计算,因为它在强大的硬件上运行(即不是客户端情况下的智能手机或计算机浏览器)。

4.2 证明私有函数正确执行:客户端生成证明

对于私有函数:

  • 客户端生成证明

另一方面,私有状态由用户拥有。当生成私人交易正确执行的证明时,希望所有数据保持私密。这意味着不能(像公共状态那样)拥有第三方prover,因为数据随后会暴露给prover,从而不再是私有的。

在私人交易的情况下,交易所有者(唯一知道交易数据的人)应自行生成证明。也就是说,私人交易正确执行的证明必须在客户端生成。

这意味着每个 Aztec 网络用户都应该能够在其智能手机或笔记本电脑浏览器上生成证明。此外,由于 Aztec 智能合约可能由许多私有函数组成,因此每个 Aztec 网络用户应该能够生成许多证明(每个私有函数一个证明)。

  • 在 rollup 方面,区块证明是使用 ZK-VM(ZK 虚拟机)生成的。
  • 在私有方面,没有VM。 相反,每个私有函数都被编译成自己的静态电路。
    在这里插入图片描述

所谓“电路”,是指填充了一些预先计算值的表。该表描述了在特定代码运行期间要执行的指令序列(如 MUL 和 ADD)。

表的行和列之间有一堆预定义的关系,如,复制约束规定多条wires的值应相同。
在这里插入图片描述
在上图中,有两个门,门 1 (+) 和门 2 (x)。可看到,z既是门 1 的输出(表示为 w3,线路 3),又是门 2 的左侧输入(表示为 w4,线路 4)。因此,需保证门1的输出值与门2的左输入值相同。即w3 = w4。这即是“checking copy constraints检查复制约束”。

当verifier验证电路时,其会检查这些预定义关系是否适用于所有行和列。

5. proof示例

以下示例以简化的方式反映了一般逻辑。真正的功能要复杂得多:
假设有一个函数a² + b² = c² 。目标是证明特定输入和输出的等式成立。假设 a = 3、b = 4、c = 5。

作为一段代码,可将函数表示为:
在这里插入图片描述
当函数执行时,每一步的结果都会记录在表中。当该表填充了特定函数对特定值的执行结果时,被称为execution trace。
在这里插入图片描述
这只是表的一个片段,包含值和操作码名称。然而,要指示计算机应在哪个特定行中执行哪个操作,仅操作码名称是不够的,还需要selectors选择器。
选择器是指切换操作的门(如开/关开关)。在本例中将使用带有两个选择器的简化 Plonk 方程:

  • q_ ADD用于加法门,
  • q_ MUL用于乘法门。

简化的 Plonk 方程为:

  • q_ MUL (a * b) + q_ ADD (a + b) – c = 0 。

打开和关闭它们,即赋值1和0,方程将转化为不同的运算。例如,要执行 a 和 b 的加法,我们设置q_ ADD = 1,q_ MUL = 0 ,因此方程为a + b – c = 0 。

因此,对于每个执行的操作,还将其选择器存储在表中:
在这里插入图片描述

6. 客户端证明生成如何降低内存需求

对于私有函数,由于每个函数都被编译成静态电路,所以所有需要的选择器都被预先放入表中。特别是,当编译智能合约函数时,它会输出包含一组选择器的验证密钥。
在智能合约的情况下,电路要大几个数量级,因为它包含更多带有用于公共函数执行的选择器的列。此外,还有更多的关系检查要做。如,需要检查智能合约字节码是否确实执行了预期的操作(即,所打开的选择器是根据提供的字节码承诺来打开的)。
在这里插入图片描述
作为一种心理模型,可将智能合约电路视为一个表,其中 70 列中的 50 列保留用于选择器的查找表。存储整个表需要大量内存。
客户端和rollup端证明生成的电路大小之间的差异:

  • 在客户端,电路要小得多,内存和计算要求较低。这是为什么能够在用户设备上生成私有函数正确执行的证明的关键原因之一。
    在这里插入图片描述

7. 附录:客户端证明生成的其他细节

  • 为了进一步降低prover的内存和计算需求,使用了特定的证明系统 Honk。HonK是由Aztec Labs开发的高度优化的 Plonk 。Honk 是 Plonk-ish算术化、sum-check协议(有一些很好的内存技巧)和multilinear多项式承诺方案的组合。
  • 一些可以添加到 Honk 中以使其更加高效的小工具包括Goblin Plonk(由 Aztec Labs 开发的一种特定类型的递归)以及ProtoGalaxy(由 Liam Eagen 和 Ariel Gabizon 开发)。
    • Goblin Plonk 允许资源受限的prover构建具有多层递归的 zk-snark。这完全适合客户端证明生成的情况,其中智能合约中每个私有函数的证明是递归的附加层。技巧在于每个递归层的昂贵操作(如椭圆曲线操作)被推迟到最后一步,而不是在每个递归层执行。递归以智能合约中所有私有函数的一个证明结束。
    • 然后,该证明由rollup电路进行验证。该证明的递归验证非常耗费资源。然而,由于它是在rollup端执行的,因此它具有足够的计算和内存资源。
    • ProtoGalaxy 是一种优化递归verifier工作的folding方案。它允许在一个步骤中折叠多个实例,将verifier在每个折叠步骤中的工作量减少到一个常数。

8. 总结

客户端证明生成对于区块链领域来说是一种非常新颖的方法。然而,对于隐私保护解决方案来说,它绝对是必备的。Aztec Labs 花费数年时间开发协议和加密架构,使客户端证明生成性能在生产阶段可行。

参考资料

[1] Aztec团队2024年3月11日博客 Client-side proof generation

Aztec系列博客

  • Aztec Hybrid Rollup:混合zkRollup,而非zkEVM
  • Proof Compression
  • Aztec Connect即将主网上线
  • Aztec connect bridge代码解析
  • Aztec 征集 Rollup Sequencer去中心化提案
  • Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
  • 完全保密的以太坊交易:Aztec网络的隐私架构
  • Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能
  • Aztec交易架构解析
  • 混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola
  • Claim Proof Bug——Aztec最大的45万美金bug bounty
  • SST:Aztec的Shared State Trees

客户端证明系列博客

  • CUDA入门
  • WebGPU+ZKP:客户端证明
  • WebGPU入门
  • WebGPU助力客户端Crypto/ZK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arm-linux实现onvif server+WS-UsernameToken令牌验证

目录 一、环境搭建 1、安装openssl 2、安装bison 3、安装flex 二、gsoap下载 三、编译x86版本gsoap 四、编译arm-linux版本gsoap 1、交叉编译openssl 1.1、下载openssl 1.2、交叉编译 2、交叉编译zlib 2.1、下载zlib 2.2、交叉编译 3、交叉编译gsoap 3.1、编译过…

【嵌入式学习】Qtday03.21

一、思维导图 二、练习 自由发挥登录窗口的应用场景,实现一个登录窗口界面。(不要使用课堂上的图片和代码,自己发挥,有利于后面项目的完成) 要求: 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…

深入了解 Spring boot的事务管理机制:掌握 Spring 事务的几种传播行为、隔离级别和回滚机制,理解 AOP 在事务管理中的应用

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

LeetCode 热题 100 | 堆(一)

目录 1 什么是堆排序 1.1 什么是堆 1.2 如何构建堆 1.3 举例说明 2 215. 数组中的第 K 个最大元素 2.1 子树大根化 2.2 遍历所有子树 2.3 弹出栈顶元素 2.4 完整代码 菜鸟做题,语言是 C 1 什么是堆排序 1.1 什么是堆 堆的定义和分类&#xff…

【c++入门】命名空间,缺省参数与函数重载

🔥个人主页: Quitecoder 🔥专栏:c笔记仓 朋友们大家好!本篇内容我们进入一个新的阶段,进入c的学习!希望我的博客内容能对你有帮助! 目录 1.c关键字2.第一个c代码3.命名空间3.1 nam…

CTF-辨别细菌

题目描述&#xff1a;try your best to find the flag. 进入靶场后发现是一个游戏&#xff0c;需要全部答对才可以得到最后的flag 查看了一下源码&#xff0c;发现有一个答案模板的模块 尝试解释一下代码 <!-- 答案模版 --> <script id"template_game_pi…

数据结构/C++:红黑树

数据结构/C&#xff1a;红黑树 概念实现基本结构插入uncle为红色节点uncle为黑色节点 总代码展示 概念 红黑树是一种二叉搜索树&#xff0c;一般的二叉搜索会发生不平衡现象&#xff0c;导致搜索效率下降&#xff0c;于是学者们开始探索如何让二叉搜索树保持平衡&#xff0c;这…

Agent驱动的RPA——实在Agent(智能体):自动化时代的新引擎

随着人工智能和机器学习技术的快速发展&#xff0c;智能Agent在 RPA领域扮演了革命性的角色。 Agent驱动的RPA不仅实现了传统规则导向自动化工具的功能升级&#xff0c;而且通过引入自主、智能决策与协作能力&#xff0c;为现代企业带来了更高程度的灵活性与智能化水平。随着数…

第1章 计算机系统概述

王道学习 1.1 操作系统的基本概念 1.1.1 操作系统的概念 1.1.2 操作系统的特征 操作系统是一种系统软件&#xff0c;但与其他系统软件和应用软件有很大的不同&#xff0c;它有自己的特殊性即基本特征。操作系统的基本特征包括并发、共享、虚拟和异步。这些概念对理解和掌握…

kail linux破解密码--- 详细过程(配合图文让你看了就会)

1.准备工作 1.vmware虚拟机 2.kali的系统 3.无线网卡一张(这个是必须的我买的是30多块) 4.这里为了实验&#xff0c;和直观的看到效果&#xff0c;用手机开了一个wifi然后使用kali进行破解 2.下载kali然后安装到虚拟机vmware 直接在官网下载 Get Kali | Kali Linux 我选…

WebXR实践——利用aframe框架浏览器展示全景图片

一、效果 话不多说&#xff0c;先上效果 二、代码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>360&deg; Image</title><meta name"description" content"360&deg; Imag…

【机器学习】深入解析线性回归模型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

高精度铸铁平台制造工艺有多精细——河北北重机械

高精度铸铁平台制造工艺通常包括以下几个步骤&#xff1a; 材料准备&#xff1a;选择合适的铸铁材料&#xff0c;并确保其质量符合要求。常用的铸铁材料包括灰铸铁、球墨铸铁等。 模具制造&#xff1a;根据平台的设计要求&#xff0c;制造适用的模具。模具一般由砂型、金属模具…

【python】flask基于cookie和session来实现会话控制

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0 App+微信小程序+云平台

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在Gitee或GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/groundhog-charging…

力扣Lc19--- 268. 丢失的数字(java版)-2024年3月20日

1.题目描述 2.知识点 &#xff08;1&#xff09;比如数组里面有n个数&#xff0c;然后计算这n个数的总和(用等差求和数列计算&#xff09;,然后减去数组的和&#xff0c;用总和减去数组和即为所得 &#xff08;2&#xff09;加强型 for 循环&#xff08;也称为 for-each 循环&…

单片机--数电(4)

触发器 数字电路中&#xff1a;分组合逻辑电路与时序逻辑电路两大类 组合逻辑电路的基本单元是门电路&#xff08;与或非等一些门电路&#xff09; 时序逻辑电路的基本单元是触发器 触发器与门电路的区别 门电路某一时刻的输出信号完全取决于该时刻的输入信号&#xff0c;…

销售数据分析怎么做?用好这5个数据分析方法与模型就足够了。

企业经营其实简单来说就是做买卖&#xff0c;有了买卖自然就产生了销售数据&#xff0c;那怎么能让这些销售数据产生价值呢&#xff1f;答案就是数据分析。通过对销售数据的分析&#xff0c;可以帮助企业及时洞察市场动向&#xff0c;发现企业销售过程中的问题&#xff0c;调整…

ResNet《Deep Residual Learning for Image Recognition》

ResNet论文学习 引言Deep Residual Learning 深度残差学习网络结构 总结代码复现 引言 深度网络自然地以端到端的多层方式集成低/中/高级特征和分类器&#xff0c;特征的“级别”可通过堆叠层的数量来丰富 随着网络层数加深&#xff0c;提取的特征越强&#xff0c;但是 网络…

表情识别数据集

表情视频数据集 在许多的研究中,研究者通常会把人脸表情识别区分为静态的人脸表情识别(static facial emotion recognition)和动态的人脸表情识别(dynamic facial emotion recognition)。前者希望通过单张图片辨别人的表情从而达到识别人情绪的目的,而后者希望感知视频/…