http://www.www.tnmanning.com

深入理解Zcash的零知识证明体系

2. 用ivk和epk如何去解密Cenc?


深入领略Zcash的零常识证明体系


2. 为何由sprout的joinsplit transfer 演酿成sapling的spend transfer & output transfer。

3. 吸收者吸收生意业务;
1. 生意业务者提倡生意业务; 

在这里,我们不具体先容生意业务提倡者是如何提倡一起生意业务的,我们直接先容Sapling中的生意业务布局,如图所示:

如前面所说,bindingSig主要实现了两个成果。第一:在不袒露spend Transfer 和 output Transfer的v值的环境下,担保了transaction balance;第二:防备了outputDescription被进攻者重放,主要是操作spendDescription 和 outputDescription对应的用于计较cv的随机数rcv来发生签名私钥bsk,这使得进攻者无法作恶,因此签名验证公钥是操作spendDescription 和 outputDescription对应的cv来生成的,进攻者无法改变cv,不然zkproof会验证失败。bindingSig的签名验签流程如下图所示:

c. 解答:在sapling版本,思量到一些计较本领和内存空间受限的钱包,不具备生成proof的本领,因此大概需要第三方署理生成,此时,需要把ak、nsk等生成证明需要的私有数据果真给第三方,这样就会损失隐私性,在这种环境下,为了担保第三方不能随意生成一个有效的zkproof,生意业务提倡者需要对整个spendDes用私钥举办签名。一个需要留意的点是:生成zkproof需要ak,不需要ask,ask是在签名时利用。因此第三方无法生成一个有效的签名。


a. 目标:证明某小我私家对付inputnote具有耗费的权力,即拥有spendKey
在Sapling中,生意业务由Spend Transfer和Output Transfer构成,别离对应隐匿的输入和隐匿的输出,而spendDescription和output Description是用来别离描写Spend Transfer和Output Transfer的数据字段,它们被各自编码暗示成vShieldSpend和vShieldOutput字段储存在生意业务布局中。


以上是小我私家领略,假如错误,还但愿列位读者品评指正。

相关字段表明如下:


output zkproof 主要是实现了在不袒露任何隐私信息的环境下,去使得validator相信txsender所发生的新note是有效的。输入仍分为两个部门,一个是primary input, 一个是Auxiliary input。primary input是果真的输入信息,Auxiliary input是隐私的输入信息,只有txsender知道。详细内容如下图所示:
2. vShieldOutput

深入领略Zcash的零常识证明体系

由于a、ak都是Auxiliary input,是私有数据。且ak = spendAuthSig.DerivePublic(ask) (2),ask也是私有数据,因此若公式(1)创立,意味着此人有相应耗费权力。那spendAuthSig存在的意义是啥?
Zk-proof and Signature


深入领略Zcash的零常识证明体系


5. BindingSig。

2. 生意业务者生成zk-proof,和signature,验证者验证;
3. spend 和output proof 均为验证balance属性,怎么担保整体value均衡。

    

操作pederson value commitment举办同态埋没。
7. 如何埋没生意业务吸收者?

Cenc是encCiphertext,是noteplaint颠末对称密钥加密后的密文信息,noteplaint是指生意业务新生成的note的内容,这些内容都是私密的。np的构成及Cenc的加密进程如下图所示:

Sapling

实际上,Sapling的生意业务布局内容不止这些,在这只是摆列出Sapling特有的一些字段及相应的表明,完整的生意业务布局在协议说明书的7.1章节有具体先容。
NoteCommit:cm计较函数,原始输入为np的数据;cm:note的理睬;Extractor:抽取器,返回cm的u坐标,cm形式(u,v);若返回的cmu与outputDes里的一致,则说明证明者有计较cm的私有数据;
Zcash是如何埋没吸收方的?
主要分享Zcash Sapling版本的协议细节。多多指教!!!


  3. spendAuthSig


按照上图可以看出,output zkproof总共证明白一下几点: Note commitment integrity:outputnode的理睬的完整性,证明cm确实按照v,rcm,gd,pkd计较出来的;Value commitment integruty:inputnote v的理睬完整性,证明cv确实按照rcv,v计较出来的;Small order checks:证明私有参数,gd是正当的;Ephemeral public key integrity:姑且公钥的计较完整性。若以上等式均满意,则说txsender发生的新note是有效的,因为等式1,2,3均创立;等式4创立则可以担保txreceiver可以按照本身的ivk密钥和epk去理会加密后的np,并生存到当地的荟萃傍边。

在Sapling中,生意业务者总共要生成两个zkproof(spend zkproof & output zkproof)和两个签名(spendAuthSig & bindingSig)。下面逐个先容。

媒介

总结

Zcash

  4. bindingSig

cv:对Inpunote 的value的理睬,所谓理睬,其实就是对v值的一种埋没,这种埋没是单向的,不行逆的,也不行伪造;anchor:cm默克尔树的根,用于验证inputnote的存在性及有效性;nullifier:note的独一性标识,用来防备同一note被反复耗费; rk:用于验证消费授权签名;zkproof:零常识证据,在不透露相应隐私的环境下,证明note的有效性、耗费note的权力、隐私地点的有效性 spendAuthSig:用私钥对spendDescription签名,对note的耗费举办授权

 4. Sapling吸收者如何吸收note。
同理,一个vShiledOutput对应一个OutputDescription,一个靠得住的OutputDescription暗示发生的新note的有效性,它包括的内容如下图所示:

深入领略Zcash的零常识证明体系


一个vShiledSpend对应着一个SpendDescription,一个靠得住的SpendDescription暗示一个note的有效耗费,它包括的内容如下图所示:

   3. valueBlance



接下来,重点先容vShieldSpend、vShieldOutput、valueBlance、bindingSig四个字段暗示的内容。
1. Sapling中spendDescrption部门关于spendAuthSig的领略。


Zcash是如何埋没生意业务金额的?
ZCASH 官方协议说明书 https://github.com/zcash/zips/blob/master/protocol/protocol.pdf

2. output zkproof

  4. bindingSig在Sapling中,bingingSig发挥两个浸染。第一,担保了生意业务的balance属性;第二,操作计较输入和输出note cv的随机数rcv,来生成签名私钥,防备outputDescription被进攻者举办重放进攻(spendDescription的防重放进攻由spendAuthSig来担保)


相关字段表明如下 DiverfiedHash:一次性参数生成器,输入d,输出gd,每次挪用都纷歧样;esk、epk:一次性私钥、公钥,满意epk = esk * gd;pkd:一次性传输地点;np:noteplaint{memo、rcm、v、d} => note信息{非凡字段,由生意业务发送者和吸收者协商一致利用、生成cm的随机数、note的面额、 diversifier};KA.DerivePublic:计较公钥;KA.Agree:计较共享密钥;KDF:密钥获取函数,获得最终的加密密钥Kenc;Sym.Encrypt:一次性对称加密函数;个中Kenc为一次性对称加密密钥,Penc为编码后的Cenc。从生意业务布局里可以看出,Kenc并没有直接的看成明文举办传输,那么,生意业务吸收者是如何获取Kenc,对Cenc举办加密的呢?

深入领略Zcash的零常识证明体系

8. 如何埋没v值?
b. balance证明不在zkproof中实现,淘汰了电路的巨大性,可改进生成和验证机能
作为零常识证明的乐成应用项目,让我们带着以下几个问题去研究Zcash的机制:

本篇主要分享Zcash Sapling版本协议的主要细节,相对付Sprout版本,照旧做了许多的修改和优化,在此不做具体的比拟阐明。
 1. spend zk-proof





生意业务布局中不存在生意业务吸收者的地点信息,用生意业务吸收者的隐私地点去生成对称密钥,生成Cenc ,生意业务吸收者用问题4的要领吸收生意业务。且同一生意业务吸收者袒露给差异生意业务提倡者的地点是差异的,为了防备生意业务提倡者之间勾串作恶。



吸收者遍历每笔生意业务的outputDes,用ivk和outputDes里的epk实验解密每一个Cenc ,假如乐成,则计较note并添加至receiveSets

关于spendAuthSig 的意义,可在两种场景下,举办描写。第一:txsender本身发生zkproof,然后对spendDescription举办签名。这时,假如存在一个进攻者,想对spendDescription举办重放进攻,则其需要从头签名,则rk会被替换,那么验证者在验证spend zkproof时,就会验证失败;假如进攻者不替换rk,那么spendAuthSig的验签就会失败,因此spendAuthSig的存在,有效规避spendDescription的重放进攻;第二:txsender挪用第三方发生zkproof,然后本身对spendDescription举办签名,这是Sapling版本答允的,为了让内存和计较本领受限的一些钱包也能支持隐私生意业务,纵然这样损失了隐私性,因为需要把auxiliary input全部发送给第三方。因此,在这种环境下,为了不让第三方恶意发生有效的zkproof,txsender需要对spendDescription举办签名,需要留意的是,txsender签名用的是ask,zkproof中spend Authority的证明用的是ak(ak可由ask计较得出),因此第三方无法发生有效的签名,有效规避spendDescription的重放进攻。spendAuthSig的签名士程如下图所示:

a. 生成proof的巨细变小了,joinsplit[1698bytes] > spend[384bytes] + output[948bytes]
迄今为止,Zcash总共经验了三个版本的迭代,第四次版本进级时间估量在12.11.2019,据官方先容,此次更新主要是缩短了出块的时间。
接下来,我们将只管仔细挖掘每一个步调,去摸索一下,它是如何实现这三点的。
  1. 什么是Cenc?

深入领略Zcash的零常识证明体系

spend zkproof 主要是实现了在不袒露任何隐私信息的场景下,去证明txsender有权力去耗费一些note,而且这些note都是有效的。输入分为两个部门,一个是primary input, 一个是Auxiliary input。primary input是果真的输入信息,Auxiliary input是隐私的输入信息,只有txsender知道。详细内容如下图所示:


深入领略Zcash的零常识证明体系

附录
回归到大偏向,无论是Sapling版本,照旧Sprout版本,生意业务的整体流程都可以扼要归纳综合为以下三个步调:

Transaction
每笔生意业务的验证公钥都是一次性姑且公钥,因此矿工不知道生意业务提倡者。



6. 如何埋没生意业务发送者?

spend authority: rk = spendAuthSig.RandomizePublic(a,ak) (1)
首先,让我们存眷两个等式:pkd = ivk * gd esk * gd = epk 在加密的进程中,KA.Agree的输入参数为pkd和esk,由pkd * esk = ivk * gd * esk = ivk * epk,因此在解密的进程中,假如能输入ivk和epk,那么由KA.Agree(pkd,esk) == KA.Agree(ivk,epk)。领略了这一点,下面详细看一下Cenc的解密进程,如下图所示:

txReceiver吸收生意业务的一般步调为:吸收者遍历每笔生意业务的outputDes,用本身的ivk和outputDes里的epk实验解密每一个Cenc ,假如返回乐成,则将吸收到的note添加至当地的receiveSets。那么什么是Cenc呢?用ivk和epk如何去解密Cenc?
要害词: Zcash  零常识证明  

b. 疑问:在spendDes的zkproof中,证明耗费权力如下:

Zcash是如何埋没发送方的?

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。