Zerocash是在btc上增加一套匿名支付机制得到的货币,这套匿名支付机制叫做DAP(Decentralized Anonymous Payment )方案,DAP可以搭建在任何基于账本的加密数字货币上层,提供一套匿名机制。zcash系统利用zkSnark构造了去中心化的”匿名池“ ,通过铸币(Mint)和浇铸(Pour)完成匿名 *** 作,所谓铸币过程是指用户使用一定量的币兑换等额的承诺(匿名coin),浇铸过程是指用户通过零知识证明的方式进行匿名coin之间的转账,并且在转账过程中还可以进行赎回 *** 作。
图中实现了Mint和Spend两个过程,因为证明是零知识的,所以该协议实现了用户匿名性。但是,如果用户A 铸造了匿名币c,并将c发送给用户B,B进行Spend时存在以下问题:
因为用户A知道sn,所以可以通过监听sn来识别用户B的交易,从而用户B的匿名性降低因为用户A知道r,尽管A将币发送给B了,但A依然有该币的使用权图中固定cm的面额为1,如果A想给B转账100,需要转账100次注:图中交易只是简单罗列在blockchain中,实际上交易应以merkle tree的方式进行组织
step2: 支持直接匿名支付 尽管 c m 1 n e w 、 c m 2 n e w cm_1^{new}、cm_2^{new} cm1new、cm2new 是用户A构造的,但用户A不知道匿名币对应私钥sk ,所以用户构造不了一个有效的零知识证明,所以用户无权使用sn 是跟sk相关,用户A也没办法追踪新币交易金融v 隐藏在承诺中 setp3. 发送方将 c 1 n e w 、 c 2 n e w c_1^{new}、c_2^{new} c1new、c2new秘密发送给接受方发送方需要将将 c 1 n e w 、 c 2 n e w c_1^{new}、c_2^{new} c1new、c2new 秘密发送给对应的接受方,接收方才能正常使用接收到的匿名币,为了支持直接加密这些秘密值,跟随交易一起打包到区块链里,增加一对用于加解密的公私钥对
setp4:在pour中进行赎回 setp5: 抗延展性攻击(malleability attacks)info 信息没做完整性保护,攻击者可以修改info信息中指定的赎回地址
最后完整的交易:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)