干货:使用加密货币就可以为所欲为?
本文首发于公众号Unitimes(ID:Uni-times)原文作者:Yi Sun,Yan Zhang;原文译者:Hulin
在很多媒体文章中,通常将加密货币描述成具有匿名属性,然而在其他文章中却又说成加密货币要比法币(如美元)更容易被追踪。那实际情况究竟如何呢?首先我们需要理解的是: 加密货币的隐私性意味着什么?
这个问题并不像表面上那么容易回答,因为在区块链领域中,隐私可以意味着很多不同的东西。要成为更加知情的开发者、投资者或加密货币的参与者,了解隐私在加密经济系统中的实际含义是非常重要的。
假设Alice想要开设一个Venmo帐户(PayPal旗下的一个支付服务,让用户可以在手机或网页上通过该平台转账给他人),这需要她提供并验证她的真实身份信息,如此一来Venmo平台掌握了她的真实身份信息并且可能与其他人共享这些信息。
假设Bob通过Venmo平台向Alice转账$20,并将此信息在该平台的Feed版块上分享出来(注:用户使用Venmo平台进行转账时,可以设置成叫该笔转账信息公布出来,包括转账时间和原因、双方的姓名等,但具体金额不会显示),这就意味着这笔交易信息是公开的了,尽管Alice的账户余额信息只有Venmo平台知道。
相比之下,假设Alice创建了一个比特币账户,并要求Bob向她发送价值$20的BTC,与Venmo相比,此时Alice的身份信息并不会公开,因为她的真实姓名并不会与这个比特币账户联系在一起。
然而,Bob账户向Alice账户发送了BTC这件事情,以及Alice账户还剩多少余额等信息将公开被世界上任何人看到。我们可以看到,通过使用比特币,Alice在某种意义上保护了自己的一些隐私,但在其他方面却失去了一些隐私。
类似这种折衷性(tradeoff)在使用不同的加密货币时都很常见。 在加密货币领域中,我们通过三个方面来探讨其中涉及的折衷情况,即:
-
使用加密货币来完成某种操作的用户的身份信息;
-
用户执行操作所产生的具体交易数据;
-
集合所有交易信息的区块链整体状态。
区块链协议可以通过利用密码学来使任何一个外部的观察者无法知晓或计算出以上这三个方面中的任何信息(从理论上来说是非常困难的)。但同时,攻击者如果想要发现区块链的某个属性,可以通过组合不同的信息,来推断或猜测出他们想要知道的信息。
为了保护隐私,区块链协议的设计需要尽可能少地向潜在攻击者显露出有关特定属性的信息。
重要的是, 某个特定属性(attribute)是否属于隐私保护范畴,这并不是非黑即白的 。比如,某个属性对于一些观察者来说是可知的,但对于另一些观察者却不可知,或者观察者可能在一定概率上可以猜测出某个属性,但无法完全确定。
这种隐晦性意味着诸如“我最喜欢的币能够保护隐私”和“我最喜欢的币要比你最喜欢的币更加能保护隐私”这样的言论通常都是站不住脚的。相比之下,“门罗币(XMR)中的交易金额是隐秘的”,甚至“ZCash的匿名性保护了发送者账户的隐私”这样的言论会更说得通。
正如下文将提到, 在某些加密工具(如零知识证明)能够帮助我们量化这些言论,甚至为这些言论提供严格的证明。 我们现在一起来研究一下与加密货币相关的隐私保护的各个方面。
身份信息的隐秘性(匿名性)
当我们听到“隐私”一词时,会想要的一件事情就是匿名(anonymity),即用户的行为不会联系到他们在现实世界中的真实身份。 一种隐私保护的方式就是使用假名,这是很容易实现的。
实际上,我们早已通过使用诸如[email protected]这样的假名在互联网上与他人进行交互,而不是使用自己真实的姓名。在这种情况下,[email protected]的真实身份(假设是Alice Jones)是不会出现在与协议中的其他人进行交互的过程中的。
在大多数加密货币(如比特币)中,用户被给予公钥/私钥签名对,其中公钥就相当于用户名,而私钥就类似于密码。其中的重要属性在于, 只有知道正确的私钥(不管是合法获得还是通过盗窃获得)的人才能解密那条经过你“签名”的消息。这就意味着,任何拥有公钥的人都可以通过私钥来查看这些消息是来自于哪个人。
这种特性允许用户通过自己的一个公钥或账户接收加密货币,也可以通过使用私钥来发送加密货币,所有这些过程都无需中心化机构的介入。这些概念构成了现代数学密码学的基石。然而, 拥有私钥/公钥对仅仅只是我们在去中心化环境中用来实现使用假名的方式。
假名通常是加密货币协议中固有的属性,这给各媒体和公众产生一种错误的印象,认为所有加密货币都是匿名性的,或者至少比使用假名更加具有匿名性。不足为奇 ,这种误解使得很多用户将加密货币用于各种非法目的 ,如网络赌博或在暗网进行交易等等。然而,这些用户或许将对他们实际获得的匿名性程度非常失望。
尽管用户确实是通过使用公钥地址发送或接受加密货币,也就是说在交易过程中并没有使用真实的姓名,但用户执行的某些操作可以通过其他方式来将他们的公开账户与真实身份联系起来。
首先,大多数用户通过在交易所使用法币来购买加密货币(如比特币)。 使用法币进行交易往往需要与常规的银行系统进行交互,因此可以证明用户的真实身份。因为所有比特币的交易数据是完全公开的(在下文中将进一步阐释这一点),这就使得能够访问该交易所数据库的人可以将账户地址与真实姓名联系起来。
比如,假设Alice从Coinbase中取出0.1个BTC并将之存放在自己的账户中,这样Coinbase就可以将Alice的真实姓名与该地址联系起来。如果接下来Alice将自己账户中的比特币发送给一个涉嫌参与网络体育赌博的账户中,如此一来,外部观察者就能够推断出(并提供不可篡改的公开证据),Alice正在参与非法赌博活动。
诸如此类的技术称为区块链分析(blockchain analysis) ,且有些公司(如Chainalysis)已经在使用这种技术来按所有权对公钥进行聚类,从而将公钥与真实身份联系起来,并分析交易资金流动。
其次,进行加密货币交易需要通过互联网来发送一些信息。 在某些情况下,可以通过交易过程中的交互元数据(metadata)来追踪发起交易的用户的IP地址,即便该用户使用诸如Tor这样的匿名化服务。
将以上这两个原因结合起来,使得想要通过加密货币的假名属性来进行真正的匿名交易并非易事。
交易数据的隐秘性
当我们谈论隐秘的加密货币(private cryptocurrencies)时,想表达的意思通常是 交易的某些方面是隐秘的。大致来说,用户执行的交易操作可以更改区块链的状态。
例如,Alice可以从自己的账户中将X个币发送到Bob的账户中。但即便是这个看似很简单的一个例子也包含了一些数据:
-
Alice的账户地址:假设该账户是36n452uGq1x4mK7bfyZR8wgE47AnBb2pzi
-
Alice和Bob账户之间的联系
-
Bob的账户地址
-
交易的金额
更加复杂的交易可能会包含其他类型的信息,比如以太坊中的智能合约代码。 不同的区块链会以不同的方式来表征所有这些交易数据,其中有些区块链的表征方式是只允许第三方观察者看到区块链上的原始数据(raw data)。不同类型的交易数据在隐私保护的程度上可能是不同的。
能够实现隐秘化的最重要的数据就是Alice和Bob的账户地址。 如果账户地址是隐秘的,则无法通过交易本身来识别出交易的发起者和接收者,这有助于阻碍上文中提到的区块链分析。
比如,如果Alice从币安交易所购买了门罗币(XMR,一种能够隐秘交易中的账户地址的加密货币)并将之取出,则币安将无法在此基础上将之与Alice使用这些XMR进行的其他交易联系起来。相反地,如果Bob从Alice那里收到了XMR,他将无法知晓这些XMR是Alice从币安那里购买的。
但更复杂的是, 某条交易数据是否是隐秘的并不是绝对的。 在Alice的例子中,她的账户地址可以通过匿名集的大小来进行衡量,匿名集(anonymity set)是指仅根据区块链数据就可以辨识出的交易发送方地址的最小集合。
匿名集越大,则在区块链数据中,有关交易发起者的信息就越少。 比如,在比特币中,即便是最简单的交易类型的匿名集的大小为1,因为发送者的地址也包含在交易中,而门罗币可以提供一个更大的匿名集。
状态的隐秘性
在比特币区块链中,所有的交易数据都是公开的,这就意味着一个能够看到比特币链中所有区块的外部观察者能够重新构建有关所有账户的余额的账本 (尽管这些余额也许会被分配进不同的UTXO(未使用交易输出)中), 即我们所说的区块链整体状态。
但是, 如果交易的某些部分是隐秘的,则即便掌握了整个区块链的信息,用户也无法知道该区块链的整体状态 ,因为这些信息会在不同的用户之间共享,且区块链会保证用户信息的一致性。
尽管用户能否了解区块链状态的某一特定属性,取决于该区块链的协议,以及该用户对触发该状态的交易的了解,但这两者之间的联系可能引发复杂的互动。因此, 区块链状态的不同属性的隐秘性程度可能是不同的 ,其中一些属性包括:
-
所有地址列表;
-
某个特定账户的余额,比如账户0x2569C92345013F55CFb47C633c57F2f5756B9acA 中有1个ETH;
-
某个特定账户的智能合约代码,比如账户0x06012c8cf97BEaD5deAe237070F9587f8E7A266d 中的CryptoKitties合约代码;
-
合约的具体状态,如CryptoKitties合约中存储的数据。
举个简单的例子:ZCoin(小零币)中的每笔交易的金额都是公开的,但发送者和接受者的地址是隐秘的,这意味着用户的账户余额依然是隐秘的。
另一方面,在Mimblewimble协议(一种区块链格式和协议)中,每笔交易中涉及的具体金额是隐秘的,但发送者和接收者的地址是公开的,这是保护用户账户余额隐私的另一种方式。Mimblewimble协议中的用户必须自行存储余额,因为区块链只会存储有限的信息来确保用户花费的金额不会超过其真正拥有的金额。
在多数情况下,交易中加入更多的隐私保护措施,对用户个体而言是有益的,但对区块链整体状态未必是好事 。比如,如果某种加密货币的总发行数量是隐秘的,那用户将无法判断该区块链协议中的加密货币总供应时间表等具体属性,而且也很难侦测出一个想要利用协议中的加密漏洞或后面来进行非授权铸币的攻击行为。
部分现有区块链协议中的隐私保护特征
保护隐私的不同方法
到目前为止,我们主要关注的是特定的信息是公开的还是隐秘的。同时,也有必要整理一下用于保护隐私所采用的技术方法。我将粗略地概述一下这些方法,在后期的文章中,再细致地讨论那些混合或基于零知识的方法。
-
建立在区块链底层之上的第二层协议,如闪电网络、状态通道或Plasma,允许小部分用户之间在“链下”进行交易。 这意味着所有中间状态(intermediate state)将存储在这些用户之间,主区块链只会定期地写入这些状态变化。其结果是,外部观察者是看不到这些中间状态的,因为这些中间状态根本不会出现在主区块链之上。 当然,在链下状态方面,第二层协议本身可能对参与者具有(或者选择没有)不同程度的隐私保护,因此这更多的是设计理念而非隐私保护技术的问题。 因此,我们将不再进一步探讨第二层协议,但感兴趣的读者可以找到非常多的相关文章来阅读。
-
混合的方法,即通过将不同交易的输入和输出组合成单笔大交易,从而隐匿这些交易的发送者和接收者的账户之间的联系。 其中包括加密领域中一些最早的隐私保护协议,如tumblers、CoinJoin、Mimblewimble 和门罗币等。
-
基于零知识的隐私保护方法:某个协议的用户通过提供零知识证明(ZKP),即在不揭示信息本身的情况下,证明自己知晓某条信息。 如果使用得当,这种加密技术可以既可以确保交易/状态的隐秘性,也可以保证整个区块链的安全性。
-
用户的最佳操作。即便是使用那些不附加任何隐私保护功能的加密货币,用户也有办法在一定程度上抵御网络安全威胁和区块链分析技术。 为了抵御攻击者利用网络元数据来发现用户的真实身份,用户可以使用Tor或者I2P来掩盖其交易的原始地址。为了抵御区块链分析技术,一般建议用户为收到的每笔款项更换一个新地址。门罗币和 Verge等加密货币提供了这种功能,作为一个原生选项(尽管在有些加密货币中,用户之后的操作依旧能与这些新的地址联系起来)。
-
可信执行环境(TEE):TEE是一个号称能通过使用密码技术来保护在上面的数据和代码的完整性和机密性的处理器(如英特尔SGX)。 有一些协议(如Oasis Labs的商业化协议Ekiden)正在提议使用TEE。比如,账户余额可以使用存储在TEE中的私钥来进行加密,从而确保账户余额只能在TEE中进行解密和修改。这其实是把确保隐私保护的责任交给了TEE。但TEE也有自身的缺陷。比如,通过侧通道攻击(side channel attacks)可以提取出密钥(英特尔SGX已经发生了这样的攻击),而且当前的TEE需要制造商的许可,或允许制造商可以破解数据机密性(当然,Keystone和Gradient等替代方案试图解决这一问题)。
总结
当我们思考加密货币的隐私性时,与其说出“我的币比她的币更加具有隐私性”等言论,我们建议更应该试着回答以下这些问题: 哪些信息何时受到何种程度的隐私保护?对这些信息哪些人保密? 这种思维方式能够使我们更加客观地分析隐私保护技术,以及这些技术包含的折衷之处。