隐私加密货币通过在执行每次交易时掩盖发送方的地址、接收方的地址和交易金额来做到这些隐私保护的功能。为了实现这一点,不同的项目在其协议中实施了多种复杂的加密技术。比如Monero使用Ring Signatures,Stealth Addresses和Ring Confidential Transactions,ZCash使用zk-SNARKs,Dash使用受信任的“masternodes”。
如果我们没有做任何非法的事情,为什么我们需要匿名加密货币,为什么我们需要匿名区块链网络的存在。
公共区块链为我们使用的是”假名“而不是”匿名“,这很重要。为了解释这个概念,我们举一个简单的小例子。当我们说起成龙的时候,我们知道这不是他的本名陈港生,但是所有人都认识成龙,因此当成龙这个名字出现时,我们也会与他本人联系起来。然而,问题在于一旦人们知道了成龙的本名,就会使陈港生与成龙这个假名联系起来,一切成龙以自己本名的名义做的事情也都会被联系起来。相反,如果成龙以随机生成的一个乱码作为ID捐献了一笔钱,然后成龙自己不承认自己是捐款人,则没有人会知道这件事,此时我们认为成龙匿名进行了捐献。
对于美元或者人民币这样的货币来说,一美元就是一美元,它的价值由国际间汇率决定。事实上,对于一种货币,我们希望它是可以自由交换的,或者说具有可替代性。不幸的是,加密货币的公开透明性质可能会影响其可替代性。因为我们可以跟踪特定一笔加密货币相关的所有先前交易,所以人们有可能拒绝接受被盗的或先前用于非法活动的加密货币。在许多情况下,用户和交易所会因为其过去的历史而拒绝一笔加密货币。如果这种情况经常发生,则代表着那些来源“不干净”的货币失去了流动性,因此失去了100%的可替代性。
CoinJoin是一种割裂交易的输入地址和输出地址的关系的技术。CoinJoin 的解决办法,简单来说就是将多笔交易的输入和输出进行混合,让生成的交易无法溯源,从而达到有效的保护交易隐私的目的。问题是,执行混合任务的服务器本身会看到交易的来源和去处。Dash解决这个问题的方案是利masternode,masternode是一系列支撑区块链网络的服务器节点,通过它来进行分散治理。但这并不解决隐私的问题,因为虽然交易不公开,但这些节点还是可以看到交易的信息。在比特币里,目前这个问题的解决方案是blind signature(盲签名)和不同的网络途径。发币者通过使用盲签名可以掩盖住收币者的地址。其次,因为要来回发送信息,需要至少有三个不同的网络途径用来保障匿名性。
在密码学中,环形签名是一种可以由一组用户的任何成员执行的数字签名,而这组成员各自拥有密钥。具有环签名的消息被这组用户中的一个特定用户确认。环形签名的安全属性之一是确定是哪个组成员的密钥来生成的签名在计算上是不可行的。
举一个应用上的例子。Monero默认使用环签名,当用户发起交易时,他的帐户密钥和多个其他帐户公用密钥将使用环签名技术形成一个环状签名组。而外部观察者无法判断签名组中哪些可能的签名者属于发起者的帐户。因此,环形签名确保了交易输出的不可追踪。
环签名掩盖交易中发币方,而环机密方案掩盖交易金额。该技术最初由比特币核心开发人员Gregory Maxwell创建,不久后由Monero实施。
它是通过使用Pederson承诺来实现的。Pederson承诺实质上是对交易进行加密,以便只有交易发起者和接收者才能知道真实的交易金额。同时,其他网络参与者能够证明输入的总和等于输出的总和,从而确保并非凭空产生货币。
f ( a ) + f ( b ) = f ( a + b ) f(a)+f(b)=f(a+b) f(a)+f(b)=f(a+b)
这种加密使得除了交易的发起者和接收者没有人可以得知a和b的具体数值。
另外一个重要的机制是”范围证明”(range proof),这项技术可以防止有人提交了负值的交易金额。范围证明在加密学上保证了交易中的金额是大于零并小于特定的数字,以保护Monero的发行量。例如恶意方可以在原本总和为100的交易集里发出150和-50的两笔交易,然后将150那笔的收币方设置为自己,从而凭空印刷出原本没有的币。
值得一提的是,Monero的CT代码原本基于Maxwell的设计,随后Monero采用了Findora首席研究家Benedikt Bunz研发的Bulletproofs,大大减小了范围证明所需的计算空间和时间,也减少了交易费用。
重组区块链交易并将整个交易直接合并这个方式是由MimbleWimble区块链协议首次提出的。这个方法利用数字签名可以合并的属性。使用此系统挖的区块包括一个大的汇总交易,其中详细金额被完全混淆,不能被外界看到。任何试图从历史上分析这样的区块链都只能观察到组成每个区块的大型聚合交易,这为发送者和接收者提供了合理的隐私性。
zk是零知识(zero knowledge)的缩写,SNARK是简洁非交互式知识论证(Succinct Non-interactive Argument of Knowledge)的缩写。简单来说,SNARK是一个证明计算正确的论证,但相比较遵守正常步骤的论证来讲,占用的空间更少,并且验证的速度也更快,这就是为什么它是“简洁”的。
SNARK本身是不在意隐私性的,但是可以嵌入隐私的功能从而达到零知识的目的,这样的话不但加快了验证区块链正确性的速度,并同时达到了零知识证明的效果。
在区块链中使用zk-SNARK是由Zerocash首先提出的一种零知识证明技术,也是相比较以上的工具来讲隐私性最强的。所有的数据,包括发送方、接收方、资产类别和数量都不会在证明的过程中泄露。交易数据的掩盖是通过构建运算电路来实现的,该运算电路可以通过第三方有效地验证,而无需查看交易数据。这些电路(论证)是此系统里零知识交易的有效载荷。交易数据的所有部分都是匿名的,这意味着完全被zk-SNARK保护的的不同的交易是无法区分开来的。我们可以在对每一笔交易细节并不知情的情况下,验证每一笔交易的有效性。这是别的隐私技术做不到的。
传统的zk-SNARK是较低效的,再加上算法所需的数学比较复杂,并且需要使用不太常见的原生数据类型。在Zcash在创建zk-SNARK的时候,必须获取交易信息并将其“编译”到算术电路中,这需要数万行代码并进行大量的计算。在此之外,代码本身还需要大量的专业知识来进行审核。传统的zk-SNARK在安全上最关键的限制是可信设置(trusted setup)。这个阶段生成的一个数据若落到了恶意参与者手里的话,他可以在不影响现有交易的情况下伪造加密货币。
但也正是由于zk-SNARK的复杂证明量很大,对性能要求较高,消耗大量存储和带宽,也催生了更加简洁且可有效验证的零知识证明技术。Findora所部署的zk-SNARK叫做Supersonic,相比较Zcash所部署的Groth16算法更加安全,因为它直接跳过了可信设置这一步。并且,相比较其他无可信设置的算法,Supersonic的验证数据不但空间大小仅为10KB,评估证明和验证时间都达到了对数大小的效率,相比较其他无可信设置的算法最适合现实生活中的计算环境。
然而区块链系统中的隐私工具日新月异,不断更迭。在这个技术快速进步的时段,每个人会根据自己的需求来选择适合自己的工具。但如果纯粹从保护隐私的角度来分析的话,零知识证明所赋能的简洁非交互式知识证明相比于其他采用混淆加密信息的加密工具拥有绝对优势。SNARK充分发挥了离散对数问题的原理,不像其他加密方法采取混淆加密信息的工具,而是完全掩盖住交易的所有信息,并且允许第三方进行验证,在保障超高隐私保护性的同时将来自各种途径的安全风险降到最低。
[1]https://mp.weixin.qq.com/s/pbcz90ZUwSfFWlfJYvxz9Q