gsnark中的证明方案及曲线
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gsnark中的证明方案及曲线相关的知识,希望对你有一定的参考价值。
1. 引言
gsnark由ConsenSys团队开发及维护。
开源代码见:
gsnark当前支持2种证明方案:
这2种证明方案可基于以下6种曲线实现,通过ID来选择:
-
BN254(已用于Ethereum 1.x,以太坊将其预编译为altbn128)
-
BLS12-381(已用于Ethereum 2.0、ZCash Sapling、Algorand、Dfinity、Chia、Filecoin)
-
BLS12-377(BLS12-377/BW6-761,已用于Celo、Aleo、EY)
-
BLS24-315
-
BW6-633
-
BW6-761
gnark-crypto对这些曲线做了对比和bench:
2. Groth16 VS PlonK
Groth16 | PlonK | |
---|---|---|
trusted[^1] setup | circuit-specific | universal ⋆ ⋆ \\star\\star ⋆⋆ |
proof length | ⋆ ⋆ ⋆ \\star\\star\\star ⋆⋆⋆ | ⋆ \\star ⋆ |
prover work | ⋆ ⋆ \\star\\star ⋆⋆ | ⋆ \\star ⋆ |
verifier work | ⋆ ⋆ \\star\\star ⋆⋆ | ⋆ \\star ⋆ |
当需要为同一电路(如某单一逻辑计算)生成很多证明 且 关注高性能 时,Groth16是最佳选择;当需要处理不同的电路(如不同的任意的业务逻辑) 且 要有相对快的性能 时,PlonK为最佳选择。
2.1 Groth16
Groth16为circuit-specific preprocessing general-purpose zk-SNARK construction。Groth16具有:
- constant size proof
- appealing verifier time
已成为事实上的标准广泛用于多个区块链项目。
Groth16的缺陷在于:
- 其需要a circuit-specific trusted setup for its preprocessing phase。
推荐看:
使用Groth16的项目有:
- ZCash
- Loopring
- Hermez
- Celo
- Filecoin
3. PlonK
PlonK为universal preprocessing general-purpose zk-SNARK construction。
PlonK证明方案具有:
- 可更新的 preprocessing phase
- short and constant verification time
PlonK相比于Groth16的缺陷在于:
- 生成proof更大且更慢
推荐看:
使用PlonK的项目有:
- Aztec
- ZKSync
- Dusk
根据PlonK所选择的多项式承诺方案的不同,可将PlonK分为:
- 1)基于KZG多项式承诺的PlonK【当前gsnark支持 基于KZG的PlonK】
- 2)基于Pedersen-Bulletproofs多项式承诺的PlonK
- 3)基于FRI多项式承诺的PlonK
- 4)基于DARK多项式承诺的PlonK
也可根据Prover和Verifier之间的权衡来划分为:
- “fast-prover-but-slow-verifier” PlonK
- “slow-prover-but-fast-verifier” PlonK
还有一些不同的PlonK优化方案:
4. 椭圆曲线选型
Groth16和PlonK(基于KZG方案)都需要基于某椭圆曲线实例化。
gsnark支持6种椭圆曲线:
- BN254(已用于Ethereum 1.x)
- BLS12-381(已用于Ethereum 2.0、ZCash Sapling、Algorand、Dfinity、Chia、Filecoin)
- BLS12-377(BLS12-377/BW6-761,已用于Celo、Aleo、EY)
- BLS24-315
- BW6-633
- BW6-761
这些曲线都基于某有限域
F
p
\\mathbbF_p
Fp定义,具有的方程式形式为:
y
2
=
x
b
3
y^2=x^3_b
y2=xb3,其中
b
∈
F
p
b\\in\\mathbbF_p
b∈Fp。
Groth16和PlonK(基于KZG方案)要求这些曲线需具有:
- 为满足proof soundness,需具有安全性
- 为满足proof verification,需为pairing-friendly
- 为高效生成proof,需具有a highly 2-adic subgroup order
4.1 BN254和BLS12-381曲线
对于Ethereum 1.x主网应用,其仅支持BN254曲线。其它曲线的EIP有,但当前未集成:
- EIP-2539: BLS12-377 curve operations
- EIP-2537: Precompile for BLS12-381 curve operations
- EIP-3026: BW6-761 curve operations
对于Ethereum 2.0应用,其使用的是BLS12-381曲线。
对于平台无关的应用程序,需在性能(BN254)和 安全性(BLS12-381)之间进行权衡。推荐使用BLS12-381,因其更安全,尽管慢于BN254但实际上仍足够快。
4.2 BLS12-377和BW6-761曲线
对于需要one-layer proof composition(a proof of proofs)的应用来说,不可使用BN254或BLS12-381,因其在该应用场景下效率太低。
使用one-layer proof composition的应用有:
- ZEXE
- Celo
- Aelo
- Zecale
事实上,这样的应用要求椭圆曲线对 ( E 1 , E 2 ) (E_1,E_2) (E1,E2):
- 为满足proof soundness,需是安全的
- 为满足proof verification,需是pairing-friendly的
- 为高效生成proof,需具有a highly 2-adic subgroup order【由于 E 1 E_1 E1也必须有 a highly 2-adic field characteristic,因此不能将BLS12-381曲线不可用作 E 1 E_1 E1。】
- 为高效实现proof composition, E 2 E_2 E2具有a subgroup order equal to E 1 E_1 E1’s field characteristic。
BLS12-377和BW6-761曲线可满足以上条件,且具有快速实现。
4.3 BLS24-315和BW6-633曲线
Groth16中,椭圆曲线操作发生在3个不同的群中:
- G 1 G_1 G1
- G 2 G_2 G2
- G T G_T GT
而PlonK(with KZG)操作仅发生在 G 1 G_1 G1 和 G T G_T GT中。
BN254\\BLS12-381\\BLS12-377曲线对这3个群都进行了优化,而BLS24-315仅对 G 1 G_1 G1具有更好的优化 且 对 G T G_T GT的优化仍具有竞争优势。此外,BLS24-315与BW6-633结合可enable PlonK one-layer proof composition efficiently。
总之,(BLS24-315, BW6-633)曲线对为:
- 为满足proof soundness,是安全的
- 为满足proof verification,是pairing-friendly的
- 针对KZG-based SNARKs进行了优化(如,PlonK)
- 为高效生成proof,具有highly 2-adic subgroup order
- 为高效实现proof compostion,BW6-633具有a subgroup order等于BLS24-315的field characteristic。
参考资料
以上是关于gsnark中的证明方案及曲线的主要内容,如果未能解决你的问题,请参考以下文章