隐私币

From GoToken's Wiki!
Jump to navigation Jump to search

隐私币相关的技术[edit]

  1. 门限签名
  2. 环签名
  3. 混淆
  4. 零知识证明

Horizon[edit]

Dash[edit]

Mimblewimble[edit]

Mimblewimble可以看作一种简化版的Monero。他把地址这个概念从区块链中去掉了,既然发送者没有了地址,该方案也把环签名去掉了。这个方案只留下了保密交易方案和区间证明。由于保密交易方案对应的签名方案具有同态性,他们可以把很多交易整合起来。这样做的好处在于整个账本变小,全节点挖矿时负担就变小很多。

Zcoin[edit]

Zcoin是学术界在去中心化隐私支付方面做的最早的尝试之一,其基本思路是用一个Pedersen承诺(Commitment)作为货币,承诺的消息是货币对应的序列号,这将被用来防止双花攻击,而承诺方案所使用的随机数则代表用户对该货币的所有权。

Zcoin使用了一个聚合器(Accumulator)来保证所使用的货币的匿名性。聚合器可以把系统中所有货币对应的承诺压缩成一个群元素,用户使用自己的货币时只需证明他知道其货币对应的随机数,以及该货币承诺是属于聚合器所包含元素中的一员即可。聚合器在功能上可以看作零知识证明中的或证明(Or proof)的一种推广。

Zcoin保护隐私的思路和1999年的一个隐私支付方案一脉相承[ST99],但有不少简化。这个简化带来的缺陷就是Zcoin金额固定不可分,这在实际中非常不方便。另外一个问题就是最初Zcoin的设计没有对货币金额做区间证明,这样导致攻击者有可能发起上述的凭空造币的攻击。这些问题在Zcash当中基本上都得到解决。

Zcash[edit]

Zcash是可以看作Zcoin的修正版,用了一个当时最新的零知识证明方案,把可审核性(auditability)和可追踪性(traceability)之类的性质都考虑进去了,他实际上相当于把1999年Sander和Ta-Shma两人提出的方案[ST99]运用到了区块链里。

Zcash使用的零知识证明是微软和IBM的密码学者开发的一个可验证计算的方案Pinnochio衍生出来的。Pinnochio最早提出的目的是用于云计算中的可验证计算,这个思路能支持通用计算,但最大的问题是需要可信初始化。可信初始化中涉及的一些陷门知识一旦被攻击者获得,则有可能以此对零知识证明的健全性发起攻击,从而无限量打印Zcash并无法被探测到。

针对可信初始化Zcash团队提出了些解决思路,如通过多方计算来分布式地初始化设置参数,但这个思路的问题在于首先他并没彻底解决这个问题,因为多方计算是由有限的几个参与方参与计算,大家还是得相信参与方没有合谋攻击这个计算过程,因为毕竟这里涉及的经济利益太大了,很难相信不会有人铤而走险。

另外,这个步骤本身还会带来一些潜在的安全隐患,信息安全里的一个基本原则是复杂性是安全性的天敌(complexity is the enemy of security),这和系统工程学上的Keep it simple and stupid, KISS原则,及哲学上的奥卡姆剃刀准则:如无必要勿增实体是一脉相承的。所以,如果有一个方案能够避免这一步骤且效率相比不差,那当然应该选择较简单的方案。

另外,Zcash的设计实际上还有其他一些冗余之处,比如他们的匿名性一部分是通过隐藏Zcash于系统中已有货币的membership来提供的,而双花攻击则通过检验序列号来防止的,Zcash本身实际上也是个承诺,Zcash持有权的转让则通过转让承诺内容来实现的。这里零知识证明对应的statement非常复杂,比如针对货币本身的合法性证明,就得通过证明承诺本身在Merkle tree上的membership proof 来证明。

这个方案非常复杂,因为首先需要用零知识证明的方案来证明哈希计算的正确性,这个本身涉及的电路就已经够复杂了,另外随系统中发行的货币量增加,对应的Merkle tree变大,需要验证的电路数目量随之增加。我认为Zcash系统的这种复杂性实际上和[ST99]本身设计的复杂性有关,因为这个方案最初设计是考虑了电子货币设计中的可追踪性和可审计性问题的,这个和反洗钱之类的政策考虑是有关的。