Zerocash:Decentralized Anonymous Payments from Bitcoin

Zerocash是在btc上增加一套匿名支付机制得到的货币,这套匿名支付机制叫做DAP(Decentralized Anonymous Payment )方案,DAP可以搭建在任何基于账本的加密数字货币上层,提供一套匿名机制。zcash系统利用zkSnark构造了去中心化的”匿名池“ ,通过铸币(Mint)和浇铸(Pour)完成匿名操作,所谓铸币过程是指用户使用一定量的币兑换等额的承诺(匿名coin),浇铸过程是指用户通过零知识证明的方式进行匿名coin之间的转账,并且在转账过程中还可以进行赎回操作。
image-20220525104900215

step1 : 实现用户匿名且面额固定的匿名货币

  图中实现了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的方式进行组织

image-20220525162237086

step2: 支持直接匿名支付

  • 尽管 c m 1 n e w 、 c m 2 n e w cm_1^{new}、cm_2^{new} cm1newcm2new 是用户A构造的,但用户A不知道匿名币对应私钥sk ,所以用户构造不了一个有效的零知识证明,所以用户无权使用
  • sn 是跟sk相关,用户A也没办法追踪新币交易
  • 金融v 隐藏在承诺中

image-20220525163246445

setp3. 发送方将 c 1 n e w 、 c 2 n e w c_1^{new}、c_2^{new} c1newc2new秘密发送给接受方

  发送方需要将将 c 1 n e w 、 c 2 n e w c_1^{new}、c_2^{new} c1newc2new 秘密发送给对应的接受方,接收方才能正常使用接收到的匿名币,为了支持直接加密这些秘密值,跟随交易一起打包到区块链里,增加一对用于加解密的公私钥对

image-20220525162113058

setp4:在pour中进行赎回

image-20220525162015126

setp5: 抗延展性攻击(malleability attacks)

  info 信息没做完整性保护,攻击者可以修改info信息中指定的赎回地址

image-20220525161920377

最后完整的交易:

202205171610804

猜你喜欢

转载自blog.csdn.net/qq_34793644/article/details/124977859