1. 引言
Jellyfish为Espresso团队开源的密码学库,采用MIT license。
开源代码见:
Jellyfish是一个密码学工具套件,实现了多种密码学原语,如:
根据性能测试,Jellyfish中所实现的PLONK证明系统,是目前已开源的PLONK实现中性能最完备、速度最快的。
目前Jellyfish已用于:
- Espresso的扩容和隐私链的基础设施
- Configurable Asset Privacy for Ethereum(CAPE)
2. Jellyfish库成员
Jellyfish库中实现了一些关键的密码学原语,如:
- 1)PLONK:zk-SNARK with universal setup
- 2)基于Rescue的哈希函数、伪随机函数(PRF)和承诺,为ZKP的理想arithmetization-frienldly cipher。
- 3)Merkle tree accumulators。
- 4)Schnorr签名
- 5)ElGamal公钥加密
- 6)AEAD对称认证加密
3. Jellyfish中的PLONK
Jellyfish中实现了Gabizon等人2019年论文PLONK。尽管PLONK仍需trusted setup,但其使用了universal and updatable trusted setup procedure:
- “universal”是指:对所有程序,仅需要一次trusted setup。而不需要为每个程序做一次trusted setup。
- “updatable”是指:其trusted setup可由新参与方持续进行更新——只要有一个参与者是honest的,则整个证明系统都是安全的。
Jellyfish在实现PLONK过程中,做了多处关键优化:
- 1)采用高效的Rescue hash circuit:单个3-to-1 hash gadget(over BLS12-381 scalar field),需148个PLONK约束。
- 2)实现了Plookup:支持高效的lookup gates和range-check gates。
- 3)优化了PLONK verifier circuit:
- 3.1)(验证单个PLONK proof)的PLONK verifier gadget仅需约22000个PLONK约束。
- 4)实现了高效的椭圆曲线运算circuit:
- 4.1)如,椭圆曲线addition/doubling circuit仅需2个PLONK约束。
- 4.2)如,具有128个base points和256-bit scalars的variable-base multi-scalar multiplication gadget仅需约36000个PLONK约束,相比于naive circuit size,要小8倍之多。
- 5)实现了高效的modular multiplication circuit(即,约束
a
+
b
=
c
m
o
d
N
a+b=c\mod N
a+b=cmodN 或
a
∗
b
=
c
m
o
d
N
a*b=c\mod N
a∗b=cmodN,其中
N
N
N为不同于circuit field size的参数值):
- 5.1)对于384-bit cricuit field,modular multiplication gadget with 256-bit modulus仅需约20个PLONK约束。
- 6)实现了多种密码学原语circuit,如:Merkle tree circuit、Schnorr签名circuit、ElGamal加密circuit、PRF circuit、承诺circuit等。
同时,在Jellyfish的PLONK证明系统中:
- 1)集成了Plookup arguments。
- 2)支持batch prove,即,可为多个SNARK instances生成单个(更大的)PLONK proof。
- 3)支持PLONK proving/verification key merging和circuit merging:
- 可将SNARK instance
A
A
A的proving key/verification key/circuit 与 SNARK
B
B
B的进行合并,获得instance
A
∧
B
A\wedge B
A∧B(即A与B结合)的proving key/verification key/circuit。
Jellyfish PLONK为通用实现,支持不同的prime fields和椭圆曲线。
参考资料
[1] Releasing the Jellyfish cryptography library
[2] Introducing Espresso Systems
附录A. Espresso Sytems简介
Espresso Sytems当前:
- 1)正在开发Espresso链:为Layer 1链,采用PoS共识,以及ZK-Rollup机制来实现高吞吐量和低手续费。
- 2)开发了Configurable Asset Privacy for Ethereum(CAPE):可运行在任何EVM链上的应用,最终也将原生运行在Espresso链。CAPE可为用户提供自定义隐私保护。
附录A.1 去中心化ZK-Rollups
Espresso扩容方案中,将EVM的ZK-Rollup 与 去中心化PoS(Proof-of-Stake)共识协议做了结合。
ZK-Rollup作为扩容技术,通常作为现有共识协议的Layer 2。某server将大量交易聚合为一个汇总交易,然后生成一个简洁零知识证明来证明这些交易的有效性,后续该证明将发送到共识系统。rollup proof会同时压缩共识协议验证交易所需的信息量和计算量,从而提升吞吐量。当前以太坊开发中的多个rollup解决方案,其设计空间都有一个警告:数据可用性问题。用户需要数据来构建新的交易。而零知识证明在传达交易有效性的同时,并不会泄露其原始数据内容,从而无法提供构建未来交易所需的可用数据。为解决该问题,现有rollups:
- 要么 在汇总交易中包含原始交易数据 一起发送到共识系统,
- 要么 使用中心化数据可用性委员会来签署其所看到的数据。
这2个方案都不够理想:第一个方案压缩量有限,从而限制了扩容上限;第二个方案破坏了去中心化。
理想的方案应为:保证去中心化数据可用性的同时,使吞吐量尽可能大。Espresso Systems,正在开发相应的解决方案:
- 将PoS共识协议与ZK-Rollup扩容机制结合。
即Espresso ZK-Rollup与共识原生集成,无需将其看成是黑盒,从而可避免将rollup看成是独立于底层共识协议的独立模块。
附录A.2 Configurable Asset Privacy on Ethereum
CAPE (Configurable Asset Privacy for Ethereum) 为Espresso Systems开发的智能合约应用,是支持数字资产创建者配置谁能看到其mint token的活动信息。
CAPE上的数字资产,可为稳定币或NFT,可自定义balance透明度,为用户可自定义隐私属性的Web3产品。对于正常viewers来说,CAPE交易是你们的,看起来与普通交易一样不可区分,可隐藏所交易资产的类型。资产的creator可配置a viewing poly,从而确保选中的人可解密相关资产的指定交易。
CAPE可用于创建新资产,或wrap以太坊上现有资产,为其提供隐私属性。用CAPE来wrap某ERC-20需要指定wrapper type,即配置谁能看到什么,以及谁能维护该资产的特定控制。Wrapping可锁定ERC-20合约的资产,并创建相应指定类型的CAPE资产,而unwrapping会burn CAPE资产并解锁相应的ERC-20合约资产。
任何人都可使用CAPE来创建或wrap资产,该协议也支持stablecoin providers的诉求。stablecoin providers通常希望有途径来解决欺诈、盗窃和争议,以维护对资产账本活动的洞察力以及类似冻结的控制力。在CAPE之前,没有相应的解决方案——为资产创建者提供隐私视角的同时满足可见性和争议处理能力。借助CAPE的viewing policy和freezing policy,这些皆可实现,同时相应的用户也可控制其数据和交易的可见性。
CAPE开源代码见:
CAPE可运行在任意EVM链上。将部署在以太坊Rinkeby测试网,未来将迁移到Espresso,并通过一个token bridge与以太坊资产进行交互。