火星链 火星链
Ctrl+D收藏火星链

PEN:技术干货 | 深入理解Zcash的零知识证明体系

作者:

时间:1900/1/1 0:00:00

前言

主要分享ZcashSapling版本的协议细节。多多指教^_^!!!

Zcash

迄今为止,Zcash总共经历了三个版本的迭代,第四次版本升级时间预计在12.11.2019,据官方介绍,此次更新主要是缩短了出块的时间,详细内容见

Zcash网络信息。

作为零知识证明的成功应用项目,让我们带着以下几个问题去研究Zcash的机制:

1.Zcash是如何隐藏发送方的?2.Zcash是如何隐藏接收方的?3.Zcash是如何隐藏交易金额的?

**建议:阅读本文前,您最好已经了解了:1.note的概念;2.零知识证明的基本概念;

Sapling

本篇主要分享ZcashSapling版本协议的主要细节,相对于Sprout版本,还是做了很多的修改和优化,在此不做详细的对比分析。回归到大方向,无论是Sapling版本,还是Sprout版本,交易的整体流程都可以简要概括为以下三个步骤:1.交易者发起交易;2.交易者生成zk-proof,和signature,?验证者验证;3.接收者接收交易;

接下来,我们将尽量仔细挖掘每一个步骤,去探索一下,它是如何实现这三点的。

Transaction

在这里,我们不详细介绍交易发起者是如何发起一起交易的,我们直接介绍Sapling中的交易结构,如图所示:

????实际上,Sapling的交易结构内容不止这些,在这只是罗列出Sapling特有的一些字段及相应的解释,完整的交易结构在协议说明书的7.1章节有详细介绍。

在Sapling中,交易由SpendTransfer和OutputTransfer组成,分别对应隐匿的输入和隐匿的输出,而spendDescription和outputDescription是用来分别描述SpendTransfer和OutputTransfer的数据字段,它们被各自编码表示成vShieldSpend和vShieldOutput字段储存在交易结构中。接下来,重点介绍vShieldSpend、vShieldOutput、valueBlance、bindingSig四个字段表示的内容。

洛杉矶道奇队前老板创立的社交网络协议ProjectLiberty与波卡技术团队达成协议:5月24日消息,由洛杉矶棒球队道奇队前老板Frank McCourt创立的去中心化社交网络协议Project Liberty与波卡背后技术团队达成协议,将就去中心化社交网络协议(DSNP)的首次实施进行合作。DSNP的创建者、技术专家Braxton Woodham表示,我们现在已准备好将社交功能部署为互联网本身的核心元素。Polkadot的独特架构可以大规模实施DSNP。去年6月份,据彭博社报道,Frank McCourt将投资1亿美元用于Project Liberty项目,该项目计划使用区块链来构建一个新的互联网基础设施,即去中心化社交网络协议(DSNP)。不同于Facebook对拥有的用户社交数据的独有控制,DSNP鼓励采取更加平等的做法,让传统社交媒体公司从共享的社交数据中获利,并允许用户在不同社交媒体之间移动他们的社交数据,从而成为新型互联网基础设施。[2022/5/24 3:38:35]

????1.vShieldSpend

一个vShiledSpend对应着一个SpendDescription,一个可靠的SpendDescription表示一个note的有效花费,它包含的内容如下图所示:

????cv:对Inpunote的value的承诺,所谓承诺,其实就是对v值的一种隐藏,这种隐藏是单向的,不可逆的,也不可伪造;anchor:cm默克尔树的根,用于验证inputnote的存在性及有效性;nullifier:note的唯一性标识,用来防止同一note被重复花费;rk:用于验证消费授权签名;zkproof:零知识证据,在不透露相应隐私的情况下,证明note的有效性、花费note的权力、隐私地址的有效性spendAuthSig:用私钥对spendDescription签名,对note的花费进行授权

??2.vShieldOutput

同理,一个vShiledOutput对应一个OutputDescription,一个可靠的OutputDescription表示产生的新note的有效性,它包含的内容如下图所示:

深圳市人大代表林良浩:解决区块链前沿技术的发展风险隐患:4月11日,深圳市七届人大二次会议开幕。会议期间,深圳市人大代表林良浩提交了《关于解决区块链前沿技术的发展风险隐患的建议》。

他认为,区块链技术目前尚不成熟,仍处于发展早期。对于区块链性能、隐私安全、可扩展等方面的技术创新正在不断涌现。区块链技术与行业目前仍存在关键技术突破、安全风险、技术应用落地难、技术人才稀缺四个问题,对此,他建议:加速区块链技术攻关、提高区块链安全风险应对、促进区块链产业融合、加强区块链人才建设。(证券时报)[2022/4/12 14:19:43]

????cv:对outputnote的value的承诺,亦满足单向性,不可伪造性;cmu:对outputnote的承诺,承诺的数学形式是曲线上的一个点,cmu为点的u坐标;ephemeralKey:临时公钥,用于计算解密密钥encCiphertext:noteplaint的密文,noteplaint是note的具体内容;outCiphertext:用来计算共享密钥的信息密文,可用来恢复noteplaint信息zkproof:零知识证据,在不透露任何隐私的情况下,证明新生成Note的有效性

????3.valueBlance

valueBalance表示此transparentvaluepool的变化量,由SpendTransfer的v总和减去OutputTransferd的v的总和得出。当valueBalance为正数时,表示从Saplingvaluepool转移valueBalance至transparentvaluepool,如果为负数,则执行相反的操作。valueBalance将在bindingSig中,用于验证交易的balance属性。

????4.bindingSig

在Sapling中,bingingSig发挥两个作用。第一,保证了交易的balance属性;第二,利用计算输入和输出notecv的随机数rcv,来生成签名私钥,防止outputDescription被攻击者进行重放攻击

声音 | 许洪波:区块链技术发展不能局限于自我技术的突破:日前,国家工信部信息与标准化委员会委员、创链数据董事长许洪波在接受采访时表示,区块链更多是组合技术的创新或者是应用创新,而不是核心技术的创新。在区块链技术出现之前,已有分布式数据、密码学。“区块链技术的发展不能局限于自我技术的突破,还要解决实际的问题,与其思考如何突破核心技术,还不如更专注于如何能找到关键的应用,如何用区块链技术赋能实体经济,并让区块链技术在世界范围内得到更大规模的应用。”(《中国经营报》)[2019/12/25]

Zk-proofandSignature

在Sapling中,交易者总共要生成两个zkproof(spendzkproof&outputzkproof)和两个签名(spendAuthSig&bindingSig)。下面逐个介绍。

????1.spendzk-proof

spendzkproof主要是实现了在不暴露任何隐私信息的场景下,去证明txsender有权力去花费一些note,并且这些note都是有效的。输入分为两个部分,一个是primaryinput,一个是Auxiliaryinput。primaryinput是公开的输入信息,Auxiliaryinput是隐私的输入信息,只有txsender知道。具体内容如下图所示:

根据上图可知,spendzkproof总共证明了以下几点:Notecommitmentintegrity:inputnode的承诺的完整性,证明cm确实根据v,rcm,gd,pkd计算出来的;Merklepathvalidity:默克尔树验证路径有效性,证明cm是存在默克尔树上的,是一个有效的cm;Valuecommitmentintegruty:inputnotev的承诺完整性,证明cv确实根据rcv,v计算出来的;Smallorderchecks:证明私有参数,gd和ak是合法的;Nullifierintegrity:Note的唯一标识,证明nf确实根据nsk,cm,pos计算出来的;Spendauthority:Note的花费权力,证明拥有花费note所需的私有参数;Diversifiedaddressintegrity:一次性地址的计算完整性。若以上等式均能满足,则说明txsender有权力花费对应的Note,因为等式4,6,7成立;其花费的note是有效性,因1,2,3,5成立。

声音 | 迅雷链张慧勇:区块链技术如何在实体经济中应用是亟待解决的问题:5月15日,在世界智能大会2019全球区块链科技创新峰会上,迅雷链开放平台研发负责人张慧勇受邀出席了峰会并发表了“看迅雷链如何助力实体经济”的演讲。张慧勇表示,区块链3.0时代亟待解决的问题是让区块链技术在实体经济得以运用以发挥其价值。而只有符合实体企业应用需求的区块链,才能真正落地。这就要求区块链企业,从实体企业的现实需求出发,升级自己的技术架构,为实体经济赋能构建有力基础。迅雷链自2018年上线以来,始终在强化自身技术的同时踏实助力实体商业场景落地,已在版权、溯源、出行、营销等多个领域有了规模级行业应用。[2019/5/16]

????2.outputzkproof

outputzkproof主要是实现了在不暴露任何隐私信息的情况下,去使得validator相信txsender所产生的新note是有效的。输入仍分为两个部分,一个是primaryinput,一个是Auxiliaryinput。primaryinput是公开的输入信息,Auxiliaryinput是隐私的输入信息,只有txsender知道。具体内容如下图所示:

根据上图可以看出,outputzkproof总共证明了一下几点:Notecommitmentintegrity:outputnode的承诺的完整性,证明cm确实根据v,rcm,gd,pkd计算出来的;Valuecommitmentintegruty:inputnotev的承诺完整性,证明cv确实根据rcv,v计算出来的;Smallorderchecks:证明私有参数,gd是合法的;Ephemeralpublickeyintegrity:临时公钥的计算完整性。若以上等式均满足,则说txsender产生的新note是有效的,因为等式1,2,3均成立;等式4成立则可以保证txreceiver可以根据自己的ivk密钥和epk去解析加密后的np,并保存到本地的集合当中。

????3.spendAuthSig

关于spendAuthSig的意义,可在两种场景下,进行描述。第一:txsender自己产生zkproof,然后对spendDescription进行签名。这时,如果存在一个攻击者,想对spendDescription进行重放攻击,则其需要重新签名,则rk会被替换,那么验证者在验证spendzkproof时,就会验证失败;如果攻击者不替换rk,那么spendAuthSig的验签就会失败,因此spendAuthSig的存在,有效规避spendDescription的重放攻击;第二:txsender调用第三方产生zkproof,然后自己对spendDescription进行签名,这是Sapling版本允许的,为了让内存和计算能力受限的一些钱包也能支持隐私交易,即使这样损失了隐私性,因为需要把auxiliaryinput全部发送给第三方。因此,在这种情况下,为了不让第三方恶意产生有效的zkproof,txsender需要对spendDescription进行签名,需要注意的是,txsender签名用的是ask,zkproof中spendAuthority的证明用的是ak,因此第三方无法产生有效的签名,有效规避spendDescription的重放攻击。spendAuthSig的签名流程如下图所示:

分析 | 英国将成为区块链技术的全球领导者:据Bitrazzi今日消息,英国三大分析公司Big Innovation Center、DAG Global和Deep Knowledge Analytics发布报告称,英国拥有工业和政府资源,将在2020年之前成为区块链技术的全球领导者。DAG Global的CEO和联合创始人Sean Kiernan在接受卫报采访时表示,英国是主要的全球金融中心,也是金融科技的领导者。同时,它也开始呈现出成为区块链技术和加密货币领导者的显著潜力。[2018/7/16]

????4.bindingSig

如前面所说,bindingSig主要实现了两个功能。第一:在不暴露spendTransfer和outputTransfer的v值的情况下,保证了transactionbalance;第二:防止了outputDescription被攻击者重放,主要是利用spendDescription和outputDescription对应的用于计算cv的随机数rcv来产生签名私钥bsk,这使得攻击者无法作恶,因此签名验证公钥是利用spendDescription和outputDescription对应的cv来生成的,攻击者无法改变cv,否则zkproof会验证失败。bindingSig的签名验签流程如下图所示:

ReceiveTransation

txReceiver接收交易的一般步骤为:接收者遍历每笔交易的outputDes,用自己的ivk和outputDes里的epk尝试解密每一个Cenc,如果返回成功,则将接收到的note添加至本地的receiveSets。那么什么是Cenc呢?用ivk和epk如何去解密Cenc?

????1.什么是Cenc?

Cenc是encCiphertext,是noteplaint经过对称密钥加密后的密文信息,noteplaint是指交易新生成的note的内容,这些内容都是私密的。np的组成及Cenc的加密过程如下图所示:

相关字段解释如下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进行加密的呢?

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

首先,让我们关注两个等式:pkd=ivk*gdesk*gd=epk在加密的过程中,KA.Agree的输入参数为pkd和esk,由pkd*esk=ivk*gd*esk=ivk*epk,因此在解密的过程中,如果能输入ivk和epk,那么由KA.Agree(pkd,esk)==KA.Agree(ivk,epk)。理解了这一点,下面具体看一下Cenc的解密过程,如下图所示:

相关字段解释如下:

NoteCommit:cm计算函数,原始输入为np的数据;cm:note的承诺;Extractor:抽取器,返回cm的u坐标,cm形式(u,v);若返回的cmu与outputDes里的一致,则说明证明者有计算cm的私有数据;

总结

1.Sapling中spendDescrption部分关于spendAuthSig的理解。

a.目的:证明某个人对于inputnote具有花费的权力,即拥有spendKey

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

spendauthority:rk=spendAuthSig.RandomizePublic(a,ak)

由于a、ak都是Auxiliaryinput,是私有数据。且ak=spendAuthSig.DerivePublic(ask),ask也是私有数据,因此若公式成立,意味着此人有相应花费权力。那spendAuthSig存在的意义是啥?

c.解答:在sapling版本,考虑到一些计算能力和内存空间受限的钱包,不具备生成proof的能力,因此可能需要第三方代理生成,此时,需要把ak、nsk等生成证明需要的私有数据公开给第三方,这样就会损失隐私性,在这种情况下,为了保证第三方不能随意生成一个有效的zkproof,交易发起者需要对整个spendDes用私钥进行签名。一个需要注意的点是:生成zkproof需要ak,不需要ask,ask是在签名时使用。因此第三方无法生成一个有效的签名。

2.为何由sprout的joinsplittransfer演变成sapling的spendtransfer&outputtransfer。

a.生成proof的大小变小了,joinsplit>spend+output

b.balance证明不在zkproof中实现,减少了电路的复杂性,可改善生成和验证性能

3.spend和outputproof均为验证balance属性,怎么保证整体value平衡。

使用了pedersonvaluecommitment方法,它具有同态加法属性,即在不暴露v值的情况下,验证:

??∑vold-∑vold=vbalance

????4.Sapling接收者如何接收note。

接收者遍历每笔交易的outputDes,用ivk和outputDes里的epk尝试解密每一个Cenc,如果成功,则计算note并添加至receiveSets

5.BindingSig。

关于这个签名的实现,您可参考协议说明文档4.12章节,密钥对不是重新生成的,而是基于cv和rcv的生成关系,实现签名验签过程

6.如何隐藏交易发送者?

每笔交易的验证公钥都是一次性临时公钥,因此矿工不知道交易发起者。

7.如何隐藏交易接收者?

交易结构中不存在交易接收者的地址信息,用交易接收者的隐私地址去生成对称密钥,生成Cenc,交易接收者用问题4的方法接收交易。且同一交易接收者暴露给不同交易发起者的地址是不同的,为了防止交易发起者之间串通作恶。

8.如何隐藏v值?

利用pedersonvaluecommitment进行同态隐藏。

以上是个人理解,如果错误,还希望各位读者批评指正。。多谢^_^。最后附上一张整体的结构图,希望能帮助大家理解。

图片超过2M,有需要的可以看资料私信我。

附录

1.ZCASH官方协议说明书https://github.com/zcash/zips/blob/master/protocol/protocol.pdf

标签:ENDPENSPEPENDALEND价格OPEN价格Vesper V-DollarPEND价格

火必交易所热门资讯
加密货币:木马来袭,五千台电脑沦为挖矿“黑劳工”

文:凯尔来源:蜂巢财经编者注:原标题为《五千台电脑沦为挖矿“黑劳工”!》加密货币业兴起,不但带来一个新兴市场,也引诱来唯利是图的黑产团伙,其中之一是挖矿木马.

1900/1/1 0:00:00
SDT:增加对接交易所数量 切换新区块链,USDT市场占有率依然领先

USDT仍然是大多数加密交易者选择的稳定币。尽管有人批评Tether没有完全受到法币支持以及iFinex的银行问题,USDT仍然被广泛使用.

1900/1/1 0:00:00
比特币:理解比特币白皮书:最远的路,或许是最快的路

撰文:李画来源:链闻中本聪认为比特币系统应该具有这样的特点:一旦该系统的0.1版本开始运行,整个系统的核心设计将?永远保持不变?.

1900/1/1 0:00:00
RAN:一文读懂Monero的公平挖矿算法RandomX

作者:潘致雄来源:链闻因为专业挖矿设备全面入侵加密货币和区块链平台,越来越多人开始担心所谓的「去中心化」岌岌可危.

1900/1/1 0:00:00
VOS:精选 | Messari创始人:行业最近的沮丧与希望;比特币技术栈中的创新

今天内容包括:1、Messari创始人:行业最近的沮丧与希望;2、比特币技术栈中的创新;3、中国内部对加密货币交易所的打压;4、新资产发布:分解Kadena与NervosNetwork的上线策略.

1900/1/1 0:00:00
以太坊:以太坊2.0真的要来了,阶段0有望在2020年初推出主网

12月8日上午,以太坊伊斯坦布尔硬分叉升级成功完成,并带来了6个改进提案:1)EIP-152:添加Blake2预编函数;2)EIP-1108:降低alt_bn128预编译Gas成本;3)EIP-.

1900/1/1 0:00:00