零知识证明 – 再谈EYBlockchain

上次我写了一篇 EYBlockchain 在以太坊上创建隐私币, 最近有点时间,重新看了看EYBlockchain的源代码,对EYBlockchain的理解又深入了不少。画了一些图,分享给有需要的小伙伴 🙂

上次我写了一篇[ EYBlockchain 在以太坊上创建隐私币](https://learnblockchain.cn/2019/06/13/EYBlockchain/), 最近有点时间,重新看了看 EYBlockchain 的源代码,对 EYBlockchain 的理解又深入了不少。画了一些图,分享给有需要的小伙伴 🙂 整个 EYBlockchain 是基于 Ethereum 的 Web3 接口之上搭建,主要由五个模块组成:accounts(账户管理),database(数据存储),whisper(节点间消息交互),PKD(存储 public key),zkp(零知识证明处理)。zkp 是 EYBlockchain 核心逻辑,提供了[以太坊上智能合约](https://learnblockchain.cn/2018/01/04/understanding-smart-contracts/)的实现,几种操作的电路描述,以及使用 ZoKrates 实现零知识证明。在这些模块之上,提供了统一的 API-Gateway。UI 调用 API-Gateway 完成相关功能。 ## 架构图 ![架构图](https://img.learnblockchain.cn/2019/07/09_351547453.webp!/scale/50) ## 账号 从用户的角度(UI)来看,EYBlockchain 只需要用户名和密码。EYBlockchain 内部会根据用户密码生成以太坊公钥和私钥以及 whisper 的公钥和私钥。 ![账号体系](https://img.learnblockchain.cn/2019/07/09_933940070.webp!/scale/60) ## 合约 EYBlockchain 在以太坊上需要部署 7 个智能合约。PKD 实现公钥的查询,GM17 实现零知识证明的验证。FToken 是 ERC20 智能合约(也就是 OPS 代币合约),FTokenShield 是 ERC20 对应的隐私交易合约。NFToken 是 ERC721 智能合约,NFTokenShield 是 ERC721 对应的隐私交易合约。Verifier Registry 智能合约实现零知识证明验证密钥的注册。 ![合约](https://img.learnblockchain.cn/2019/07/09_416250984.webp!/scale/60) EYBlockchain 采用 UTXO 模型。在 FTokenShield 智能合约中,生成一个 UTXO 称为 commitment,消耗一个 UTXO 称为 nullifier。在 FTokenShield 合约中,主要维护了两个数据结构: 1. 所有 commitment 组成的 merkle 树(commitment 作为树的叶子节点) 2. 所有 nullifier 数组。 ![ERC20 Shield ](https://img.learnblockchain.cn/2019/07/09_626635509.webp!/scale/60) 以下是 ERC20 代币的三种操作:Mint(从普通的 ERC20 代币生成隐私的代币),Transfer(隐私代币转账),Burn(从隐私代币转回为普通 ERC20 代币)。每一种操作都会通过零知识证明生成相应电路的证明。 ![Mint](https://img.learnblockchain.cn/2019/07/09_488375166.webp!/scale/60) ![Transfer](https://img.learnblockchain.cn/2019/07/09_662360197.webp!/scale/60) 以 Transfer 为例,相应的证明电路需要证明如下一系列的等式成立。 ![Transfer-zk_SNARK](https://img.learnblockchain.cn/2019/07/09_608303935.webp!/scale/70) ![Token Burn](https://img.learnblockchain.cn/2019/07/09_88390361.webp!/scale/60) 理解 zk-SNARK,需要了解一些术语:Circuit(电路),R1CS,QAP,Groth16。一个计算可以由一系列的“乘法门”和”加法门“组成,称之为”电路“。每个门电路可以通过向量点乘的方式生成 R1CS。R1CS 通过一定的转换可以生成 QAP 问题。一旦有了[QAP问题](https://learnblockchain.cn/2019/05/07/qsp-qap/)的描述,Groth16 能生成相应的证明。对这些术语还不太了解的小伙伴,可以查看之前的文章深入了解零知识证明算法。[Groth16](https://learnblockchain.cn/2019/05/27/groth16/)是 Groth 在 16 年提出的算法,GM17 是 Groth 在 17 年提出的增强算法。 ![](https://img.learnblockchain.cn/2019/07/09_186067194.webp!/scale/60) EYBlockchain 使用 ZoKrates 的工具生成零知识证明。ZoKrates 集成了 libsnark 和 bellman 代码库,实现电路的生成和 Groth16 的生成。使用 ZoKrates 需要提供相应的电路的描述(DSL 语言)。提供了电路,就能使用 ZoKrates 设计的 5 个接口生成证明和验证。EYBlockchain 使用了 BN128 椭圆曲线以及 GM17 零知识证明算法。 ![ZoKrates](https://img.learnblockchain.cn/2019/07/09_51035365.webp!/scale/60) EYBlockchain 实现了基于以太坊的隐私交易,但目前还有一些值得探讨的点: 1. zk-SNARK 需要预先生成 CRS,也就是可信的预先设置。 2. Whisper 目前不支持持久化消息存储,可能需要 Whisper 的 MailServer 功能来解决。 3. EYBlockchain 使用的 Hash 算法是 sha256 算法,但是裁剪为 216 位。 4. EYBlockchain 生成一个交易在一般的机器上需要 10 分钟左右。Gas 的消耗大约为 650w。可能用 Zcash 使用的 BLS12_381 椭圆曲线能提升性能。 ![](https://img.learnblockchain.cn/2019/07/09_957694073.webp!/scale/50) 总结: EYBlockchain 在 ZoKrates 零知识证明的基础上,实现了以太坊上隐私交易的能力。EYBlockchain 在以太坊上发行两种代币:EYT(ERC721)和 OPS(ERC20),并针对这两种代币提供隐私交易的能力。EYBlockchain 存在一些需要进一步考虑的问题:可信设置,Whisper 消息的持久化,性能较低等等。 本文作者 Star Li,他的公众号**星想法**有很多原创高质量文章,欢迎大家扫码关注。 ![公众号-星想法](https://img.learnblockchain.cn/2019/15572190575887.jpg!/scale/20) [深入浅出区块链](https://learnblockchain.cn/) - 打造高质量区块链技术博客,学区块链都来这里,关注[知乎](https://www.zhihu.com/people/xiong-li-bing/activities)、[微博](https://weibo.com/517623789) 掌握区块链技术动态。

上次我写了一篇 EYBlockchain 在以太坊上创建隐私币, 最近有点时间,重新看了看 EYBlockchain 的源代码,对 EYBlockchain 的理解又深入了不少。画了一些图,分享给有需要的小伙伴 🙂

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

架构图

账号

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

合约

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

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

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

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

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

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

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

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

  1. zk-SNARK 需要预先生成 CRS,也就是可信的预先设置。
  2. Whisper 目前不支持持久化消息存储,可能需要 Whisper 的 MailServer 功能来解决。
  3. EYBlockchain 使用的 Hash 算法是 sha256 算法,但是裁剪为 216 位。
  4. EYBlockchain 生成一个交易在一般的机器上需要 10 分钟左右。Gas 的消耗大约为 650w。可能用 Zcash 使用的 BLS12_381 椭圆曲线能提升性能。

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

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

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

  • 发表于 2019-07-08 15:10
  • 阅读 ( 7543 )
  • 学分 ( 20 )
  • 分类:零知识证明

评论