Bulletproofs、Sigma protocol、Halo2等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(N⋅log(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方案已用于:
- 1)比特币的隐私交易:ELEMENTS Confidential Transactions
- 2)Monero:Monero Becomes Bulletproof
- 3)Stellar Shielded Tx(Cloak):Cloak隐私资产协议
当前Bulletproofs开源库有:
- 1)https://github.com/dalek-cryptography/bulletproofs(Rust)
- 2)https://github.com/adjoint-io/bulletproofs(Haskell)
- 3)https://github.com/bbuenz/BulletProofLib(Java)
Bulletproofs相关学习资源有:
- 1)Stanford Bulletproofs
- 2)论文作者Benedikt Bünz Bulletproofs视频
- 3)Building on 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已用于:
- 1)Signal (Algebraic MACs for group chats):Technology Preview: Signal Private Group System
- 2)dleq proofs in the adaptor signatures
- 3)verifiable random functions
- 4)ElGamal encryption in the Cryptography for #MeToo
Sigma Protocol相关开源库有:
- 1)https://github.com/LLFourn/secp256kfun/tree/master/sigma_fun(Rust)
- 2)https://pkg.go.dev/go.dedis.ch/kyber/v4/proof(Go)
- 3)https://github.com/cryptobiu/libscapi(C++)
- 4)https://github.com/spring-epfl/zksk(Python)
Sigma Protocol相关学习资料有:
- 1)Zero Knowledge Proofs with Sigma Protocols
- 2)Sigma Protocols and (Non-Interactive) Zero Knowledge
- 3)ZKProof Standardizing Sigma Protocols?
4. Halo2
Halo2主要特点为:
- 1)无需trusted setup,将accumulation scheme 与 PLONKish arithmetization高效结合。
- 2)基于IPA commitment scheme。
- 3)繁荣的开发者生态。
- 4)Prover time为:O(N∗logN)O(N*\log N)O(N∗logN)。
- 5)Verifier time为:O(1)>O(1)>O(1)>Groth16。
- 6)Proof size为:O(logN)O(\log N)O(logN)。
- 7)基于的安全假设为:discrete log。
Halo2相关开源库有:
- 1)https://github.com/zcash/halo2:ZCash官方版本,采用IPA承诺机制。
- 2)https://github.com/privacy-scaling-explorations/halo2wrong:将ZCash官方版本中的IPA承诺机制替换为KZG承诺机制。
- 3)https://github.com/Orbis-Tertius/halo2:将ZCash官方版本中的IPA承诺机制替换为FRI承诺机制。(开发中)
- 4)Mina Kimchi proof system:Mina版本,Halo2部分见https://github.com/o1-labs/proof-systems(Rust),递归实现见https://github.com/MinaProtocol/mina/tree/develop/src/lib/pickles(OCaml)。
Halo2适于的场景有:
- 1)任意可验证计算
- 2)递归proof composition
- 3)基于lookup-based Sinsemilla function的circuit-optimized hashing
Halo2不适于的场景为:
- 1)除非替换使用KZG版本的Halo2,否则在以太坊上验证开销大。
当前ZCash官方版本暂未支持递归,目前递归可用的有:
- 1)Scroll团队KZG版本的https://github.com/scroll-tech/halo2-snark-aggregator
- 2)Orbis Labs团队正在使用Tiny-RAM架构构建其accumulation scheme:https://github.com/Orbis-Tertius/tiny-ram-halo2
目前Halo2已用于:
- 1)ZCash shielded protocol(Orchard):Bringing Halo 2 to Zcash
- 2)Scroll zkEVM:Scroll zkEVM
- 3)Orbis ZK-Rollup on Cardano:https://github.com/Orbis-Tertius/Orbis
- 4)Dark Fi L1:Dark.fi
Halo2相关学习资料有:
- 1)基本解释:Explaining Halo 2
- 2)doc:Halo2文档
- 3)视频:Zcash: Halo 2 and SNARKs without Trusted Setups
- 4)数学:2021年11月Vitalik博客Halo and more: exploring incremental verification and SNARKs without pairings
- 5)Halo2生态展示:2022年8月视频Halo 2 Community Showcase - Ying Tong at Zcon3
- 6)更多:https://github.com/adria0/awesome-halo2
5. Plonky2
Plonky2主要特点为:
- 1)无需trusted setup,将FRI与PLONK结合。
- 2)针对具有SIMD的处理器进行了优化,并采用了64 byte Goldilocks fields。
- 3)Prover time为:O(logN)O(\log N)O(logN)。
- 4)Verifier time为:O(logN)O(\log N)O(logN)。
- 5)Proof size为:O(N∗logN)O(N*\log N)O(N∗logN)。
- 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已用于:
- 1)Polygon Zero(ZK L2,早期名为Mir protocol)
Plonky2相关开源库见:
- 1)https://github.com/mir-protocol/plonky2
Plonky2相关学习资料见:
- 1)Introducing Plonky2
- 2)Plonky2论文 Plonky2: Fast Recursive Arguments with PLONK and FRI
6. MPC-in-the-head proof
相关论文有:
- 2021年论文 Formal security analysis of MPC-in-the-head zero-knowledge protocols:开源代码见:https://github.com/Nsidorenco/Decomposition-zk。形式化安全分析,采用eC语言。
所谓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已用于:
- 1)微软PICNIC(抗量子签名方案):https://github.com/microsoft/Picnic
MPCith相关开源库有:
- 1)https://github.com/trailofbits/reverie/tree/stacked-ikos(Rust):Reverie is an implementation (prover and verifier) of the MPC-in-the-head NIZKPoK。
- 2)https://github.com/cronokirby/boo-hoo(Rust):ZKBoo。
- 3)https://github.com/cronokirby/Rem-Boo(Rust):Fast ZK proofs over boolean circuits with RAM。
MPCith相关学习资料有:
- 1)2022年8月6日episode:MPC In The Head Special
- 2)入门论文:2016年 ZKBoo: Faster Zero-Knowledge for Boolean Circuits
- 3)安全分析:2021年论文 Formal security analysis of MPC-in-the-head zero-knowledge protocols:开源代码见:https://github.com/Nsidorenco/Decomposition-zk。形式化安全分析,采用eC语言。
参考资料
[1] twitter ZK方案之Bulletproofs、Halo2小结
[2] twitter MPC-in-the-head proofs
Bulletproofs、Sigma protocol、Halo2等ZK方案小结相关推荐
- 基于Sigma protocol实现的零知识证明protocol集锦
1. 背景知识 Sigma protocols,又称为 3 phase protocols,用于证明knowledge of values in some relation,但是又不泄露values的 ...
- vue头像加白边_Vue头像处理方案小结
个人思路 获取后台返回头像url,判断图片宽度,高度. 如果宽度>高度, 使其高度填充盒子 两边留白. 如果宽度 效果图: 缺陷:懒加载图片 会出现闪烁 代码实现 // 外面要给一个div并且限 ...
- 跨域post请求实现方案小结--转
[名词解释] 跨域:https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript 同源策略 ...
- rem适配的浏览器_移动端网页布局适配rem方案小结
前言 根据 W3C 规范中对 1rem 的定义: 1rem 与等于根元素 font-size 的计算值.当明确规定根元素的 font-size 时,rem 单位以该属性的初始值作参照. 这就意味着 1 ...
- 【Android工具】安卓TV云存储观影工具测试正常,安卓电视看电影方案小结
微信关注公众号 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 前几天分享过群晖的安卓客户端:[Android工具]群晖安卓客户端基础套件:Dr ...
- 4k裸眼3d视频传输方案小结
方案概述: 4k分辨率概念:http://www.expreview.com/32100.html 本文项目主要实施的分辨率为3840*2160: hdmi版本与所传输分辨率帧率的限制: 由于其他限制 ...
- react骨架屏自动生成_前端骨架屏方案小结
骨架屏 最近在项目不时有用到骨架屏的需求,所以抽时间对骨架屏的方案作了一下调研,骨架屏的实践已经有很多了,也有很多人对自己的方案作了介绍.在这里按照个人的理解做了一个汇总和分类,分享给大家. 关于骨架 ...
- MySQL数据库备份和恢复方案小结
这两天在调研MySQL数据库的备份和恢复方案,备份对象是对大量Innodb表,或者加上少量的MyISAM表. InnoDB备份常见问题: 文件一致性:数据文件.缓存.日志文件必须保持严格一致.加锁的方 ...
- web在线显示ppt方案小结
1.把 ppt 转化为flash,,然后使用embed标签加载到网页中 ①本人使用Print2Flash软件转化为swf格式,软件里可以设置显示的效果 ②使用Flex和PDF2SWF两者配合使用,实现 ...
- /var/log/pacct、/var/spool/mail/root日志文件过大,处理方案小结
/var/log/pacct文件如何产生: 在Linux系统中启动进程统计使用accton命令,必须用root身份来运行.Accton命令的形式accton file,file必须先存在.先使用tou ...
最新文章
- python中的下划线_Python中的下划线详解
- Keil中调试时Watch窗口变量不实时显示
- golang内置函数
- Java:异常处理的一些注意事项
- 修改TFS与本地源代码映射路径
- python template_python的Template使用指南
- 最小化安装CentOS 7后,图形界面的安装(GNOME、KDE等)
- artsy 爬虫_让我们得到Artsy! 使用神经网络创建自定义Snapchat过滤器!
- 京东支付SDK重构设计与实现
- 四、博客详情页完成《iVX低代码仿CSDN个人博客制作》
- 如何使用xshell4连接自己搭建的服务器
- 【转载】SCI论文配图配色方案参考网站
- 交通灯控制系统C语言代码,《C语言代码-交通灯控制器》.doc
- 远程连接android手机(调试)
- python获取excel数据制作有文字和图表的报告_如何用Python绘制学术报告图表?
- 利用西瓜播放器(xgplayer)实现直播点播
- 软考和PMP哪个更好考?
- idea回退操作reset、revert
- pyDes 库 DES 与 3DES 加解密
- python中while True用法