37

零知识证明 - 再谈EYBlockchain

 4 years ago
source link: https://www.tuicool.com/articles/3qURJb2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

上次我写了一篇 EYBlockchain 在以太坊上创建隐私币 ,

最近有点时间,重新看了看EYBlockchain的源代码,对EYBlockchain的理解又深入了不少。画了一些图,分享给有需要的小伙伴 :)

整个EYBlockchain是基于Ethereum的Web3接口之上搭建,主要由五个模块组成:accounts(账户管理),database(数据存储),whisper(节点间消息交互),PKD(存储public key),zkp(零知识证明处理)。zkp是EYBlockchain核心逻辑,提供了以太坊上智能合约的实现,几种操作的电路描述,以及使用ZoKrates实现零知识证明。在这些模块之上,提供了统一的API-Gateway。UI调用API-Gateway完成相关功能。

架构图

MB7NvaZ.jpg!web

账号

从用户的角度(UI)来看,EYBlockchain只需要用户名和密码。EYBlockchain内部会根据用户密码生成以太坊公钥和私钥以及whisper的公钥和私钥。

VfimQ3v.jpg!web

合约

EYBlockchain在以太坊上需要部署7个智能合约。PKD实现公钥的查询,GM17实现零知识证明的验证。FToken是ERC20智能合约(也就是OPS代币合约),FTokenShield是ERC20对应的隐私交易合约。NFToken是ERC721智能合约,NFTokenShield是ERC721对应的隐私交易合约。Verifier Registry智能合约实现零知识证明验证密钥的注册。

zYbMbeI.jpg!web

EYBlockchain采用UTXO模型。在FTokenShield智能合约中,生成一个UTXO称为commitment,消耗一个UTXO称为nullifier。在FTokenShield合约中,主要维护了两个数据结构:

  1. 所有commitment组成的merkle树(commitment作为树的叶子节点)
  2. 所有nullifier数组。

ZBvmAji.jpg!web

以下是ERC20代币的三种操作:Mint(从普通的ERC20代币生成隐私的代币),Transfer(隐私代币转账),Burn(从隐私代币转回为普通ERC20代币)。每一种操作都会通过零知识证明生成相应电路的证明。

3eMrQzv.jpg!weby6zq6ri.jpg!web

以Transfer为例,相应的证明电路需要证明如下一系列的等式成立。

Vviaum6.jpg!web

3A3yiyF.jpg!web

理解zk-SNARK,需要了解一些术语:Circuit(电路),R1CS,QAP,Groth16。一个计算可以由一系列的“乘法门”和”加法门“组成,称之为”电路“。每个门电路可以通过向量点乘的方式生成R1CS。R1CS通过一定的转换可以生成QAP问题。一旦有了QAP问题的描述,Groth16能生成相应的证明。对这些术语还不太了解的小伙伴,可以查看之前的文章深入了解零知识证明算法。Groth16是Groth在16年提出的算法,GM17是Groth在17年提出的增强算法。

nUJVrim.jpg!web

EYBlockchain使用ZoKrates的工具生成零知识证明。ZoKrates集成了libsnark和bellman代码库,实现电路的生成和Groth16的生成。使用ZoKrates需要提供相应的电路的描述(DSL语言)。提供了电路,就能使用ZoKrates设计的5个接口生成证明和验证。EYBlockchain使用了BN128椭圆曲线以及GM17零知识证明算法。

uMNjeur.jpg!web

EYBlockchain实现了基于以太坊的隐私交易,但目前还有一些值得探讨的点:

  1. zk-SNARK需要预先生成CRS,也就是可信的预先设置。

  2. Whisper目前不支持持久化消息存储,可能需要Whisper的MailServer功能来解决。

  3. EYBlockchain使用的Hash算法是sha256算法,但是裁剪为216位。

  4. EYBlockchain生成一个交易在一般的机器上需要10分钟左右。Gas的消耗大约为650w。可能用Zcash使用的BLS12_381椭圆曲线能提升性能。

RZ32Yfq.jpg!web

总结:

EYBlockchain在ZoKrates零知识证明的基础上,实现了以太坊上隐私交易的能力。EYBlockchain在以太坊上发行两种代币:EYT(ERC721)和OPS(ERC20),并针对这两种代币提供隐私交易的能力。EYBlockchain存在一些需要进一步考虑的问题:可信设置,Whisper消息的持久化,性能较低等等。

本文作者 Star Li,他的公众号 星想法 有很多原创高质量文章,欢迎大家扫码关注。

uY3IFbN.jpg!web

深入浅出区块链 - 打造高质量区块链技术博客,学区块链都来这里,关注 知乎 、微博 掌握区块链技术动态。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK