___  ___    _ _    _  _ _____   _____
 / __|/ _ \  | | |  | || |_ _\ \ / / __|
| (_ | (_) | |_  _| | __ || | \ V /| _|
 \___|\___/    |_|  |_||_|___| \_/ |___|

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

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

BY: @victorsun | CREATED: May 9, 2018, 8:07 a.m. | VOTES: 5 | PAYOUT: $0.00 | [ VOTE ]

我将用中文来解释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. 解承诺阶段(公布遗嘱阶段):在此阶段,公布承诺阶段发送者发送的消息真正包含的明文信息。(康熙爷驾崩之后,公布那块大匾后面的遗诏。)
这其中可能会有部分安全问题需要考虑:
1. 对于发送方Alice来说,她不希望这条消息中的明文信息提早暴露,必须到解承诺阶段,才能解开;
2. 对于接收方Bob来说,他希望在解承诺阶段获得的信息确实是承诺阶段作出的,而不是被替换了的,亦即不希望解承诺阶段获得的信息是被替换了的。

这里不给出承诺的形式化定义了,有兴趣的朋友可以去查阅相关的学术文献。以下给出一个简单的,可能不太严谨的承诺方案,如图:
[IMAGE: https://steemitimages.com/DQmdTFKq8CSfsZrDyAVWrcoQM7E8spT1hvhkFoLgLuNKnUL/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的知识。

TAGS: [ #zcash ] [ #cryptocurrency ] [ #technology ] [ #crypto ]

Replies

@steemitboard | May 9, 2018, 4:27 p.m. | Votes: 2 | [ VOTE ]

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

[IMAGE: https://steemitimages.com/70x80/http://steemitboard.com/notifications/firstpost.png] 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!

@selma-zbx | May 15, 2018, 9:32 a.m. | Votes: 0 | [ VOTE ]

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

@selma-zbx | May 15, 2018, 9:33 a.m. | Votes: 0 | [ VOTE ]

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

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>