基于cycle of curves的Nova证明系统(2)

主要见斯坦福大学Wilson Nguyen、Dan Boneh和微软研究中心Srinath Setty 2023年论文《Revisiting the Nova Proof System on a Cycle of Curves》。

前序博客见:

  • 基于cycle of curves的Nova证明系统(1)

本文重点关注:

  • 1)Nova IVC proof压缩
  • 2)Nova IVC proof延展性问题 以及 应对措施

5. IVC Proof进一步压缩

本文提出了两种压缩IVC proof的方案:

  • 1)compression without SNARKs
  • 2)compression with SNARKs

https://github.com/Microsoft/Nova代码中的CompressSNARK采用了这两种压缩方式。

5.1)compression without SNARKs

已知某convincing proof:
π i = ( ( \pi_i=(( πi=(( i ( 2 ) , _i^{(2)}, i(2), i ( 2 ) ) , ( U i ( 1 ) , W i ( 1 ) ) , ( U i ( 2 ) , W i ( 2 ) ) ) _i^{(2)}),(\mathbb{U}_i^{(1)},\mathbb{W}_i^{(1)}),(\mathbb{U}_i^{(2)},\mathbb{W}_i^{(2)})) i(2)),(Ui(1),Wi(1)),(Ui(2),Wi(2)))

Prover P \mathcal{P} P端执行如下步骤,获得压缩proof π i ′ \pi_i' πi

  • 1)为 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2) fold pairs:将 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2)的committed pairs ( ( ( i ( 2 ) , _i^{(2)}, i(2), i ( 2 ) ) , ( U i ( 2 ) , W i ( 2 ) ) _i^{(2)}),(\mathbb{U}_i^{(2)},\mathbb{W}_i^{(2)}) i(2)),(Ui(2),Wi(2)) 进行fold:
    Fold P ( pk , ( \text{Fold}_{\mathcal{P}}(\text{pk},( FoldP(pk,( i ( 2 ) , _{i}^{(2)}, i(2), i ( 2 ) ) , ( U i ( 2 ) , W i ( 2 ) ) ) → ( T ˉ i ( 2 ) , ( ⋅ , W i + 1 ( 2 ) ) ) _{i}^{(2)}),(\mathbb{U}_{i}^{(2)}, \mathbb{W}_{i}^{(2)}))\rightarrow (\bar{T}_i^{(2)},(\cdot, \mathbb{W}_{i+1}^{(2)})) i(2)),(Ui(2),Wi(2)))(Tˉi(2),(,Wi+1(2)))
  • 2)输出压缩proof:
    π i ′ = ( \pi_i'=( πi=( i ( 2 ) , U i ( 2 ) , ( T ˉ i ( 2 ) , W i + 1 ( 2 ) ) , ( U i ( 1 ) , W i ( 1 ) ) ) _i^{(2)},\mathbb{U}_i^{(2)},(\bar{T}_i^{(2)},\mathbb{W}_{i+1}^{(2)}),(\mathbb{U}_i^{(1)},\mathbb{W}_i^{(1)})) i(2),Ui(2),(Tˉi(2),Wi+1(2)),(Ui(1),Wi(1)))

Verifier V \mathcal{V} V端执行如下步骤,来验证 压缩proof π i ′ \pi_i' πi

  • 1)执行初始folding流程: U i + 1 ( 2 ) : = Fold V ( vk , \mathbb{U}_{i+1}^{(2)}:=\text{Fold}_{\mathcal{V}}(\text{vk}, Ui+1(2):=FoldV(vk, i ( 2 ) , U i ( 2 ) , T ˉ i ( 2 ) ) _i^{(2)},\mathbb{U}_i^{(2)},\bar{T}_i^{(2)}) i(2),Ui(2),Tˉi(2))
  • 2)若满足以下6个条件,则验证通过:
    • 2.1)索引值 i i i必须大于0;
    • 2.2) i ( 2 ) . x 0 = H 1 ( vk , i ( 1 ) , z 0 ( 1 ) , z i ( 1 ) , U i ( 2 ) ) _{i}^{(2)}.x_0=H_1(\text{vk},i^{(1)},z_0^{(1)},z_i^{(1)},\mathbb{U}_i^{(2)}) i(2).x0=H1(vk,i(1),z0(1),zi(1),Ui(2))
    • 2.3) i ( 2 ) . x 1 = H 2 ( vk , i ( 2 ) , z 0 ( 2 ) , z i ( 2 ) , U i ( 1 ) ) _{i}^{(2)}.x_1=H_2(\text{vk},i^{(2)},z_0^{(2)},z_i^{(2)},\mathbb{U}_i^{(1)}) i(2).x1=H2(vk,i(2),z0(2),zi(2),Ui(1))
    • 2.4) ( U i ( 1 ) , W i ( 1 ) ) (\mathbb{U}_i^{(1)},\mathbb{W}_i^{(1)}) (Ui(1),Wi(1)) pair 满足 R1CS ( 1 ) \text{R1CS}^{(1)} R1CS(1)
    • 2.5) ( U i ( 2 ) , W i ( 2 ) ) (\mathbb{U}_i^{(2)},\mathbb{W}_i^{(2)}) (Ui(2),Wi(2)) pair 满足 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2)
    • 2.6)“ ( ( ( i ( 2 ) , _i^{(2)}, i(2), i ( 2 ) ) _i^{(2)}) i(2)) pair 严格 满足 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2) ” 改为 ” i ( 2 ) . E ˉ = 0 ˉ ( 2 ) _{i}^{(2)}.\bar{E}=\bar{0}^{(2)} i(2).Eˉ=0ˉ(2) i ( 2 ) . s = 1 ˉ ( 2 ) _{i}^{(2)}.s=\bar{1}^{(2)} i(2).s=1ˉ(2)

压缩proof的递归运算:

  • 压缩proof π i ′ \pi_i' πi 和 新的evaluation值: z i + 1 ( 1 ) : = F 1 ( z i ( 1 ) , aux i ( 1 ) ) z_{i+1}^{(1)}:=F_1(z_i^{(1)}, \text{aux}_i^{(1)}) zi+1(1):=F1(zi(1),auxi(1)) 以及 z i + 1 ( 2 ) : = F 2 ( z i ( 2 ) , aux i ( 2 ) ) z_{i+1}^{(2)}:=F_2(z_i^{(2)}, \text{aux}_i^{(2)}) zi+1(2):=F2(zi(2),auxi(2)),足以供Nova prover执行another step for Iteration i + 1 i+1 i+1。【注意,压缩proof π i ′ \pi_i' πi是readily incremental的。】
  • 为便于理解,本论文中基于未压缩proof π i \pi_i πi构建了IVC方案,也可基于压缩proof π i ′ \pi_i' πi来构建IVC方案。Nova论文,在”compression without SNARKs“之后,使用了某SNARK来将proof π i ′ \pi_i' πi进一步压缩为 π i ′ ′ \pi_i^{''} πi′′

5.2)compression with SNARKs

针对relation R s a t \mathcal{R}_{sat} Rsat的通用SNARK可用于进一步压缩IVC proof。Nova论文中采用Spartan SNARK来压缩IVC proof。

已知”compression without SNARKs“的压缩proof:
π i ′ = ( \pi_i'=( πi=( i ( 2 ) , U i ( 2 ) , ( T ˉ i ( 2 ) , W i + 1 ( 2 ) ) , ( U i ( 1 ) , W i ( 1 ) ) ) _i^{(2)},\mathbb{U}_i^{(2)},(\bar{T}_i^{(2)},\mathbb{W}_{i+1}^{(2)}),(\mathbb{U}_i^{(1)},\mathbb{W}_i^{(1)})) i(2),Ui(2),(Tˉi(2),Wi+1(2)),(Ui(1),Wi(1)))

Prover P \mathcal{P} P端执行如下步骤,获得压缩proof π i ′ ′ \pi_i^{''} πi′′
基于cycle of curves的Nova证明系统(2)_第1张图片
Verifier V \mathcal{V} V端执行如下步骤,来验证 压缩proof π i ′ \pi_i' πi

  • 1)执行初始folding流程: U i + 1 ( 2 ) : = Fold V ( vk , \mathbb{U}_{i+1}^{(2)}:=\text{Fold}_{\mathcal{V}}(\text{vk}, Ui+1(2):=FoldV(vk, i ( 2 ) , U i ( 2 ) , T ˉ i ( 2 ) ) _i^{(2)},\mathbb{U}_i^{(2)},\bar{T}_i^{(2)}) i(2),Ui(2),Tˉi(2))
  • 2)若满足以下6个条件,则验证通过:
    • 2.1)索引值 i i i必须大于0;
    • 2.2) i ( 2 ) . x 0 = H 1 ( vk , i ( 1 ) , z 0 ( 1 ) , z i ( 1 ) , U i ( 2 ) ) _{i}^{(2)}.x_0=H_1(\text{vk},i^{(1)},z_0^{(1)},z_i^{(1)},\mathbb{U}_i^{(2)}) i(2).x0=H1(vk,i(1),z0(1),zi(1),Ui(2))
    • 2.3) i ( 2 ) . x 1 = H 2 ( vk , i ( 2 ) , z 0 ( 2 ) , z i ( 2 ) , U i ( 1 ) ) _{i}^{(2)}.x_1=H_2(\text{vk},i^{(2)},z_0^{(2)},z_i^{(2)},\mathbb{U}_i^{(1)}) i(2).x1=H2(vk,i(2),z0(2),zi(2),Ui(1))
    • 2.4) ( U i ( 1 ) , W i ( 1 ) ) (\mathbb{U}_i^{(1)},\mathbb{W}_i^{(1)}) (Ui(1),Wi(1)) pair 满足 R1CS ( 1 ) \text{R1CS}^{(1)} R1CS(1)
    • 2.5) ( U i ( 2 ) , W i ( 2 ) ) (\mathbb{U}_i^{(2)},\mathbb{W}_i^{(2)}) (Ui(2),Wi(2)) pair 满足 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2)
    • 2.4) π s a t \pi_{sat} πsat为 relation R s a t \mathcal{R}_{sat} Rsat with instance ( U i + 1 ( 2 ) , U i ( 2 ) ) (\mathbb{U}_{i+1}^{(2)},\mathbb{U}_{i}^{(2)}) (Ui+1(2),Ui(2)) 的convincing SNARK proof。
    • 2.5)2.6)“ ( ( ( i ( 2 ) , _i^{(2)}, i(2), i ( 2 ) ) _i^{(2)}) i(2)) pair 严格 满足 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2) ” 改为 ” i ( 2 ) . E ˉ = 0 ˉ ( 2 ) _{i}^{(2)}.\bar{E}=\bar{0}^{(2)} i(2).Eˉ=0ˉ(2) i ( 2 ) . s = 1 ˉ ( 2 ) _{i}^{(2)}.s=\bar{1}^{(2)} i(2).s=1ˉ(2)

6. Nova IVC proof的延展性 及 应对措施

Nova的IVC proof具有延展性问题。

假设某adversary知道某valid Nova IVC proof π i \pi_i πi 以及相应的参数:

  • IVC公共参数 p p pp pp
  • 函数描述: F 1 : F 1 a 1 × F 1 b 1 → F 1 a 1 F_1: \mathbb{F}_1^{a_1}\times\mathbb{F}_1^{b_1}\rightarrow \mathbb{F}_1^{a_1} F1:F1a1×F1b1F1a1 F 2 : F 2 a 2 × F 2 b 2 → F 2 a 2 F_2: \mathbb{F}_2^{a_2}\times\mathbb{F}_2^{b_2}\rightarrow \mathbb{F}_2^{a_2} F2:F2a2×F2b2F2a2
  • 索引号 i ∈ N i\in\mathbb{N} iN
  • 起始值 z 0 ( 1 ) ∈ F 1 a 1 z_0^{(1)}\in\mathbb{F}_1^{a_1} z0(1)F1a1 z 0 ( 2 ) ∈ F 2 a 2 z_0^{(2)}\in\mathbb{F}_2^{a_2} z0(2)F2a2
  • claimed evaluations值 z i ( 1 ) ∈ F 1 a 1 z_i^{(1)}\in\mathbb{F}_1^{a_1} zi(1)F1a1 z i ( 2 ) ∈ F 2 a 2 z_i^{(2)}\in\mathbb{F}_2^{a_2} zi(2)F2a2

针对相同的iteration i i i,该adversary可对不同于 z i ( 2 ) z_i^{(2)} zi(2) z p r i m e ( 2 ) z_{prime}^{(2)} zprime(2)构建proof π p r i m e \pi_{prime} πprime,而IVC Verifier的参数为:
( p p , ( F 1 , F 2 ) , i , ( z 0 ( 1 ) , z 0 ( 2 ) ) , ( z i ( 1 ) , z p r i m e ( 2 ) ) , π p r i m e ) (pp, (F_1,F_2), i, (z_0^{(1)},z_0^{(2)}),(z_i^{(1)},z_{prime}^{(2)}),\pi_{prime}) (pp,(F1,F2),i,(z0(1),z0(2)),(zi(1),zprime(2)),πprime)
为让IVC Verifier验证通过。

需强调:

  • 为计算 z i ( 2 ) z_i^{(2)} zi(2),adversary无需知道所有的辅助值 ( aux 0 ( 2 ) , aux 1 ( 2 ) , ⋯   , aux i − 1 ( 2 ) ) (\text{aux}_0^{(2)},\text{aux}_1^{(2)},\cdots,\text{aux}_{i-1}^{(2)}) (aux0(2),aux1(2),,auxi1(2))。在不知道前 i − 1 i-1 i1个辅助的情况下,修改替换最后一个辅助值 aux p r i m e ( 2 ) ≠ aux i − 1 ( 2 ) \text{aux}_{prime}^{(2)}\neq \text{aux}_{i-1}^{(2)} auxprime(2)=auxi1(2),可为iteration i i i的替换值 z p r i m e ( 2 ) z_{prime}^{(2)} zprime(2)构建proof π p r i m e \pi_{prime} πprime

延展性会带来现实世界漏洞。假设:

  • Alice使用其秘密辅助值来计算 z i ( 2 ) z_i^{(2)} zi(2),且 z i ( 2 ) z_i^{(2)} zi(2)中编码了其payment地址。
  • Alice将 z i ( 2 ) z_i^{(2)} zi(2)和相应的proof发送给某payment合约。
  • 攻击者可拦截Alice的消息,将 z i ( 2 ) z_i^{(2)} zi(2)替换为 编码了攻击者payment地址的 z p r i m e ( 2 ) z_{prime}^{(2)} zprime(2),以及有效的proof π p r i m e \pi_{prime} πprime 发送个payment合约。payment合约会将资金发送给攻击者,而不是给Alice。
    事实上,若Tornado Cash中使用statement可延展的证明系统,则可能盗取资金。

若函数 F F F为确定性函数——即输入中不包含辅助参数,则不存在延展性问题。因为此时,函数 F F F的第 i i i次迭代的结果 z i z_i zi 由初始值 z 0 z_0 z0完全确定。

而对具有辅助输入的Nova IVC,为解决其延展性问题,可采用如下3种策略:

  • 1)压缩(Compression):基于cycle of curves的Nova证明系统(1)的”4.3 修订版Nova Prover算法“中,Prover在输出final folded instance的同时会输出a satisfying witness。可替换为,Prover在输出final folded instance的同时输出 a zkSNARK proof that it has a valid witness for this folded instance。若该zkSNARK方案是simulation extractable,则该final proof是非延展性的。事实上,Nova的当前实现就是采用这种方案,在解决延展性问题的同时,对final proof进行了压缩。但是,这与IVC概念不兼容:压缩之后,另一方无法通过folding进一步继续迭代了。这样的结果就是,整个IVC chain的计算仅能由单一方完成。
  • 2)上下文(context):将verification key vk \text{vk} vk扩展为包含一个额外的context元素 ctx \text{ctx} ctx。这样可确保非延展性,但是与IVC不兼容。额外的context元素包含了该计算的最后一步,且阻止了其它方使用folding进一步延长IVC chain。
  • 3)递增上下文(Incremental context):为确保非延展性的同时,支持IVC的incremental aspect,每次一方与另一方交互时更新verification key vk \text{vk} vk,从而各方都可延长IVC chain。

6.1 延展性攻击

本节展示对IVC chain最后一步的延展性攻击。

已知:
π i = ( ( \pi_i=(( πi=(( i ( 2 ) , _i^{(2)}, i(2), i ( 2 ) ) , ( U i ( 1 ) , W i ( 1 ) ) , ( U i ( 2 ) , W i ( 2 ) ) ) _i^{(2)}),(\mathbb{U}_i^{(1)},\mathbb{W}_i^{(1)}),(\mathbb{U}_i^{(2)},\mathbb{W}_i^{(2)})) i(2)),(Ui(1),Wi(1)),(Ui(2),Wi(2)))

延展性攻击操作如下:

  • 1)根据论文《Revisiting the Nova Proof System on a Cycle of Curves》第6章”Proof of Security“可知,可解析 i ( 2 ) _i^{(2)} i(2) 来获取relational witness:
    w ^ i ( 2 ) = ( vk , ( i − 1 ) ( 2 ) , z 0 ( 2 ) , z i − 1 ( 2 ) , aux i − 1 ( 2 ) , U i − 1 ( 1 ) , \hat{w}_{i}^{(2)}=(\text{vk}, (i-1)^{(2)}, z_0^{(2)}, z_{i-1}^{(2)},\text{aux}_{i-1}^{(2)},\mathbb{U}_{i-1}^{(1)}, w^i(2)=(vk,(i1)(2),z0(2),zi1(2),auxi1(2),Ui1(1), i − 1 ( 1 ) , T ˉ i − 1 ( 1 ) ) _{i-1}^{(1)},\bar{T}_{i-1}^{(1)}) i1(1),Tˉi1(1))
    其中 z i ( 2 ) = F 2 ( z 0 ( 2 ) , aux 0 ( 2 ) ) z_i^{(2)}=F_2(z_0^{(2)}, \text{aux}_0^{(2)}) zi(2)=F2(z0(2),aux0(2)) U i ( 1 ) = Fold V ( vk , U i − 1 ( 1 ) , \mathbb{U}_i^{(1)}=\text{Fold}_{\mathcal{V}}(\text{vk}, \mathbb{U}_{i-1}^{(1)}, Ui(1)=FoldV(vk,Ui1(1), i ( 1 ) , T ˉ i − 1 ( 1 ) ) _i^{(1)},\bar{T}_{i-1}^{(1)}) i(1),Tˉi1(1))
    从而可根据 i ( 2 ) _i^{(2)} i(2) 来解析获取 w ^ i ( 2 ) \hat{w}_{i}^{(2)} w^i(2)

  • 2)找到一个不同的辅助值:使用 z i − 1 ( 2 ) z_{i-1}^{(2)} zi1(2),(假设对于 F 2 F_2 F2很容易)找到某 aux p r i m e ( 2 ) \text{aux}_{prime}^{(2)} auxprime(2),使得:
    z p r i m e ( 2 ) : = F 2 ( z i − 1 ( 2 ) , aux p r i m e ( 2 ) ) ≠ F 2 ( z i − 1 ( 2 ) , aux i − 1 ( 2 ) ) = z i ( 2 ) z_{prime}^{(2)}:=F_2(z_{i-1}^{(2)},\text{aux}_{prime}^{(2)})\neq F_2(z_{i-1}^{(2)},\text{aux}_{i-1}^{(2)})=z_{i}^{(2)} zprime(2):=F2(zi1(2),auxprime(2))=F2(zi1(2),auxi1(2))=zi(2)

  • 3)为 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2)计算新pair ( ( ( p r i m e ( 2 ) , _{prime}^{(2)}, prime(2), p r i m e ( 2 ) ) _{prime}^{(2)}) prime(2))

    • 3.1)定义 w ^ p r i m e ( 2 ) = ( vk , ( i − 1 ) ( 2 ) , z 0 ( 2 ) , z i − 1 ( 2 ) , aux p r i m e ( 2 ) , U i − 1 ( 1 ) , \hat{w}_{prime}^{(2)}=(\text{vk}, (i-1)^{(2)}, z_0^{(2)}, z_{i-1}^{(2)},\text{aux}_{prime}^{(2)},\mathbb{U}_{i-1}^{(1)}, w^prime(2)=(vk,(i1)(2),z0(2),zi1(2),auxprime(2),Ui1(1), i − 1 ( 1 ) , T ˉ i − 1 ( 1 ) ) _{i-1}^{(1)},\bar{T}_{i-1}^{(1)}) i1(1),Tˉi1(1))为relation R 2 \mathcal{R}_2 R2的witness。然后基于 w ^ p r i m e ( 2 ) \hat{w}_{prime}^{(2)} w^prime(2),计算满足 R1CS ( 2 ) \text{R1CS}^{(2)} R1CS(2)约束系统所需的extended witness w p r i m e ( 2 ) w_{prime}^{(2)} wprime(2)
    • 3.2)对extended witness w p r i m e ( 2 ) w_{prime}^{(2)} wprime(2)进行commit,有: w ˉ p r i m e ( 2 ) ← Commit ( p p W ( 2 ) , w p r i m e ( 2 ) ) \bar{w}_{prime}^{(2)}\leftarrow \text{Commit}(pp_W^{(2)},w_{prime}^{(2)}) wˉprime(2)Commit(ppW(2),wprime(2))
    • 3.3)定义 x 0 : = x_0:= x0:= i ( 1 ) . x 1 _i^{(1)}.x_1 i(1).x1,并计算 x 1 : = H 2 ( vk , 1 ( 2 ) , z 0 ( 2 ) , z p r i m e ( 2 ) : = F 2 ( z i − 1 ( 2 ) , aux p r i m e ( 2 ) ) , U i ( 1 ) ) x_1:=H_2(\text{vk},1^{(2)},z_0^{(2)},z_{prime}^{(2)}:=F_2(z_{i-1}^{(2)}, \text{aux}_{prime}^{(2)}),\mathbb{U}_i^{(1)}) x1:=H2(vk,1(2),z0(2),zprime(2):=F2(zi1(2),auxprime(2)),Ui(1))
    • 3.4)设置 p r i m e ( 2 ) : = ( 0 ˉ ( 2 ) , 1 ( 2 ) , w ˉ p r i m e ( 2 ) , x : = ( x 0 , x 1 ) ) _{prime}^{(2)}:=(\bar{0}^{(2)}, 1^{(2)},\bar{w}_{prime}^{(2)},x:=(x_0,x_1)) prime(2):=(0ˉ(2),1(2),wˉprime(2),x:=(x0,x1)) p r i m e ( 2 ) : = ( 0 ⃗ ( 2 ) , w p r i m e ( 2 ) ) _{prime}^{(2)}:=(\vec{0}^{(2)},w_{prime}^{(2)}) prime(2):=(0 (2),wprime(2))
  • 4)输出新的攻击proof: π p r i m e = ( ( \pi_{prime}=(( πprime=(( p r i m e ( 2 ) , _{prime}^{(2)}, prime(2), p r i m e ( 2 ) ) , ( U i ( 1 ) , W i ( 1 ) ) , ( U i ( 2 ) , W i ( 2 ) ) ) _{prime}^{(2)}),(\mathbb{U}_i^{(1)},\mathbb{W}_i^{(1)}),(\mathbb{U}_i^{(2)},\mathbb{W}_i^{(2)})) prime(2)),(Ui(1),Wi(1)),(Ui(2),Wi(2)))

新的攻击proof π p r i m e \pi_{prime} πprime可验证通过。

所谓延展攻击,是指IVC证明系统中:

  • z i z_i zi有效性的final proof中包含了足够的信息来重构出 z i z_i zi的preimage z i − 1 z_{i-1} zi1
  • 且 知道对应 z i − 1 z_{i-1} zi1有效性的IVC proof

则在不知道前 i − 1 i-1 i1个辅助输入值的情况下,攻击者可重新执行IVC Prover的最后一个step:

  • 选择不同的最后一个辅助输入值 aux i − 1 \text{aux}_{i-1} auxi1,获得的结果 z i ′ ≠ z i z_i'\neq z_i zi=zi
  • z i ′ z_i' zi生成有效的攻击proof。

由此可知Nova论文中的IVC proofs也是可延展的。

6.2 延展攻击应对措施

而对具有辅助输入的Nova IVC,为解决其延展性问题,可采用如下3种策略:

  • 1)压缩(Compression)
  • 2)上下文(context)
  • 3)递增上下文(Incremental context)

6.2.1 压缩(Compression)

压缩(Compression):基于cycle of curves的Nova证明系统(1)的”4.3 修订版Nova Prover算法“中,Prover在输出final folded instance的同时会输出a satisfying witness。可替换为,Prover在输出final folded instance的同时输出 a zkSNARK proof that it has a valid witness for this folded instance。若该zkSNARK方案是simulation extractable,则该final proof是非延展性的。事实上,Nova的当前实现就是采用这种方案,在解决延展性问题的同时,对final proof进行了压缩。但是,这与IVC概念不兼容:压缩之后,另一方无法通过folding进一步继续迭代了。

即不允许第一个Prover(Fiona)将计算传递给第二个Prover(Sam)来继续该folding流程。Sam看不到Fiona计算的最后一个folding instance的witness,使得Sam无法进一步迭代 F F F到该instance中。而Fiona必须压缩其proof,否则Sam可在开始其计算之前做延展攻击。

这样的结果就是,整个IVC chain的计算仅能由单一方完成,与efficiently incremental IVC不兼容。

压缩IVC proof π i ′ ′ \pi_i^{''} πi′′定义为:
π i ′ ′ = ( \pi_i^{''}=( πi′′=( i ( 2 ) , U i ( 2 ) , U i ( 1 ) , T ˉ i ( 2 ) , π s a t ) _i^{(2)},\mathbb{U}_i^{(2)},\mathbb{U}_i^{(1)},\bar{T}_i^{(2)}, \pi_{sat}) i(2),Ui(2),Ui(1),Tˉi(2),πsat)

要求:

  • 1.1)此处的zkSNARK方案必须具有zero knowledge属性,使得 π s a t \pi_{sat} πsat中不包含任何底层witnesses信息。
  • 1.2) i ( 2 ) _i^{(2)} i(2)中的witness 承诺值 w ˉ i ( 2 ) \bar{w}_i^{(2)} wˉi(2)必须具有hiding属性。
  • 1.3)该zkSNARK方案需simulation extractable。

6.2.2 上下文(context)

上下文(context):将verification key vk \text{vk} vk扩展为包含一个额外的context元素 ctx \text{ctx} ctx。这样可确保非延展性,但是与IVC不兼容。额外的context元素包含了该计算的最后一步,且阻止了其它方使用folding进一步延长IVC chain。
即verification key vk \text{vk} vk定义为:
( ⋅ , vk ) ← Fold K ( p p , ( R1CS ( 1 ) , R1CS ( 2 ) ) , ctx ) (\cdot, \text{vk})\leftarrow \text{Fold}_{\mathcal{K}}(pp, (\text{R1CS}^{(1)},\text{R1CS}^{(2)}),\text{ctx}) (,vk)FoldK(pp,(R1CS(1),R1CS(2)),ctx),其中 ctx ← ( i , z i ( 1 ) , z i ( 2 ) ) \text{ctx}\leftarrow (i,z_i^{(1)},z_i^{(2)}) ctx(i,zi(1),zi(2))
这样就将该proof 绑定了 特定的choice ( i , z i ( 1 ) , z i ( 2 ) ) (i,z_i^{(1)},z_i^{(2)}) (i,zi(1),zi(2))。但是也会破坏incremental属性,因prover无法将该proof传递给另一prover继续迭代 j > i j>i j>i。注意仅有第一个IVC Prover在构建IVC proof之前必须计算出最终的 ( z i ( 1 ) , z i ( 2 ) ) (z_i^{(1)},z_i^{(2)}) (zi(1),zi(2))

6.2.3 递增上下文(Incremental context)

递增上下文(Incremental context):为确保非延展性的同时,支持IVC的incremental aspect,每次一方与另一方交互时更新verification key vk \text{vk} vk,从而各方都可延长IVC chain。

假设有2个Prover: P p r i o r , P c u r r \mathcal{P}_{prior},\mathcal{P}_{curr} Pprior,Pcurr。Prover P p r i o r \mathcal{P}_{prior} Pprior在IVC chain的位置 a a a收到一个proof,并继续计算到位置 b > a b>a b>a。Prover P c u r r \mathcal{P}_{curr} Pcurr收到 P p r i o r \mathcal{P}_{prior} Pprior生成的proof,并继续计算到位置 c > b c>b c>b
这2个prover会将私有辅助数据包含在各自的计算部分。Prover P c u r r \mathcal{P}_{curr} Pcurr向生成 F F F执行 c c c次的IVC proof π c \pi_c πc,其中的辅助值 与 之前Prover在前 b b b次迭代中所使用 辅助值 一样,并使用Prover P c u r r \mathcal{P}_{curr} Pcurr自身的辅助值做剩下的 c − b c-b cb次迭代。

引入一个范围参数 range \text{range} range,并将其包含在verification key vk \text{vk} vk中。范围参数 range \text{range} range使得Prover P c u r r \mathcal{P}_{curr} Pcurr可指定合适需切换新的在verification key vk \text{vk} vk

定义新的摘要参数 dig \text{dig} dig,其等于老的verification key vk \text{vk} vk
dig : = H ( p p , ( R1CS ( 1 ) , R1CS ( 2 ) ) ) \text{dig}:=H(pp, (\text{R1CS}^{(1)},\text{R1CS}^{(2)})) dig:=H(pp,(R1CS(1),R1CS(2)))

对于 a < b < c aa<b<c,有:
range p r i o r : = ( ( a , z a ( 1 ) , z a ( 2 ) ) , ( b , z b ( 1 ) , z b ( 2 ) ) ) ,     vk p r i o r : = H ( dig , range p r i o r )      ( 50 ) \text{range}_{prior}:=((a,z_a^{(1)},z_a^{(2)}),(b,z_b^{(1)},z_b^{(2)})),\ \ \ \text{vk}_{prior}:=H(\text{dig},\text{range}_{prior})\ \ \ \ (50) rangeprior:=((a,za(1),za(2)),(b,zb(1),zb(2))),   vkprior:=H(dig,rangeprior)    (50)
以及
range c u r r : = ( ( b , z b ( 1 ) , z b ( 2 ) ) , ( c , z c ( 1 ) , z c ( 2 ) ) ) ,      vk c u r r : = H ( dig , range c u r r )      ( 51 ) \text{range}_{curr}:=((b,z_b^{(1)},z_b^{(2)}),(c,z_c^{(1)},z_c^{(2)})),\ \ \ \ \text{vk}_{curr}:=H(\text{dig},\text{range}_{curr})\ \ \ \ (51) rangecurr:=((b,zb(1),zb(2)),(c,zc(1),zc(2))),    vkcurr:=H(dig,rangecurr)    (51)
其中 ( a , z a ( 1 ) , z a ( 2 ) ) (a,z_a^{(1)},z_a^{(2)}) (a,za(1),za(2))为迭代 F F F a a a次的claimed evaluation,同理 b , c b,c b,c

为验证迭代 c c c次的计算,IVC Verifier需明确知道evaluations ( b , z b ( 1 ) , z b ( 2 ) ) (b,z_b^{(1)},z_b^{(2)}) (b,zb(1),zb(2)) ( c , z c ( 1 ) , z c ( 2 ) ) (c,z_c^{(1)},z_c^{(2)}) (c,zc(1),zc(2))。其验证 b < c bb<c,并计算参数 dig \text{dig} dig vk c u r r \text{vk}_{curr} vkcurr

此外论文《Revisiting the Nova Proof System on a Cycle of Curves》图1a和图1b中需额外引入witness输入 dig \text{dig} dig ( a , z a ( 1 ) , z a ( 2 ) ) (a,z_a^{(1)},z_a^{(2)}) (a,za(1),za(2)) ( b , z b ( 1 ) , z b ( 2 ) ) (b,z_b^{(1)},z_b^{(2)}) (b,zb(1),zb(2)),并额外包含以下约束:

  • 输入的迭代索引 i i i需满足 i > b > a i>b>a i>b>a
  • 若输入迭代索引 i ≠ b i\neq b i=b,则正常处理。input committed i _i i i + 1 _{i+1} i+1中的verification key是完全相同的。
  • 若输入迭代索引 i = b i= b i=b,则relation需交换verification key。
    • 检查input instance b _b b中包含了按上面公式(50)计算的verification key vk p r i o r \text{vk}_{prior} vkprior
    • 按公式(51)计算verification key vk c u r r \text{vk}_{curr} vkcurr
    • 在folding运算中使用 vk c u r r \text{vk}_{curr} vkcurr,且在instance b + 1 _{b+1} b+1的输出哈希中包含 vk c u r r \text{vk}_{curr} vkcurr

如上所示,可在保留incremental属性的同时,阻止延展性攻击。代价是需要稍微更大的IVC proof,除最后的evaluations ( c , z c ( 1 ) , z c ( 2 ) ) (c,z_c^{(1)},z_c^{(2)}) (c,zc(1),zc(2))之外,还需要上一次做Prover转移的evaluations ( b , z b ( 1 ) , z b ( 2 ) ) (b,z_b^{(1)},z_b^{(2)}) (b,zb(1),zb(2))

IVC chain的最终Prover仍可以使用zkSNARK来压缩final proof。

Nova系列博客

  • Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记
  • Nova 和 SuperNova:无需通用电路的通用机器执行证明系统
  • Sangria:类似Nova folding scheme的relaxed PLONK for PLONK
  • 基于Nova/SuperNova的zkVM
  • SuperNova:为多指令虚拟机执行提供递归证明
  • Lurk——Recursive zk-SNARKs编程语言
  • Research Day 2023:Succinct ZKP最新进展
  • 2023年 ZK Hack以及ZK Summit 亮点记
  • 基于cycle of curves的Nova证明系统(1)

你可能感兴趣的:(零知识证明,零知识证明)