54

零知识证明 - 再谈EYBlockchain | 深入浅出区块链 | 技术博客

 4 years ago
source link: https://learnblockchain.cn/2019/07/08/EYBlockchain2/?
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的理解又深入了不少。画了一些图,分享给有需要的小伙伴 :)

上次我写了一篇 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 年提出的增强算法。

60

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 椭圆曲线能提升性能。
50

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

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

公众号-星想法

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

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK