Zcash协议分析(1). 如何证明你的所有权

in zcash •  7 years ago 

我将用中文来解释Zcash这种神秘的cryptocurrency。接下来的几篇文章来连载。

在这一篇我们首先来了解下ZEC是如何来表示所有权的。为了便于描述,文中所提到的ZEC代币可能不是最终意义上的ZEC。

首先我们来回顾比特币系统中交易的基本模型。

在BTC系统里要发起一笔转账,实际上是从一笔UTXO到另外一笔UTXO的过程。UTXO有两个最基本最主要的属性,第一是这笔UTXO的数量值,第二是这笔UTXO的所有者。这个属性值是一段公钥地址。

一笔转账交易,例如:从属于Alice的UTXO_1变成Bob的UTXO_2是需要经历如下步骤:

  1. 向全网所有的验证节点发送一个证明,证明我是UTXO1的拥有者;
  2. (若第1步是被验证通过)向全网再发送一条消息,告诉所有的验证节点,现在这笔UTXO已经属于Bob了。
    实际上这两个消息是一同发出去的。

我们可以将这笔转账交易与银行的转账交易进行对比:

  1. Alice向银行证明她是Alice;
  2. 银行从Alice的账户上扣除请求的数额,在Bob的账户上添加相应的数额;

从上面可以看到,无论是去中心化还是中心化的支付系统,都需要一个证明所有权的机制。在中心化的系统中,运用传统的口令就可以了,在BTC这样的去中心化系统中,常用到数字签名。但是这其中会有个问题,去中心化系统中一定需要用到数字签名么?或者说数字签名是不是太强了,可不可以在弱化一下。

答案是肯定的。实际上,BTC中运用数字签名是为了证明用户拥有某一条信息——私钥,这个私钥是与UTXO中的公钥地址对应的,这个私钥的拥有者用户对这笔UTXO具有所有权。但是密码学中有很多种其他的方法来证明用户拥有一条信息,例如消息验证码(Message Authentication Codes)和Zcash中运用的承诺方案(Commitment scheme)。

这里,我们只介绍承诺方案。承诺是理论密码学的基本模块之一,可用来构建密码学算法和协议方案。承诺可以简单地看成遗嘱,它分为两个阶段:

  1. 承诺阶段(立遗嘱阶段):在此阶段,发送者把一条消息先发送出去,但是又不希望接收者立马得到这条消息的明文信息,直到承诺阶段结束。(想象康熙爷当年立太子的遗诏,如果立马公布,那岂不是要天下大乱?)
  2. 解承诺阶段(公布遗嘱阶段):在此阶段,公布承诺阶段发送者发送的消息真正包含的明文信息。(康熙爷驾崩之后,公布那块大匾后面的遗诏。)
    这其中可能会有部分安全问题需要考虑:
  3. 对于发送方Alice来说,她不希望这条消息中的明文信息提早暴露,必须到解承诺阶段,才能解开;
  4. 对于接收方Bob来说,他希望在解承诺阶段获得的信息确实是承诺阶段作出的,而不是被替换了的,亦即不希望解承诺阶段获得的信息是被替换了的。

这里不给出承诺的形式化定义了,有兴趣的朋友可以去查阅相关的学术文献。以下给出一个简单的,可能不太严谨的承诺方案,如图:
WechatIMG24.png

说了这么多,那么Zcash中到底是如何运用承诺方案来证明对于Zcash的所有权的呢?

实际上,在BTC的每个区块中都有一笔coinbase交易,它是所有BTC的唯一来源,也可称为铸币交易。Zcash也是有这样的铸币交易tx_mint的概念的,该交易是将一个承诺值cm写入其中,并公布在区块链上。假设在这一步不考虑币的面值,每个铸币交易都只产生1个ZEC,1是ZEC的最小面值,这样一枚ZEC就产生了。其中
cm := COMM_r(sn)

sn:表示这枚ZEC的序列号,它是随机选择的;
r:表示随机数,也是一个陷门。铸币的节点记住r,并保密r,它是表示对着一枚ZEC的拥有权;
cm:表示这枚ZEC的承诺值,需要写入区块链。

c:=(r, sn, cm)表示一枚ZEC的全部信息,只有cm会被写入到区块链中。

用户u如何来花掉这枚ZEC呢?(其实是如何证明他拥有一枚ZEC)
用户u发起一笔交易tx_spent,该交易中包含如下2条信息:

  1. 某一枚币的序列号sn;
  2. 他知道这个sn所对应的陷门r的零知识证明pi(其实是zk-SNARK,这个我们将在下一篇中详细介绍,这里只需要了解,这个证明pi不会暴露r的任何信息即可)

想象下,所有的记账人知道如上2条信息,可以证明cm确实是用户u铸造的,这样就证明了所有权。

总之,这里对于ZEC的所有权的确定是通过检验用户是否拥有对应的r的知识。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @victorsun! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You published your First Post

Click on any badge to view your own Board of Honor on SteemitBoard.

To support your work, I also upvoted your post!
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!

果然,电脑上密码给忘了,好在手机账号一直记住了

果然,电脑上密码给忘了,好在手机账号一直记住了