区块链隐私保护——大零币:Zerocash: Decentralized anonymous payments from bitcoin

 E. B. Sasson, A. Chiesa, C. Garman, M. Green, I. Miers, E. Tromer, M. Virza, “Zerocash: Decentralized anonymous payments from bitcoin”, Proceedings of 2014 IEEE Symposium on Security and Privacy (SP), pp. 459-474, 2014.(CCF A)

Zerocash是2014年提出的一种基于比特币模型的去中心化匿名支付方案,俗称“大零币”,是目前为止区块链UTXO模型中隐私性最强的币。

Zerocoin:俗称“小零币”,于2013年提出,其作者与zerocash作者为同一团队。

Zerocash相比于Zerocoin主要有以下两个改进:
1、Zerocoin只隐藏发送方地址,Zerocash隐藏发送方地址、接收方地址、交易金额

2、Zerocash比Zerocoin效率更高

1、比特币中的隐私问题

所有交易信息都记录在公共账本上,这会暴露很多的信息,比如医疗信息、商人的资金流向、用户过去和目前所处的位置等等。比特币中用公钥标识一个用户,但这仅仅是“假名”,而没有做到“匿名”,由交易记录中的公钥地址也没能分析出很多用户隐私信息。


2、预备知识

2.1 抗碰撞哈希函数


2.2 Merkle Tree


2.3 零知识证明

Zerocoin使用NIZK方案,Zerocash使用ZK-SNARK方案。ZK-SNARK很厉害!!!




3、方案构造

为了保护用户隐私性,账本上不记录用户地址,而是选择用随机字符串 ρ 代表用户实体

3.1 Creating payment address

不同于比特币,其多出一对公私钥(后续用于分发随机字符串)。


3.2 Minting coins

由比特币转换为零币的过程,即生成新币的过程。Mint交易会公开至账本上,新生成的币 c 不会公开,拥有者自己保留,其中主要用到了“承诺commit”。


3.3 Pouring transactions

注意:图中输入 ρ 应为输入私钥 ask。

Pour交易为花币的过程,可以输入多个币,也可输出多个币,为了易于理解,简化为输入一个币输出两个币,整个过程在交易发起方完成。

图中左侧输入为要花掉的旧币 c ;

上面输入为:新生成两个币的面额V1,V2,新生成两个币的接收公钥地址,当前Merkle Tree 的根rt,旧币拥有者的私钥,和一个公共值Vpub:可用于支付交易费或由零币转化为比特币。

下侧输出为Pour交易,为记录在账本上的交易记录,其中不包含发送方地址、接收方地址、交易金额。

右侧输出为生成的两个新币,此时仍存在交易发起方,可是怎么秘密传到接收方呢?


3.4 Verifying transactions


3.5 Distribute random string

使用另一对公私钥对来进行传送,用加密密钥加密新币发送到公共账本上,拥有对应私钥的人能解开即代表拥有此币的使用权。



3.6 Preventing double spending

注意:图中公钥地址Apk应该是私钥地址Ask !

目前发送方接收方都拥有新生成的币,那发送方也可以花新币,怎么阻止双花问题呢?

这是方案中很巧妙的一个地方,将随机数 ρ 、公钥地址、私钥地址、序列号sn 相互关联起来

序列号sn出现在账本上就表示对应的币花过了,从而阻止了双花问题。



4、性能、安全性、不足

性能:可看出Setup Pour过程效率是比较低的


安全性:


存在的不足:

1、效率问题,可从ZK-SNARK方面进行改善;

2、Setup过程需要在初始化阶段由一个可信结构来完成,可考虑用安全多方计算MPC来完善;

5、设计过程(可跳过)

方案比较复杂,下面给出一步步设计过程。








最后,祭出这张神图。




猜你喜欢

转载自blog.csdn.net/Black_BearB/article/details/80529912