在媒体的描述中,加密货币经常自带「匿名」属性,但另外一些文章指出,加密货币交易活动能够被轻易追踪到,甚至比法币交易更容易被追踪。这两种说法要达成一致,重要的是要了解到:加密货币的隐私保护具体是指什么?
这个问题要回答起来可没有看上去那么容易,因为「隐私保护」在区块链世界中也有很多层面的意思。
要成为一名深谙区块链技术的开发者、一名投资人或者加密货币的参与者,理解加密体系中「隐私保护」真正意味着什么,至关重要。我们撰写此文,分享自己在这方面的一些心得与技巧。
想象一下,Alice 开通一个 Venmo 账号 美国一款小额支付手机应用,目前已被 Paypal 收购,她需要提供并验证其真实姓名。因为 Venmo 公司知道了她的真实姓名,且有可能会与其他人分享这一信息, Alice 损失了其身份的部分隐私。如果 Bob 通过 Venmo 给 Alice 转账 20 美元,并在她的信息流里分享了这一交易,那么 Alice 的交易信息已是公开化,但她个人账上迄今为止有多少钱,只有 Venmo 知道,别人并不知道。如果假设 Alice 创建一个比特币地址,要求 Bob 给她转账价值 20 美元的比特币。相比 Venmo 交易,Alice 在个人真实身份方面获得了一定的隐私保护,因为她的比特币地址并不与她的真实姓名相关联。不过,事实上比特币从 Bob 的地址转到 Alice 的地址,以及 Alice 收到比特币转账后的比特币总数额,对于比特币区块链中的所有人都是透明信息。
所以,我们可以了解到,使用了比特币,Alice 在某些方面取得了隐私保护,但在另外一些方面又失去了隐私。
当使,用不同的加密货币进行交易时,这种情况司空见惯。
在加密货币世界中,我们认为隐私保护主要包含三个层面的内容:
- 利用加密货币进行某种操作的用户的身份信息
- 用户相应操作中的具体交易数据
- 集合所有交易信息的区块链整体状态
区块链协议可以采用密码学方式,使得局外人不可能 或者极为困难 知晓或者计算推演出上述每个环节中的不同部分。与此同时,想要挖掘区块链特性的攻击者能综合不同信息碎片,来猜测出甚至直接总结出他们想要的信息。隐私保护的手段就变成通过协议设计、在具体属性领域给潜在攻击者暴露尽可能少的信息。
重要的是,关于某个具体属性是否属于隐私保护范畴,不是那么黑白分明的。譬如,它对某些外部观察者已是透明信息,但其他外部人不清楚,或者外部观察者也许机缘巧合能猜到,但不是一定能猜到。这种不明确之处意味着譬如「XX 币能确保隐私」、或者「A 币比 B 币的隐私保护做得更好」之类的简单陈述常常无法成立。且有时措辞不谨慎,这类说法会造成混淆和误解,因此有人精心编排这样的说法用来误导他人。
我们推荐更仔细的表述,譬如「门罗币的交易额是被作为隐私受保护的」、甚至「由于 ZCash 币的某种匿名性设定,发送方的地址是作为隐私被保护的」。
在这篇文章的后面,我们还会讨论到:某些情况下,例如零知识证明这样的密码学工具能帮助我们对此类说法进行量化分析,甚至提供严格证据。
首先,让我们先从与加密货币相关的隐私保护开始谈起。
身份信息隐私,即匿名性
人们听到隐私一词时,最先出现在脑海中的往往是匿名性,这意味着用户的行为与他们在真实世界的身份信息不扯上任何关联。
一种实现这种隐私保护的途径是很容易实现的「假名」方式;实际上我们在接受各种网络服务时已经习惯于使用假名,譬如注册邮箱名 bitcoinlover2008@gmail.com,而不是使用真实姓名。在这种情况下,在这种网络协议中的大多数互动中,bitcoinlover2008@gmail.com 主人的真实 / 合法姓名 假设叫 Alice Jones 不会暴露出来。
在多数加密货币体系中,譬如比特币,用户得到一对公钥 / 私钥签名,公钥类似于用户名,私钥类似于密码。关键是,只有在某个人知道你准确的私钥 不管是合法取得还是非法窃取,才能制造出由你「签字」的信息,在这个意义上,任何人可以 用你的公钥 查看拥有私钥的人发送的信息。这一特质可以让用户用其掌握的几个公钥 或地址 中的一个接收比特币这样的加密货币,用自己的私钥来发送加密货币,这一切都没有中心化权威的干预。这些理念组成了现代数学密码学的基石。不过,拥有一对私钥 / 公钥只是一种在去中心化环境中「使用假名」掩饰真实身份的一种办法。
「使用假名」通常是加密货币背后协议中天然的属性,让媒体和大众误认为所有的加密货币都是「匿名的」,或者至少比仅仅使用假名有更强的匿名性。一点都不奇怪,这种误解推动用户利用加密货币进行一些不法行为,譬如线上赌博、或者暗网交易。然而,真实的隐私保护水平可能让这些用户大失所望。他们确实可以利用公开地址发送或接收比特币,在交易中不涉及其真实姓名,但用户的某些行为可以将公开地址与他们在现实世界的真实身份扯上关系。
首先,多数用户在交易所中先是用法币买进比特币。法币交易通常需要与现行的银行系统发生关联,后者是需要验证现实世界的真实身份的。因为比特币中的所有交易数据是完全公开的 上一节中讲过,这意味着所有人都可以看到交易所数据库,将具体地址与现实世界的真实身份联系起来。举个例子来说明:如果 Alice 从 Coinbase 提取了 0.1 个比特币到她控制的一个地址,譬如 36n452uGq1x4mK7bfyZR8wgE47AnBb2pzi,然后 Coinbase 就会把她的真实姓名与这个地址挂钩 。如果她从一个线上非法体育博彩网站提取 0.2 个比特币,外部观察者就可能推断出,并可以提供不可篡改的公开证据证明, Alice 参与非法线上赌博活动。
Chainalysis 等公司已经采用了此类被称为区块链分析的技术,将公开地址与背后拥有者的身份挂起钩来,并分析交易走向。
图为 2009 -2012 年区块链分析的一个早期案例;数据来源:https://doi.org/10.3390/fi8010007
其次,进行加密货币交易需要通过互联网发送一些信息。在某些情况下,互动的元数据能被用来追踪用户发起这些交易时使用的 IP 地址,即使用户使用了类似「洋葱 Tor」这类所谓安全浏览器,也有可能被追踪 IP 地址。
上述这两个原因综合在一起,意味着单凭加密货币「使用假名」的特质而利用元数据进行匿名交易近似是「不可能完成的任务」。
交易数据的隐私保护
当人们谈论所谓「隐私币」时,通常指的是这些币种的交易在某些方面具有隐私保护。
宽泛而言,交易是一名用户采取的修改这条区块链状态的行动。譬如,Alice 从她控制的一个地址向 Bob 控制的一个地址发送了 X 个代币。从上帝视角来观察,这个极为简单的例子也包含了多重数据:
- Alice 的一个地址,譬如 36n452uGq1x4mK7bfyZR8wgE47AnBb2pzi
- Alice 与 Bob 地址的链接
- Bob 的一个地址
- 代币发送的数目
更为复杂的交易会包含其它类型信息,譬如以太坊中的智能合约代码。 不同的区块链以不同的方式展示交易数据,其中一些允许某些环节是第三方无法看到的,第三方只能看到区块链原始数据。所以我们本节命名为「交易数据的隐私保护」,而不是「交易的隐私保护」,因为不同类型的交易数据能在不同的程度上得到相应的隐私保护。
能得到隐私保护的数据中,最重要的是 Alice 和 Bob 的地址。如果它们得到隐私保护,就无从识别交易的发送者和接受者的真实身份,就会阻挠前文提到的那种区块链分析技术。
譬如,如果 Alice 从交易所币安购买了具有这种技术特性的门罗币,并提取了该币,币安就无法将这一提取动作与 Alice 之后如何处置这些门罗币关联起来。同样的,如果 Bob 从 Alice 那里收到门罗币,他也无法知道 Alice 是从币安购买的这些门罗币。
但让问题更为复杂的是,交易数据是否有隐秘性不是非黑即白的问题。 譬如以 Alice 的地址为例,这可以由匿名集 anonymity set 大小来衡量,匿名集是指根据区块链数据可以辨识出的交易发送方地址的最小集合。匿名集越大,区块链交易数据中关于发送者的信息就越少。譬如比特币的匿名集大小为 1,而门罗币的匿名集就要大得多。
状态隐秘性
在比特币区块链中,所有交易数据都是公开的,意味着一位看到区块链中所有的区块外部观察者可以复原账本、查明这些地址的账户金额 尽管这些金额可能被分配进不同的「未使用交易输出 UTXO」,即我们所说的区块链整体状态。不过,如果交易的某些部分是隐秘的,即便掌握了整个区块链的信息,也不会让用户知道整体状态。这些信息是在不同的用户间分享的,区块链保障用户信息间的一致性。
尽管用户知晓区块链状态中的某一特别属性只取决于协议,取决于其了解的触发这种状态形成的交易信息,但是两者之间的联系会触发复杂的互动。因此,状态的不同特质可以在某种程度受到隐私保护。
以下是几个例子:
- 所有地址列表
- 某一具体地址的账户余额,譬如 0x2569C92345013F55CFb47C633c57F2f5756B9acA 有 1 个 ETH
- 某个特定地址上的智能合约代码,譬如 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d 地址上的加密猫合约
- 合约的具体状态,譬如加密猫合约存储的数据
举个简单的推演例子:ZCoin 每笔交易的数量是公开的,但发送者和接受者的地址是隐秘的,意味着用户账户余额依然是隐秘信息。另一方面,在隐私保护区块链格式 Mimblewimble 中,每个交易的具体数额是隐秘的,但发送者和接受者是公开的,这提供了保护用户账户余额隐私的另一种途径。Mimblewimble 中的用户必须保存好自己账户余额的信息,因为该区块链只存储用以保障用户不会超支的有限信息。
在多数情况下,交易中加入更多的隐私保护措施,对用户个体而言是有益的,但对区块链整体状态未必是好事。譬如,如果某种加密货币的总发行数量是隐私的,用户无法判断该区块链协议中的总供应时间表等具体属性;此外,很难发现攻击者利用算法漏洞或者协议后门进行非授权铸币。
部分现有区块链协议中的隐私保护特质
不同的隐私保护方式
我们到目前为止主要关注特定信息是否是公开的或者是隐秘的。此外,梳理一下不同区块链所采用技术的隐私保护方式也是有所裨益的。我们粗粗梳理了这些不同的隐私保护方式。
「第二层」协议
建立在区块链底层技术之上的「第二层」协议,譬如闪电网络、状态通道技术或者 Plasma 让小部分用户彼此间进行「链下」交易。这意味着所有中途状态存储在这些用户间,主区块链上只会定期写入状态变化。因此中途状态对外部观察者而言是隐形的,因为它们从未写入主区块链。当然第二层协议本身也能有 也可以选择没有 面向所有用户而对链下状态进行不同层级的隐私保护,所以这更多是由设计理念而不是隐私保护技术决定的事情。因此我们不会进一步重点关注第二层协议,虽然在感兴趣的读者眼中,里面可以挖掘的内容浩如烟海。
关于「第二层」协议相关发展的具体详情,推荐参看链闻之前发表的文章:「以太坊不再是唯一选择,第二层项目面临新生态抢亲大战」
混合方式
混合方式是在交易的输入和输出采取不同的隐私保护策略,将其融合成一个大的交易,故意把发送者和接受者的地址联系变得模糊。这包括了加密世界中部分最古老的隐私保护策略,譬如 tumblers、CoinJoin、Mimblewimble 和门罗币等。
零知识证明
当协议用户提供零知识证明,就有了零知识证明基础上的隐私保护,譬如,在不显示某消息本身的基础上展示知晓该消息。当应用正确时,这种加密技术可以同时保障交易 / 状态的隐私,以及区块链功能完备。
关于「零知识证明」相关知识,推荐参看链闻之前发表的文章:「一个数独引发的惨案:什么是零知识证明 Zero-Knowledge Proof」
用户的最佳实践
即便是使用那些不附加任何隐私保护功能的加密货币,用户也有办法在一定程度上抵御网络安全威胁和区块链分析技术。为了抵御恶意者利用网络元数据对用户进行匿名攻击,用户可以使用 Tor 或者 I2P 来掩盖其交易的原始 IP。为了抵御区块链分析,一般建议用户为收到的每笔款项更换一个新地址。门罗和 Verge 等加密货币提供了这种功能,作为一个原生选项,当然,在部分加密货币中,这些地址依然能与用户之后的操作关联起来。
可信执行环境 TEE
可信执行环境是一个处理器,譬如英特尔 SGX,其宣称能用密码技术保护上面运行数据和代码的健全性和机密性。包括 Ekiden 由宋晓冬教授领军的 Oasis Labs 将其商业化运作 在内的几个协议宣称将采用可信执行环境。譬如,用户账户余额可以被私钥加密,存储在可信执行环境中,它们只能在「可信执行环境」中解密和修改。这其实是把确保隐私保护的责任交给了可信执行环境,而可信执行环境本身可能也有其弱点。譬如侧链攻击或许能破解出私钥,英特尔 SGX 稍早爆出了此类漏洞,另外,现有的可信执行环境可能需要制造商的许可,或者允许制造商破解数据机密性,当然,Keystone 和 Gradient 等替代方案试图解决这一问题。
关于宋晓冬教授创立的基于基于可信执行环境的区块链项目 Oasis Labs 的具体发展,推荐参看链闻之前报道:「揭秘 Oasis Labs:顶级基金站台、号称超越以太坊,它究竟凭什么?」
总之,当考虑加密货币的隐私保护时,不要使用「我们的币比他们的币更具隐秘性」等含混不清的表述。我们建议尽量去搞清楚以下问题:有关世界的 哪些 状态信息 何时 受到 何种程度的 隐私保护?对 哪些 人保密?这可以让我们更具针对性分析隐私保护技术以及它们进行的交易。