零知识证明 - 再谈EYBlockchain

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

上次我写了一篇 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 Shield

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

Mint Transfer

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

Transfer-zk_SNARK

Token Burn

理解 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 零知识证明算法。

ZoKrates

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
  • 阅读 ( 4864 )
  • 学分 ( 20 )
  • 分类:零知识证明

0 条评论

请先 登录 后评论
Star Li
Star Li

43 篇文章, 1302 学分