Proof Compression
1. 引言
借助zk-SNARKs的灵活性,可让DeFi隐私交易更便宜更简单。
Aztec团队致力于让通用零知识交易尽可能简单的同时,对zk密码学进行大幅改进,使这些交易简单的同时还足够便宜。
2. 设计证明系统的取舍
在零知识证明系统中,Prover致力于让Verifier信服某statement是正确的,同时Prover给Verifier分享的statement信息尽可能少。
零知识证明系统主要分为2个阶段:
- 1)证明生成阶段
- 2)证明验证阶段
理想情况下,这2个阶段应都足够快且计算高效,但是,现实情况是通常需要在二者之间进行取舍权衡。从计算角度来说,构建证明的计算量要远大于验证证明的计算量,当提到某“fast” 构建证明算法时,“fast”是相对于某基准线,而不是相对于verification的。
在Aztec的zk-rollup中,有3个不同的角色参与创建和验证SNARK proofs,每个角色具有不同的计算能力和限制:
- 1)用户:用户拥有秘密信息,如其balance,其历史交易。用户想在保持隐私的情况下,参与交易,并与DeFi协议交互。用户可在web浏览器中生成证明,浏览器通常运行在低计算能力的设备,如手机上。
- 2)Rollup Provider:rollup provider负责将用户交易进行打包和压缩,该流程中包含了生成proof和验证proof(具体看下面的recursion讨论)。rollup provider通常可访问商用级别硬件。
- 3)区块链:Ethereum Virtual Machine(EVM)为计算高度受限的环境,EVM中的每个运算有所不同,但通常都是昂贵的,相应的开销必须由用户以交易手续费支付。EVM负责验证一个proof(其中可能包含了多个其它proof)。
为了给Aztec的用户带来实惠的、真正的零知识交易,我们跨递归边界将不同的证明系统(特别是PlonK的不同、美味口味)融合在一起。对于用户来说,这意味着在客户端证明生成期间降低了计算成本,同时通过最小化EVM上的计算降低了货币成本。
3. Recursion
由于验证某proof ppp本身也是某种计算,因此可引入另一个零知识证明p∗p^*p∗来证实“验证某proof ppp 成功”,从而实现递归证明。同时p∗p^*p∗本身也必须被验证。
接下来看如何将2个不同的证明系统进行结合或组合?
将证明系统看成是(P,V)(\mathbf{P},\mathbf{V})(P,V)算法组,存在2个参与者Prover和Verifier。
假设:
- 存在某证明系统(P,V)(\mathbf{P},\mathbf{V})(P,V),其构建proof cheap,但验证proof昂贵;(如TurboPlonK)
- 存在另一证明系统(P∗,V∗)(\mathbf{P}^*,\mathbf{V}^*)(P∗,V∗),其构建proof 昂贵,但验证proof cheap;(如PlonK)
需对以上2种证明系统进行组合,以使利益最大化:
- 1)采用证明系统P\mathbf{P}P来构建proof π\piπ;
- 2)基于证明系统P∗\mathbf{P}^*P∗来构建proof π∗\pi^*π∗,其中π∗\pi^*π∗为a proof that attests to the correct verification of π\piπ under V\mathbf{V}V;
- 3)验证π∗\pi^*π∗。
最终可由具有不同计算能力的参与者来执行以上3个步骤。正是这种思想,使得Aztec Connect可为用户提供便宜隐私的交易。
以Plonk和TurboPlonk这2种证明系统组合使用为例:
- 1)Client:使用TurboPlonk来构建proof π-Client\pi\text{-Client}π-Client。TurboPlonk为Plonk的变种,支持定制门,从而可在计算能力受限的设备上高效构建生成proof。
Client将π-Client\pi\text{-Client}π-Client发送给Rollup Provider。 - 2)Rollup Provider:以π-Client\pi\text{-Client}π-Client为输入,构建Standard(即non-Turbo)Plonk proof π-Rollup\pi\text{-Rollup}π-Rollup,以证明π-Client\pi\text{-Client}π-Client被正确验证。因此,Rollup Provider受限于TurboPlonk高昂的验证开销,以及,Standard Plonk proof构建开销。但rollup provider是强大的,其可解决TurboPlonk验证和Standard Plonk生成证明开销,以及为用户节约开支的同时,仍能获利。proof π-Rollup\pi\text{-Rollup}π-Rollup会发送到以太坊。
- 3)通过部署在以太坊链上的StandardVerifier.sol合约,可验证π-Rollup\pi\text{-Rollup}π-Rollup。
注意:为了进一步优化压缩流程,Aztec rollup provider实际包含了3步recursion:
- 2步 Turbo->Turbo递归(使用rollup circuits和root rollup circuits,详细组装解释见Privacy for Pennies: Scaling Aztec’s zkRollup)
- 1步 Turbo->Standard递归(使用root verifier circuit)
4. Nerds插曲:定制门
假设你为协议制定者,要求所设计的零知识证明系统可证明包含了类似a+b=c,(a+b)⋅c=d,a⋅b⋅c=da+b=c,(a+b)\cdot c=d,a\cdot b\cdot c=da+b=c,(a+b)⋅c=d,a⋅b⋅c=d等加法和乘法组合的statement,但你的证明系统中仅包含一类gate,形如:
qmult×(wlwr)+(1−qmult)×(wl+wr)−wo=0q_{mult}\times (w_lw_r)+(1-q_{mult})\times (w_l+w_r)-w_o=0qmult×(wlwr)+(1−qmult)×(wl+wr)−wo=0【待证明的identity degree为3】
其中www表示“wires” with l=left,r=right,o=outputl=left, r=right, o=outputl=left,r=right,o=output,qqq为"selector"用于在乘法和加法之间切换。
当要证明存在数字a,b,c,da,b,c,da,b,c,d满足(a+b)×c=d(a+b)\times c=d(a+b)×c=d时,相应的电路设计模板为:
相应的电路类似为:
将a,b,c,d,za,b,c,d,za,b,c,d,z值填入电路设计模板中:
用户可证明相应的值满足该claim。(此处,必须在2个zzz之间进行约束,即使用copy constraints。)
当用户还想要证明形如x5=yx^5=yx5=y这样的statements时(如Poseidon hash中包含了这样fifth powers计算),若采用上面的思路,需将其分解为一系列乘法和一个加法:
x5−y=[((x×x)×(x×x))×x]−y=0x^5-y=[((x\times x)\times (x\times x))\times x]-y=0x5−y=[((x×x)×(x×x))×x]−y=0
将相应的值填入模板,获得execution trace形如:
不同于以上方案,可引入新的custom selector,形如:
qcustom×wl5+(1−qcustom)×(qmult×(wlwr)+(1−qmult)×(wl+wr))−wo=0q_{custom}\times w_l^5 + (1-q_{custom})\times(q_{mult}\times (w_lw_r)+(1-q_{mult})\times (w_l+w_r))-w_o=0qcustom×wl5+(1−qcustom)×(qmult×(wlwr)+(1−qmult)×(wl+wr))−wo=0【待证明的identity degree为6】
此时x5=yx^5=yx5=y的电路仅需要一个gate,形如:
相应的execution trace为:
通过引入定制门,将整个电路由6个门减少到了3个门,从而减少了50% 的circuit size。
不过,引入定制门将增加待证明的identity degree,从而意味着增加Prover的计算量,可能会抵消掉部分circuit size reduction的好处。如上例引入定制门后,待证明的identity degree由3变成了6,而circuit size减半了(由6变成了3)。若程序中仅包含少量这样的定制门计算,则需要重新考虑引入定制门的意义,实际上,需要考虑这种情况。
同时,另一个思路是:构建不会增加identity degree的定制门,或者不会增加prover太多计算量的定制门。详细将TurboPlonk证明系统,其关键创新在于在计算Pedersen哈希时,引入了充分利用椭圆曲线高效scalar multiplication计算的定制门。
5. Prover和Verifier开销
在证明系统设计时:
- 1)Prover复杂度与circuit中的gates数紧密关联;
- 2)Verifier复杂度与circuit size相对无关,但会随着待证明claim或identity的复杂度的增加而增加。
仍以上例为例,引入定制门后,有circuit size减少,相应的proof构建将更便宜;而Verifier的验证将相对昂贵,因其无法受益于circuit size 减少,而同时必须面对引入定制门后identity复杂度的增加。
对于Prover和Verifier来说,大量的计算开销在于需计算昂贵的椭圆曲线scalar multiplication。
对于Verifier来说,在identity中引入额外的selector意味着在验证时需增加额外的scalar multiplication运算。
以Standard Plonk中Verifier的第9步计算为例:
其中qqq 为selector,⋅\cdot⋅表示scalar multiplication。更多的selector,该公式将更复杂。
6. 展望
Aztec将TurboPlonk进一步升级为UltraPlonk,UltraPlonk为TurboPlonk+Plookup:
- 使用lookup tables来进步加速proof构建,代价是增加Verifier开销。
同时,Aztec还设计了名为fflonk协议:
- proof验证效率高,代价是prover开销大。
fflonk为SHPlonk承诺机制的变种,具有潜力可降低约35%的EVM执行开销。
参考资料
[1] Aztec团队2022年9月博客 Proof Compression
Proof Compression相关推荐
- Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记
1. 引言 前序博客有: Lurk--Recursive zk-SNARKs编程语言 rank-1 constraint system R1CS Spartan中 Vitalik R1CS例子 SNA ...
- 【论文翻译】Few Sample Knowledge Distillation for Efficient Network Compression
Few Sample Knowledge Distillation for Efficient Network Compression 用于高效网络压缩的少样本知识提取 论文地址:https://ar ...
- 只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance
在了解intrinsicContentSize之前,我们需要先了解2个概念: AutoLayout在做什么 约束优先级是什么意思. 如果不了解这两个概念,看intinsic content size没 ...
- Compression Helper Class using SharpZipLib
使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作. using System; using System.Text; using System.IO; using ICS ...
- 模型加速--CLIP-Q: Deep Network Compression Learning by In-Parallel Pruning-Quantization
CLIP-Q: Deep Network Compression Learning by In-Parallel Pruning-Quantization CVPR2018 http://www.sf ...
- Our Proof : Page Scraping : Website Data Extraction : Data Mining Analytics : Connotate.com
Our Proof : Page Scraping : Website Data Extraction : Data Mining Analytics : Connotate.com There's ...
- CF650C Table Compression
CF650C Table Compression 给一个 \(n\times m\) 的非负整数矩阵 \(a\),让你求一个 \(n\times m\) 的非负整数矩阵 \(b\),满足以下条件 若 ...
- MongoDB 3.0 WiredTiger Compression and Performance
MongoDB3.0中的压缩选项 在MongoDB 3.0中,WiredTiger为集合提供三个压缩选项: 无压缩 Snappy(默认启用) – 很不错的压缩,有效利用资源 zlib(类似gzip) ...
- 解决错误:No module named ‘Cryptodome‘ 和错误rosbag.bag.ROSBagException: unsupported compression type: lz4
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 解决错误:No module named 'Cryptodome' 和错误rosbag.bag.ROSBagExcept ...
最新文章
- 【干货】产品经理必读:app开发版本迭代的节奏该如何把握?
- 中小型研发团队架构实践:集中式日志ELK
- 默认帐户生成器帐户来源
- Office - Word 2013
- 电商产品经理:如何搭建会员管理体系(多图干货)
- 微信表情包批量导出-2022年8月4日
- STM8S系列基于STVD开发,标准外设库函数开发环境搭建
- Ubuntu 12.04无法识别华为U8500
- 新南威语言班C加,【干货来了】新南威尔士大学UEEC语言班 你了解多少?
- [精简]托福核心词汇29
- 安卓11之adb命令清除锁屏密码
- C++.02: Visual Studio 2022 文件筛选器与虚拟目录
- 中国天气网天气预报API接口城市代码,XML格式,数据具体到县、区级别
- 【原创题目】lym子集
- 【经验】知乎、科学网的经典帖子分享
- 元数据与数据治理|大数据治理(第九篇)
- 糟糕!我就下载个播放器,九死一生!!
- 优秀IT项目经理的六大特质_转帖IT专家网
- u盘文件删除不掉,用360粉碎生成随机数文件删除不掉
- tiny4412搭建linux开发环境,[Tiny4412] 移植 Linux4.4 到 Tiny4412 开发板上
热门文章
- mdx格式的词典用什么软件打开_分享 | 手机词典推荐—欧陆词典(涵盖牛津、朗文等14部权威英语辞典)...
- jfinal获取mysql_jfinal 调用mysql结果集-问答-阿里云开发者社区-阿里云
- LaTex 中 Author biography里面插入作者照片
- oracle导出辅助账明细,AO2011导入国库集中支付系统3.0的辅助账
- 【数据库】国土空间规划数据库(全域)_模板空库
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(11)之支付管理及广告管理...
- 架构师技能5:如何做code review 代码简洁之道
- 文字放在图片的下面 web前端网页布局
- 飞机大战游戏需求分析文档 5改
- UML建模基础知识点