Recursive SNARKs总览

1. 引言

Recursive SNARKs又名Incrementally Verifiable Computation(IVC)、Proof Carrying Data(PCD)或 inductive SNARKs。
在这里插入图片描述
在这里插入图片描述
上图摘自 zkStudyClub: Halo Infinite with Ben Fisch (Stanford)

下图摘自 微软团队2021年论文 《Nova: Recursive Zero-Knowledge Arguments from Folding Schemes》,其中:

在这里插入图片描述

Mina团队在其 pickles库 中实现了inductive proof systems。

2. 何为Recursive SNARKs?

2.1 何为SNARK?

在这里插入图片描述

2.2 何为SNARK of a SNARK proof?

在这里插入图片描述

2.3 何为SNARK of multiple SNARK proofs?

在这里插入图片描述
注意, C ′ C' C仅依赖 V V V S V S_V SV(而不是 C 1 , C 2 C_1,C_2 C1,C2)。
可将 V V V以circuit表示为:【 w ′ = π ′ w'=\pi' w=π,独立于 w 1 , w 2 w_1,w_2 w1,w2。且有 ∣ C ′ ∣ = 2 ∗ ∣ V ∣ < ∣ 2 ∗ C ∣ |C'|=2*|V|<|2*C| C=2V<∣2C
在这里插入图片描述
C ′ C' C有多大呢?以 C C C为SHA256 circuit为例,其具有2万个gate。
当以 C ′ C' C来表示SNARK of SHA256 SNARKs时:

  • [BCTV14]:为Ben-Sasson等人2014年论文《Scalable zero knowledge via cycles of elliptic curves》。该方案需要trusted setup,为第一个SNARK of SNARK方案,需要约100万个gate。
  • [HaloBCLMS20Nova]:这些方案均不需要trusted setup,当用于证明SNARK of SNARKs时其需要约少于5万个gate。该值与其内部的SNARK circuits无关。

3. Recursive SNARKs应用场景

Recursive SNARKs可用于如下场景:

  • 1)Zk-zk-Rollup 和 zk 3 ^3 3-Rollup
  • 2)隐私计算ZEXE
  • 3)长计算验证
  • 4)PhotoProof:验证照片的真实性,即使照片已被多人多次编辑(并附有编辑人日志)。
  • 5)恒定大小区块链
  • 6)隐私、可验证选举
  • 7)隐私、可扩展DEX
  • 8)可审计机器学习
  • 9)隐私、可验证的社会财富基金
  • 10)一个web app:可向其用户证明其已删除了1年前的所有信息(或至少不会再使用这些一年前的信息)。

3.1 用于Zk-zk-Rollup 和 zk 3 ^3 3-Rollup

相比于zkRollup,Zk-zk-Rollup具有如下特征:

  • 1)具有多个server,每个server负责不同的无重叠的用户组。
  • 2)具有Rollup aggregator(可为server中的一个),负责汇总(balance table)并创建一个相应的proof。

在这里插入图片描述
在这里插入图片描述
相应的Zk-zk-Rollup circuit表示为:【其中的 r o o t 1 , r o o t 2 , ⋯   , π 1 , π 2 , ⋯ root_1,root_2,\cdots, \pi_1,\pi_2,\cdots root1,root2,,π1,π2, 均为witness】
在这里插入图片描述
以Tornado Cash为例:
在这里插入图片描述
经zk 3 ^3 3-Rollup,Tornado Cash可实现shielded transfer以及任意金额。【为每笔交易添加zk-SNARKs实现了隐私交易。】
在这里插入图片描述
在这里插入图片描述
其中:

  • 1)隐私交易需要零知识证明,为每笔交易添加zk-SNARKs。
  • 2)一级coordinators通过验证交易的zk-SNARKs来验证交易。
  • 3)此外,可有更复杂的交易(如智能合约)。交易的验证应为constant time,与proof complexity无关。

是否可实现智能合约的隐藏呢?——可借助隐私计算ZEXE实现。

3.2 用于隐私计算ZEXE

ZEXE为一种计算模型(类似于UTXO链的Scripts和EVM链的Accounts)。因此可将ZEXE看成是 智能合约 或 复杂交易 的抽象。
ZEXE的基本单位为record(类似于UTXO)。
每笔交易会消耗records,也会创建records。

以UTXO为例,相应的ZEXE表述为:

  • Universal predicate(通用表述)为:防止双花。
  • Birth predicate(出生表述)为:某record是如何创建的。
  • Death predicate(死亡表述)为:某record是如何消耗掉的。

基于Record 1和Record 2 生成Record 3的交易流程可表示为:
在这里插入图片描述
通用表述(类似Tornado Cash):

  • 1)使用nullifiers。
  • 2)检查 nullifier=H(sk, records) 正确创建。
  • 3)检查该nullifier仅出现了一次。
  • 4)可防止双花。
    在这里插入图片描述

3.2.1 基于ZEXE实现assets

基于ZEXE实现assets时,Record payload中包含了:

  • value v v v
  • asset id

相应Birth predicate中:

  • 定义了该token
  • 新的record id需要与consumed predicate ids匹配
  • 新的record value为sum of inputs

相应Death predicate中:

  • 定义了SCRIPT
  • 如可通过 签名 花费
  • 如可通过 多重签名+hash preimage 花费

3.2.2 基于ZEXE实现智能合约

基于ZEXE实现智能合约时,Record payload中包含了:

  • smart contract state
  • smart contract instance id

相应Birth predicate中:

  • 要么创建智能合约
  • 要么输入之一为the old smart contract record

相应Death predicate中:

  • 定义了智能合约的逻辑。

如以智能合约实现国际象棋游戏为例:

  • Record palyload中包含了:
    • smart contract state
    • smart contract instance id
  • 相应Birth predicate中:
    • 要么开始新的一局游戏(给pks分配黑/白)
    • 要么输入之一为the old chess game
  • 相应Death predicate中:
    • 若游戏结束,则给赢家钱。
    • 否则,输入record必须为game record + one move record。
    • move record必须由正确的玩家提供,move record中必须包含a valid move。

3.2.3 使ZEXE具有隐私性

即为ZEXE实现zero-knowledge:
在这里插入图片描述

3.3 用于长计算验证

在这里插入图片描述
将该长计算以circuit C C C表示有:

  • S ( C ) → ( S P , S V ) S(C)\rightarrow(S_P,S_V) S(C)(SP,SV)
  • x = ( i n p u t , o u t p u t ) x=(input, output) x=(input,output):公开信息
  • w = t r a n s c r i p t w=transcript w=transcript:私有信息,witness。

在这里插入图片描述
将SNARK用于长计算验证存在的问题主要有:

  • 1) P P P Prover生成proof用时很长。
  • 2)需要在长计算完成之后才开始证明。
  • 3)中途不能放弃计算。【可将长计算切分为多个短计算】
  • 4) S S S的运行时长至少与 ∣ C ∣ |C| C呈线性关系。(若会用于很多proofs,则可接受。)

3.3.1 将长计算切分为短计算

C I C_I CI来表示中间计算,将长计算切分为多个短计算:
在这里插入图片描述
为此,需要由updatable/incremental proofs,将长计算切分为 t t t个短计算,可表示为:
在这里插入图片描述

3.4 用于PhotoProof

所谓PhotoProof是指支持对signing camera拍的照片进行有效更新,并提供proof(proof支持incremental updatable),使得Viewer仍可对有效更新后的照片验证其真实性。
详细可参看Naveh等人2016年论文《PhotoProof: Cryptographic Image Authentication
for Any Set of Permissible Transformations
》。
在这里插入图片描述
在这里插入图片描述

3.5 用于恒定大小区块链

基本背景为:

  • Rollup可降低验证开销,但该开销仍然与更新的状态数呈线性关系。
  • 当有新节点加入到网络时,需要验证one rollup proof per block!
  • 通常启动全节点需要验证所有的区块,用时需要数天!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.6 用于隐私、可验证选举

所谓隐私、可验证选举,是指:

  • 每张选票都不关联身份信息。
  • 完全的隐私选举是只能知道最终的赢家,此处关注的为部分隐私选举,可知道中间和最终的投票数。这有点类似于美国的政府选举,可知道每个地区、州等的投票总数。
  • 最终的proof仅为几十kB,可在浏览器或手机等几乎任意设备上验证。
  • 假设选举选项仅有0和1。

在该选举系统中,有2个角色:

  • 1)投票人:投票人就“我具有投票权,我投选项 c c c,我的票根为 s s s”创建零知识证明。该ZKP的输入有 ( c , s ) (c,s) (c,s)。“票根”将是注册选民独有的数据,不能与该选民的身份联系起来,其他任何人都不知道。可以将其视为“我投了票”信息上带有投票人密钥的一种独特签名。我们将用这个来确保没有人投票超过一次。
  • 2)聚合器:聚合器会收集选票,并就“我知道对应一组票根 S S S的选票数为 ( n 0 , n 1 ) (n_0,n_1) (n0,n1)”。该ZKP的输入有 ( ( n 0 , n 1 ) , S ) ((n_0,n_1), S) ((n0,n1),S)创建零知识证明。

以数学方式来表达选票 Vote \text{Vote} Vote,应具有如下属性:

  • 存在投票私钥 sk \text{sk} sk,使得 pk=privKeyToPubKey(sk), isEligible(pk)=true, s=ballotStub(sk) \text{pk=privKeyToPubKey(sk), isEligible(pk)=true, s=ballotStub(sk)} pk=privKeyToPubKey(sk), isEligible(pk)=true, s=ballotStub(sk),同时存在签名 sig \text{sig} sig,使得 sigVerify(sig, pk, c)=true \text{sigVerify(sig, pk, c)=true} sigVerify(sig, pk, c)=true,有 ( c , s ) ∈ Vote (c,s)\in \text{Vote} (c,s)Vote

isEligible \text{isEligible} isEligible算法可验证某公钥的合法性。
在这里插入图片描述
即“若上图上半部分的均正确,则下半部分也为true”,反过来说是“若要证明 ( c , s ) ∈ Vote (c,s)\in\text{Vote} (c,s)Vote,则需要提供上半部分的所有”。

以数学方式来表达聚合投票数 VoteCount \text{VoteCount} VoteCount ( ( n 0 , n 1 ) , S ) ((n_0,n_1), S) ((n0,n1),S)应具有如下属性:
在这里插入图片描述
举例:
在这里插入图片描述
以上,描述 Vote \text{Vote} Vote需要一条rule,描述 VoteCount \text{VoteCount} VoteCount需要2条rule。需要Prover为这些rule制定prove算法:

  • voters需生成voting-proof
  • aggregators可将多个voting-proof合并一个proof来证明相应投票数的正确性。

可借助递归证明系统来实现以上prove算法。
在这里插入图片描述

参考文献

[1] 微软团队2021年论文 Nova: Recursive Zero-Knowledge Arguments from Folding Schemes
[2] 2021年7月视频 An Overview of Recursive SNARKs
[3] 2021年斯坦福课件 Recursive SNARKs
[4] 2020年Mina在zkproof的博客Inductive Proof Systems and Recursive SNARKs

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值