深刻浅出区块链——零知识证实

引子  

  隐私保护在区块链领域愈来愈受到重视,在隐私保护的种种手段中,零知识证实脱颖而出。那么零知识证实究竟是什么东西呢?算法

  首先,咱们抛出一个问题:如何在不说出秘密的状况下,让对方知道你已经知道了这个秘密?数据库

 

例子1:用户注册

  用户在系统注册时,系统不会保存用户的密码明文,而是保存了密码的哈希值;用户在登陆系统时,只须要输入注册时的密码,系统会根据用户输入密码产生的哈希值与系统数据库保存的哈希值进行比对。若是一致,则系统认为——当前登陆用户知道该帐号的密码。区块链

  这样,用户不须要告诉网站密码,就能证实本身的身份。这其实就是一种零知识证实。网站

 

例子2:在校大学生实习

  A要去公司实习,公司要求A在校全部功课没有挂科,才有资格加入公司。A虽然全部功课都没有挂科,但都在6一、62左右徘徊;A不想让公司看到本身的成绩单,因而A委托学校开了一个证实:证实A在校全部功课所有及格。并交到了公司,加入了公司。加密

  这样,A既没有暴露本身的确切考试成绩,又向公司证实本身知足要求。这其实就是零知识证实。spa

 

如何从字面解释“零知识证实”?

  零知识证实:零知识,即在证实的过程当中不透露任何内情。通俗的来说,就是既证实了本身想证实的事情,同时透露给验证者的信息为“零”。blog

 

什么是零知识证实?

  零知识证实(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它早于区块链诞生,但因为区块链,它被你们所熟知。它指的是证实者可以在不向验证者提供任何有用的信息的状况下,使验证者相信某个论断是正确的。支付宝

  零知识证实能够分为交互式非交互式两种。ci

 交互式

       零知识证实协议的基础是交互式的。它要求验证者不断对证实者所拥有的“知识”进行一系列提问。证实者经过回答一系列问题,让验证者相信证实者的确知道这些“知识”。然而,这种简单的方法并不能令人相信证实者和验证者都是真实的,二者能够提早串通,以便证实者能够在不知道答案的状况下依然经过验证。class

 非交互式

  非交互式零知识证实不须要交互过程,避免了串通的可能性,可是可能须要额外的机器和程序来肯定实验的顺序。

 

为何区块链中要用到零知识证实? 

  在如今的时代,我的的身份与不少信息进行了关联,你的手机号,身份证号,银行卡号等等都绑定在一块儿,只要知道你的手机号,就能够经过关联信息获取到你的姓名,出生年月等等信息,可所谓“牵一发而动全身”。

  在区块链的世界中,用地址来表示交易双方,这样达到了匿名的做用。然而,链上的信息虽然是匿名的,可是经过链上信息绑定的链下信息,像不少交易所都绑定了链上地址与链下的银行帐户、支付宝,使得能够很方便的追溯真实世界的交易双方,使得匿名性荡然无存。

  那么,有没有一种方法,可以在隐藏发送方、接受方以及交易金额等其余细节的状况下,保证交易有效呢

  答案就是:零知识证实

 

零知识如何保证区块链中交易的匿名性?

  经过利用零知识证实机制,能够将交易双方的地址、交易细节隐藏起来。

  目前ZCASH(大零币)使用零知识机制来证实交易有效,其零知识方法为:zk-SNARK是“zero knowledge Succinct Non-interactive ARgument of Knowledge”的缩写。ZCASH能够将交易纪录上的交易双方和金额都加密隐藏起来,所以矿工无从得知这些交易上的细节,但仍然能够验证交易。

  一、 zero knowledge:零知识,即在证实的过程当中不透露任何内情,如上文的例子所示。

  二、 succinct:简洁的,主要是指验证过程不涉及大量数据传输以及验证算法简单。

  三、 non-interactive:无交互。

  在ZCASH中,摒弃了以前的UTXO方式,而是使用了一种基于UTXO,被称为NOTE(支票)的新方式代替。NOTE表明了当前帐户对资产的支配权,与UTXO不一样,帐户余额的存储方式再也不是“未消费的交易输出”,而是“未被做废的支票(NOTE)”;一个NOTE是由全部者公钥PK、所拥有金额V、和惟一区分支票的序列号r组成,表示为NOTE=(PK, v, r)。

  ZCash交易分为两类:透明地址交易隐藏地址交易

  透明地址交易的输入、输出直接是可见的NOTE信息;隐藏地址交易,输入和/或输出的地址和金额是隐藏的。

  透明地址交易:

  

 

  隐藏地址交易:

  

 

  透明地址和隐藏地址混用:

  

 

  

   在ZCASH的隐藏地址交易中,交易的输入输出再也不是明文的NOTE,而是NOTE的签发和废弃通知

   

 

   左侧表明的是“签发的新的NOTE”,右侧表明的是“做废的NOTE”。每次进行转帐,就会把转帐方的NOTE放到做废列表里,表明此NOTE已经做废,同时为收款方建立一张等额的NOTE。这样就实现了“资产的转移”,而且因为都是记录的NOTE的哈希值,所以并不知道被废弃的和新签发的NOTE的内容,这样就作到了隐藏交易双方及交易细节。

   等等!从头到尾都没有用到零知识证实呀?矿工怎么可以确认这些匿名交易是真实有效的呢?

  其实,在矿工确认交易时,转帐方会提供一个证实P,可以证实:转帐方经过私钥SK、公钥PK、支票序列号r计算后的哈希值,与在签发列表中存在的哈希值一致,这足以证实转帐方的NOTE存在。这样既没有泄露转帐方的信息,又证实了NOTE存在(相似上文提到的用户注册的例子)。

  矿工确认NOTE存在后,就会在做废列表中查询,若是没有此笔NOTE的做废记录,则证实转帐方NOTE有效(防止双花)。而后再在做废列表中,把当前NOTE的序列号哈希计算后的值记录在做废列表中,代表此笔NOTE已经做废,同时为收款方签发新的NOTE。

 

总结

  至此,就能够在区块链中应用零知识证实来保护交易双方隐私了。目前保护交易双方隐私的机制除了零知识机制,还有环签名机制,环签名是群签名的一种,后续有机会,也会和你们聊一聊的。

  以上就是我对零知识证实的一些粗浅的了解,若是有任何错误或者遗漏,请告知我,很是感谢。

相关文章
相关标签/搜索