BulletproofsSigma protocolHalo2等ZK方案小结

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BulletproofsSigma protocolHalo2等ZK方案小结相关的知识,希望对你有一定的参考价值。

1. 引言

当前的ZK构建方案有:

  • 1)Bulletproofs
  • 2)Sigma protocol(+ Fiat-Shamir)
  • 3)Halo2
  • 4)Plonky2
  • 5)MPC-in-the-head proof(MPCith)

2. Bulletproofs


Bulletproofs的特点为:

  • 1)无需trusted setup的short NIZK
  • 2)基于Pedersen commitment构建
  • 3)支持proof aggregation
  • 4)Prover time为: O ( N ⋅ log ⁡ ( N ) ) O(N\\cdot \\log(N)) O(Nlog(N)),约30秒
  • 5)Verifier time为: O ( N ) O(N) O(N),约1秒
  • 6)proof size为: O ( log ⁡ ( N ) ) O(\\log(N)) O(log(N)),约1.3KB
  • 7)基于的安全假设为:discrete log

Bulletproofs适用的场景为:

  • 1)range proofs(仅需约600字节)
  • 2)inner product proofs
  • 3)MPC协议中的intermediary checks
  • 4)aggregated and distributed (with many private inputs) proofs

Bulletproofs不适合的场景有:

  • 1)需在链上验证的复杂任意statement

目前Bulletproofs方案已用于:

当前Bulletproofs开源库有:

Bulletproofs相关学习资源有:

3. Sigma Protocol(+ Fiat-Shamir)


Sigma Protocol(+ Fiat-Shamir)特点为:

  • 1)无需trusted setup的short proof。
  • 2)需要constant number(3)of public-key operations。
  • 3)可配置组合多个Sigma proofs,类似为A and\\or B、eq(A,B)、all(n,A)。
  • 4)基于的安全假设为:discrete log,honest verifier。

Sigma Protocol(+ Fiat-Shamir)适于的场景为:

  • 1)discrete log(dlog)proofs
  • 2)one-of-many dlogs
  • 3)discrete log equality(dleq)

Sigma Protocol(+ Fiat-Shamir)不适合的场景有:

  • 1)复杂任意计算。

当前Sigma Protocol已用于:

Sigma Protocol相关开源库有:

Sigma Protocol相关学习资料有:

4. Halo2

Halo2主要特点为:

  • 1)无需trusted setup,将accumulation scheme 与 PLONKish arithmetization高效结合。
  • 2)基于IPA commitment scheme。
  • 3)繁荣的开发者生态。
  • 4)Prover time为: O ( N ∗ log ⁡ N ) O(N*\\log N) O(NlogN)
  • 5)Verifier time为: O ( 1 ) > O(1)> O(1)>Groth16。
  • 6)Proof size为: O ( log ⁡ N ) O(\\log N) O(logN)
  • 7)基于的安全假设为:discrete log。

Halo2相关开源库有:

Halo2适于的场景有:

  • 1)任意可验证计算
  • 2)递归proof composition
  • 3)基于lookup-based Sinsemilla function的circuit-optimized hashing

Halo2不适于的场景为:

  • 1)除非替换使用KZG版本的Halo2,否则在以太坊上验证开销大。

当前ZCash官方版本暂未支持递归,目前递归可用的有:

目前Halo2已用于:

Halo2相关学习资料有:

5. Plonky2

Plonky2主要特点为:

  • 1)无需trusted setup,将FRI与PLONK结合。
  • 2)针对具有SIMD的处理器进行了优化,并采用了64 byte Goldilocks fields。
  • 3)Prover time为: O ( log ⁡ N ) O(\\log N) O(logN)
  • 4)Verifier time为: O ( log ⁡ N ) O(\\log N) O(logN)
  • 5)Proof size为: O ( N ∗ log ⁡ N ) O(N*\\log N) O(NlogN)
  • 6)基于的安全假设为:collision-resistant hash function。

Plonky2的主要特色在于:

  • 1)支持如下选择:
    • 1.1)选择fewer rows,意味着fast prover;
    • 1.2)选择fewer columns,意味着fast verifier。
  • 2)根据https://github.com/Sladuca/sha256-prover-comparison中的对比可知:
    • 2.1)Plonky2 STARK is ~38x faster than Halo2, ~64x faster than Groth16 on 3yo MBP。
    • 2.2)Plonky2 STARK does 142 hashes/sec on a 2021 MBP with an M1 processor。
  • 3)FRI中使用Poseidon sponge和GMIMC作为哈希函数。

Plonky2适于的场景有:

  • 1)任意可验证计算。
  • 2)递归proof composition。
  • 3)使用自定义gate进行电路优化。

Plonky2不适于的场景为:

  • 1)受限于其non-native arithmetic,不适于包含椭圆曲线运算的statements。

Plonky2已用于:

Plonky2相关开源库见:

Plonky2相关学习资料见:

6. MPC-in-the-head proof

相关论文有:

所谓MPC是指:

  • 1)各方可基于其私有输入进行分布式计算。
  • 2)每方都生成一个transcript(its view)。
  • 3)关键点在于#1:若MPC的最终结果出错,则在某处存在inconsistent view。

所谓Secret Sharing秘密共享:

  • 1)为MPC的一种常用抽象,将某个秘密切分给多方,使得他们需共同协作来使用该秘密。
  • 2)关键点在于#2:若仅公开共享的部分秘密,则该秘密仍是未知的。


所谓MPC-in-the-head(MPCith)是一个ZK系统:

  • 1)Prover会simulate an MPC "in their head"来基于 某private input(已分享给多个虚拟方) 计算任意函数。注意,所simulate的各方会根据其所使用的秘密块来生成a view。
  • 2)Verifier会请求公开这些view的一个子集,公开的子集数量不足以恢复出该private input,但是又能从信任发生不一致性的概率很低。若概率不够低,可重复这种交互多次(如约300次)。
  • 3)可使用Fiat-Shamir将以上过程实现为非交互式的,并可并行化。
  • 4)生成proof所用的底层MPC原语并不重要,仅所生成的views是重要的。从而可将simulated MPC看成是黑盒略过,从而可避免大量开销。

MPCith:

  • 1)用于boolean circuits效率很高,不像大多数其它NIZKs仅适于arithmetic circuit。
  • 2)可与具有private addresses的RAM进行扩展。从而很容易将verifiable computation circuit编译为任意程序。

MPCith的特点为:

  • Prover time为: O ( N ) O(N) O(N)< Groth16。
  • Verifier time为: O ( N ) O(N) O(N)
  • Proof size为: O ( N ) O(N) O(N)
  • 加法运算是free的,乘法运算占用大多数开销。
  • 进行可验证计算的开销要低很多:为(1/n_reps*n_parties=> 约1/600),要远低于SNARKs的(约1/100万)。

MPCith适于的场景有:

  • 1)boolean circuit:
    • 1.1)对于不易于转换为arithmetic circuit的复杂程序,如SHA hashes;
    • 1.2)机器学习以及设计浮点运算的近似计算,可借助boolean circuit实现逐位运算。
  • 2)delegated proving(证明委托):
    • 2.1)如需为某statement创建SNARK,但不想自己计算,也不想将witness告知第三方的情况。可创建一个MPCith proof,然后委托方可创建一个新的证明来验证该MPCith proof。

MPCith不适于的场景为:

  • 1)任何需要进行链上验证的场景。

目前MPCith已用于:

MPCith相关开源库有:

MPCith相关学习资料有:

参考资料

[1] twitter ZK方案之Bulletproofs、Halo2小结
[2] twitter MPC-in-the-head proofs

以上是关于BulletproofsSigma protocolHalo2等ZK方案小结的主要内容,如果未能解决你的问题,请参考以下文章

什么是URL?

.NET Web 服务超时异常

c#中的Unix套接字

tomcat服务器的配置

Maven--设置Http代理

UILocalnotification 和委托有啥区别? [关闭]