Zcash协议分析(1). 如何证明你的所有权
我将用中文来解释Zcash这种神秘的cryptocurrency。接下来的几篇文章来连载。
在这一篇我们首先来了解下ZEC是如何来表示所有权的。为了便于描述,文中所提到的ZEC代币可能不是最终意义上的ZEC。
首先我们来回顾比特币系统中交易的基本模型。
在BTC系统里要发起一笔转账,实际上是从一笔UTXO到另外一笔UTXO的过程。UTXO有两个最基本最主要的属性,第一是这笔UTXO的数量值,第二是这笔UTXO的所有者。这个属性值是一段公钥地址。
一笔转账交易,例如:从属于Alice的UTXO_1变成Bob的UTXO_2是需要经历如下步骤:
- 向全网所有的验证节点发送一个证明,证明我是UTXO1的拥有者;
- (若第1步是被验证通过)向全网再发送一条消息,告诉所有的验证节点,现在这笔UTXO已经属于Bob了。
实际上这两个消息是一同发出去的。
我们可以将这笔转账交易与银行的转账交易进行对比:
- Alice向银行证明她是Alice;
- 银行从Alice的账户上扣除请求的数额,在Bob的账户上添加相应的数额;
从上面可以看到,无论是去中心化还是中心化的支付系统,都需要一个证明所有权的机制。在中心化的系统中,运用传统的口令就可以了,在BTC这样的去中心化系统中,常用到数字签名。但是这其中会有个问题,去中心化系统中一定需要用到数字签名么?或者说数字签名是不是太强了,可不可以在弱化一下。
答案是肯定的。实际上,BTC中运用数字签名是为了证明用户拥有某一条信息——私钥,这个私钥是与UTXO中的公钥地址对应的,这个私钥的拥有者用户对这笔UTXO具有所有权。但是密码学中有很多种其他的方法来证明用户拥有一条信息,例如消息验证码(Message Authentication Codes)和Zcash中运用的承诺方案(Commitment scheme)。
这里,我们只介绍承诺方案。承诺是理论密码学的基本模块之一,可用来构建密码学算法和协议方案。承诺可以简单地看成遗嘱,它分为两个阶段:
- 承诺阶段(立遗嘱阶段):在此阶段,发送者把一条消息先发送出去,但是又不希望接收者立马得到这条消息的明文信息,直到承诺阶段结束。(想象康熙爷当年立太子的遗诏,如果立马公布,那岂不是要天下大乱?)
- 解承诺阶段(公布遗嘱阶段):在此阶段,公布承诺阶段发送者发送的消息真正包含的明文信息。(康熙爷驾崩之后,公布那块大匾后面的遗诏。)
这其中可能会有部分安全问题需要考虑: - 对于发送方Alice来说,她不希望这条消息中的明文信息提早暴露,必须到解承诺阶段,才能解开;
- 对于接收方Bob来说,他希望在解承诺阶段获得的信息确实是承诺阶段作出的,而不是被替换了的,亦即不希望解承诺阶段获得的信息是被替换了的。
这里不给出承诺的形式化定义了,有兴趣的朋友可以去查阅相关的学术文献。以下给出一个简单的,可能不太严谨的承诺方案,如图:
说了这么多,那么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条信息:
- 某一枚币的序列号sn;
- 他知道这个sn所对应的陷门r的零知识证明pi(其实是zk-SNARK,这个我们将在下一篇中详细介绍,这里只需要了解,这个证明pi不会暴露r的任何信息即可)
想象下,所有的记账人知道如上2条信息,可以证明cm确实是用户u铸造的,这样就证明了所有权。
总之,这里对于ZEC的所有权的确定是通过检验用户是否拥有对应的r的知识。
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
果然,电脑上密码给忘了,好在手机账号一直记住了
果然,电脑上密码给忘了,好在手机账号一直记住了