自2008年区块链以比特币的面貌问世后,它便被视为Web 3.0,并被期许能够进一步为人类带来金融与治理上的大跃进。区块链或许会成为如同全球资讯网一般的基础建设,如果我们已经开始注重个人于网络上的隐私,那么我们更应该关心这项全新的技术是否能更好地保护它。

笔者将于本文中阐述隐私的重要性,接着进一步分析区块链是否能够保护用户隐私,最后再简介一个知名的匿名技术— 洋葱路由,并列举几个其用于改进区块链(特别是以太坊)的相关提案。

隐私的重要

互联网(Internet)无疑是20世纪末最伟大的发明,它催生了全新的商业模式,也使得资讯能以位元的形式进行光速传播,更使人类得以进行前所未有的大规模协作。而自从1990年全球资讯网(World Wide Web)的问世以来,网络已和现代文明生活密不可分。经过近30年的发展,人类在网络上制造了巨量的资料,这些资料会揭露使用者的隐私。透过一个人的资料,企业或者政府能够比你自己更了解你。这促使用户对隐私的愈发重视—正如同你不会允许第三者监听你的电话,你也不希望有第三者监看你的浏览器搜寻历史。

我不在乎隐私权,因为我没什么好隐瞒的。

不过持有这类论点的人通常会被下面的说法反驳:

既然没什么好隐瞒的,那请把你的Email 帐号密码给我,让我揭露其中我认为有趣的部分。

大多数正常人应该都不会接受这个提议。

隐私应当与言论自由一样,是公民的基本权利。事实上,隐私是一个既广且深的题目,它涉及了心理学、社会学、伦理学、人类学、资讯科学、密码学等领域。

隐私与区块链

有了互联网后,接下来人类或许可以透过区块链来建构出一个免除人性且完全仰赖自然法则(数学)运行的去中心化系统。在中心化世界中,我们需要免于政府监控的隐私;在去中心化世界中,我们仍然需要隐私以享有真正的平等。

正如同本文的前言所述:区块链也许会成为如同全球资讯网一般的基础建设,如果我们已经开始注重网络隐私,那么我们更应该关心区块链是否能更好地保护它。

隐私与匿名

Privacy vs Anonymity [5]

当我们论及隐私时,我们通常是指广义的隐私:别人不知道你是谁,也不知道你在做什么。事实上,隐私包含两个概念:狭义的隐私(Privacy)与匿名(Anonymity)。狭义的隐私就是:别人知道你是谁,但不知道你在做什么;匿名则是:别人知道你在做什么,但不知道你是谁。

隐私与匿名对于隐私权来说都很重要,也可以透过不同的方法达成,接下来本文将聚焦于匿名的讨论。另外,笔者在接下来的文章中所提及的隐私,指的皆是狭义的隐私。

网络的匿名

以当今的网络架构(TCP/IP协定组)来说,匿名就是请求端(Requester)向响应端(Responder)请求资源时藏匿其本身的IP位址—响应端知道请求端在做什么(索取的资源),但不知道是谁(IP位置)在做。

ISP是网络基础建设的部署者与营运者,理论上它能知道关于你在使用网络的所有资讯,只是这些资讯被法律保护起来,并透过公权力保证:政府只在必要时能够取得这些资讯。万一政府本身就是资讯的监控者呢因此,我们需要有在ISP能窥知一切的情形下仍能维持匿名的方法。

区块链能保护隐私、维持匿名吗

区块链除了其本身运作的上层应用协定之外,还包含了下层网络协定。因此,这个问题可以分为应用层与网络层两个部分来看。

应用层

应用层负责实作状态机复制(State Machine Replication),每个节点收到由共识背书的交易后,便可将交易内容作为转换函数(Transition Function)于本机执行状态转换(State Transition)。

区块链上的交易内容与状态是应当被保护的隐私,一个保护隐私的直觉是:将所有的交易(Transaction)与状态(State)加密。然而实际上,几乎目前所有的主流区块链,包含以太坊,其链上的交易及状态皆为未加密的明文,用户不仅可以查询任一地址的交易历史,还能知道任一地址呼叫某智能合约的次数与参数。也就是说,当今主流区块链并未保护隐私。

虽然区块链上的交易使用假名(Pseudonym),即地址(Address),但由于所有交易及状态皆为明文,因此任何人都可以对所有假名进行分析并建构出用户轮廓(User Profile)。更有研究[6]指出有些方法可以解析出假名与IP的映射关系(详见下个段落),一旦IP与假名产生关联,则用户的每个行为都如同摊在阳光下一般赤裸。

区块链的隐私问题很早便引起研究员的重视,因此目前已有诸多提供隐私保护的区块链被提出,例如运用零知识证明(Zero-knowledge Proof)的Zcash、运用环签章(Ring Signature )的Monero、运用同态加密(Homomorphic Encryption)的MimbleWimble等等。

网络层

节点于应用层产生的共识讯息或交易讯息需透过网络层广播(Broadcast)到其他节点。由于当今的主流区块链节点皆未采取使网络维持匿名的技术,例如代理(Proxy)、虚拟私人网络(Virtual Private Network, VPN)或下文即将介绍的洋葱路由(Onion Routing),因此区块链无法使用户维持匿名—因为对收到讯息的节点来说,它既知道广播节点在做什么(收到的讯息),也知道广播节点是谁(讯息的IP位置)。

一个常见的问题是:使用假名难道不是匿名吗若能找到该假名与特定IP的映射关系的话就不是。一般来说,要找到与某假名对应的IP相当困难,几可说是大海捞针,但是至少在下列两种情况下可以找到对应关系:1.该假名的用户自愿揭露真实IP,例如在社群网站公开以太坊地址;2.区块链网络遭受去匿名化攻击(Deanonymization Attack)[6]。

泄漏假名与IP的关联会有什么问题除了该IP的真实身份可能被揭露外,该区块链节点亦可能遭受流量分析(Traffic Analysis)、服务阻断(Denial of Service)或者审查(Censorship),可以说是有百害而无一利。

区块链如何维持匿名

其实上文已给出了能让区块链维持匿名的线索:现有匿名技术的应用。我们先来进一步理解区块链网络层与深入探讨互联网协定的运作原理。

区块链网络层的运作原理

P2P Overlay Network [7]

区块链是一个对等网络(Peer-to-peer, P2P),而对等网络是一种覆盖网络(Overlay Network),需建构于实体网络(Physical Network)之上。

覆盖网络有两种常见的通讯模式:一种是基于中继的(Relay-based)通讯,在此通讯模式下的讯息皆有明确的接收端,因而节点会将不属于自己的讯息中继( Relay)给下一个可能是接收端的节点,分散式杂凑表(Distributed Hash Table, DHT)就是一种基于中继的对等网络;另一种是基于广播的(Broadcast-based)通讯,在此通讯模式下的讯息会被广播给所有节点,节点会接收所有讯息,并且再度广播至其他节点,直到网络中所有节点都收到该讯息,区块链网络层就是一种基于广播的对等网络。

覆盖网络旨在将实体网络的通讯模式抽象化并于其上组成另一个拓墣(Topology)与路由机制(Routing Mechanism)。然而实际上,实体网络的通讯仍需遵循TCP/IP 协定组的规范。那么,实体网络又是如何运作的呢

互联网的运作原理

OSI Model vs TCP/IP Model

实体网络即是互联网,它的发明可以追朔至Robert Kahn和Vinton Cerf于1974年共同发表的原型[12],该原型经过数年的迭代后演变成我们当今使用的TCP/IP协定组[8]。全球资讯网(WWW)的发明更进一步驱使各国的ISP建立基于TCP/IP协定组的网络基础建设。互联网在多个国家经过近30年的部署后逐渐发展成今日的规模,成为逻辑上全球最巨大的单一网络。

1984年,国际标准化组织(ISO)也发表了OSI概念模型[9],虽然较TCP/IP协定组晚了10年,但是OSI模型为日后可能出现的新协定提供了良好的理论框架,并且与TCP/IP协定组四层协定之间有映射关系,能够很好地描述既存的TCP/IP协定组。

TCP/IP 协定组的各层各有不同的协定,且各层之间的运作细节是抽象的,究竟这样一个庞大复杂的系统是如何运作的呢

Packet Traveling [10][11]

事实上,封包的传送正如同寄送包裹,每个包裹上的收件地址也如同IP位置,是全球唯一的位置识别。包裹的收件地址中除了包含收件者的所在城市、街道,还包含了门号,每个门号后都住着不同的收件者。门号正如同封包中后缀于IP的连接埠(Port),而住在不同门号的收件者也如同使用不同连接埠的应用程式(Application),分别在等待属于他们的包裹。实际上,特定的连接埠会被分配给特定的应用程式,例如Email使用连接埠25、HTTPS使用连接埠443等等。

虽然包裹的最终目的地是收件地址,但包裹在运送途中也会有数个短程目的地—也就是各地的物流中心。包裹在各个物流中心之间移动,例如从北部物流中心到基隆港,再从基隆港到洛杉矶港,虽然其短程目的地会不断改变,但其最终目的地会保持不变。

封包的最终目的地称为端点(End),短程目的地称为转跳(Hop)—也就是路由器(Router)。路由器能将封包从一个网段送至另一个网段,直到封包抵达其端点IP所在的网段为止。封包使用两种定址方法:以IP表示端点的位置,而以MAC表示路由器的位置。这种从转跳至转跳(From Hop to Hop)的通讯是属于TCP/IP协定组第一层:网络存取层(Network Access Layer)的协定。

那么要如何决定包裹的下一个短程目的地呢理论上,每个物流中心皆需选择与最终目的地物理距离最短的物流中心作为下一个短期目的地。例如对寄到旧金山的包裹来说,位于基隆港的包裹下一站应该是洛杉矶港,而不是上海港。

封包则使用路由器中的路由表(Routing Table)来决定下一个转跳位置,有数种不同的路由协定,例如RIP / IGRP等,可以进行路由表的更新。从端点到端点(From End to End)的通讯正是属于TCP/IP协定组第二层:网际层(Internet Layer)的协定。

若一箱书需要分多次寄送,则可以采取不同的寄送策略。至于选择何种寄送策略,则端看包裹内容物的属性:

求稳定的策略:每个包裹都会有个序号,寄包裹前要先写一封信通知收件者,收件者于收到信后需回信确认,寄件者收到确认信后“再”写一次信告诉收件者「我收到了你的确认」,然后才能寄出包裹。收件者收到包裹后也需回确认信给寄件者,如果寄件者没收到某序号包裹的回信,则会重寄该包裹。 求效率的策略:连续寄出所有的包裹,收件者不需回信确认。

横跨多个封包的通讯是属于TCP/IP协定组第三层:传输层(Transport Layer)的协定。这两种策略也对应着传输层的两个主要协定:TCP与UDP。TCP注重稳定,它要求端点于传送封包前必须先进行三向交握(Three-way Handshake),也就是确认彼此的确认,以建立稳固的连线,且端点在接收封包后也会回传确认讯息,以确保没有任何一个封包被遗失;反之,UDP注重效率,它不要求端点在通讯前进行繁琐的确认,而是直接传送封包。

包裹本身亦可以装载任何内容:这箱书可以是一套金庸全集,也可以是一年份的交换日记;同理,封包内的资料也可以是来自任何上层协定的内容,例如HTTPS / SMTP / SSH / FTP等等。这些上层协定都被归类为TCP/IP协定组第四层:应用层(Application Layer)的协定。

维持匿名的技术

区块链仰赖于实体网络传送讯息,欲使区块链网络层维持匿名,则需使实体网络维持匿名。那么实体网络如何匿名呢若以寄包裹的例子来看,维持匿名,也就是不要让收件者知道寄件地址。

一个直觉的思路是:先将包裹寄给某个中介(Intermediary),再由中介寄给收件者。如此收件者看到的寄件地址将会是中介的地址,而非原寄件者的地址—这也就是代理(Proxy)以及VPN等匿名技术所采取的作法。

不过这个作法的风险在于:寄件者必须选择一个守口如瓶、值得信赖的中介。由于中介同时知道寄件地址与收件地址,倘若中介将寄件地址告知收件人,则寄件者的匿名性荡然无存。

有没有办法可以避免使单一中介毁坏匿名性呢一个中介不够,那用两个、三个、甚至多个呢这便是洋葱路由的基本思路。由于没有任何一个中介同时知道寄件地址与收件地址,因此想破坏寄件者匿名性将变得更困难。

洋葱路由与Tor

洋葱路由(Onion Routing)最初是为了保护美国政府情报通讯而开发的协定,后来却因为其能帮助平民抵抗政府监控而变得世界闻名。

1997 年,Michael G. Reed、Paul F. Syverson 和David M. Goldschlag 于美国海军研究实验室首先发明了洋葱路由[13],而Roger Dingledine 和Nick Mathewson 于美国国防高等研究计划署(DARPA)紧接着开始着手开发Tor,第一版Tor 于2003 年释出[14]。2004 年,美国海军研究实验室以自由软体授权条款开放了Tor 原始码。此后,Tor 开始接受电子前哨基金会(Electronic Frontier Foundation)的资助;2006年,非营利组织「Tor 专案小组」(The Tor Project)成立,负责维护Tor 直至今日。

Tor [15]是洋葱路由的实作,它除了改进原始设计中的缺陷,例如线路(Circuit)的建立机制,也加入若干原始设计中没有的部分,例如目录伺服器(Directory Server)与洋葱服务(Onion Service),使系统更强健且具有更高的匿名性。

Tor 自2004 年上线至今已有超过7000 个由志愿者部署的节点,已然是一个强大的匿名工具。然而这也使其成为双面刃:一方面它可以帮助吹哨者揭露不法、对抗监控;另一方面它也助长了贩毒、走私等犯罪活动。但不论如何,其技术本身的精巧,才是本文所关注的重点。

Tor 的运作原理

Tor Overview [16]

Tor 是基于中继的(Relay-based)覆盖网络。Tor 的基本思路是:利用多个节点转送封包,并且透过密码学保证每个节点仅有局部资讯,没有全局资讯,例如:每个节点皆无法同时得知请求端与响应端的IP,也无法解析线路的完整组成。

Tor节点也称为洋葱路由器(Onion Router),封包皆需透过由节点组成的线路(Circuit)传送。要注意的是,Tor线路仅是覆盖网络中的路径,并非实体网络的线路。每条线路皆由3个节点组成,请求端首先会与3个节点建立线路并分别与每个节点交换线路密钥(Circuit Key)。

请求端会使用其拥有的3组线路密钥对每个送出的封包进行3层加密,且最内层密文需用出口节点的密钥、最外层密文需用入口节点的密钥,如此才能确保线路上的节点都只能解开封包中属于该节点的密文。被加密后的封包被称为洋葱,因其如洋葱般可以被一层一层剥开,这就是洋葱路由这个名称的由来。

封包经过线路抵达出口节点后,便会由出口节点送往真正的响应端。同样的线路也会被用于由响应端回传的封包,只是这一次节点会将每个送来的封包加密后再回传给上一个节点,如此请求端收到的封包就会仍是一颗多层加密的洋葱。

那么,请求端该选择哪些节点来组成线路呢Tor引入了目录伺服器(Directory Server)此一设计。目录伺服器会列出Tor网络中所有可用的节点[17],请求端可以透过目录伺服器选择可用的洋葱路由器以建立线路。目前Tor网络中有9个分别由不同组织维护的目录,中心化的程度相当高,这也成为Tor安全上的隐忧。

Tor 线路的建立机制

Tor Circuit Construction [18]

Tor是如何建立线路的呢如上图所示,Tor运用伸缩(Telescoping)的策略来建立线路,从第一个节点开始,逐次推进到第三个节点。首先,请求端与第一个节点进行交握(Handshake)并使用椭圆曲线迪菲—赫尔曼密钥交换(Elliptic Curve Diffie–Hellman key Exchange, ECDH)协定来进行线路密钥的交换。

为了维持匿名,请求端接着再透过第一个节点向第二个节点交握。与第二个节点交换密钥后,请求端再透过第一、二个节点向第三个节点交握与交换密钥,如此慢慢地延伸线路直至其完全建立。线路建立后,请求端便能透过线路与响应端进行TCP 连线,若顺利连接,便可以开始透过线路传送封包。

洋葱服务

Clearnet, Deepweb and Darknet [21]

洋葱服务(Onion Service)/隐藏服务(Hidden Service)是暗网(Darknet)的一部分,是一种必须使用特殊软体,例如Tor,才能造访的服务;与暗网相对的是明网(Clearnet),表示可以被搜寻引擎索引的各种服务;深网(Deep Web)则是指未被索引的服务,这些服务不需要特殊软体也能造访,与暗网不同。

当透过Tor使用洋葱服务时,请求端与响应端都将不会知道彼此的IP,只有被响应端选定的节点:介绍点(Introduction Point)会引领请求端至另一个节点:会面点(Rendezvous Point ),两端再分别与会面点建立线路以进行通讯。也就是说,请求端的封包必须经过6个节点的转送才能送往响应端,而所有的资料也会采取端对端加密(End-to-end Encryption),安全强度非常高。

洋葱服务及暗网是一个令人兴奋的主题,碍于篇幅,笔者将另撰文阐述。

混合网络、大蒜路由与洋葱路由

这里再接着介绍两个与洋葱路由系出同源的匿名技术:混合网络与大蒜路由。

Mix Network Overview [22]

混合网络(Mix Network)早在1981年就由David Chaum发明出来了[23],可以说是匿名技术的始祖。

洋葱路由的安全性奠基于「攻击者无法获得全局资讯」的假设[24],然而一旦有攻击者具有监控多个ISP 流量的能力,则攻击者仍然可以获知线路的组成,并对其进行流量分析;混合网络则不仅会混合线路节点,还会混合来自不同节点的讯息,就算攻击者可以监控全球ISP 的流量,混合网络也能保证维持匿名性。

然而高安全性的代价就是高延迟(Latency),这导致混合网络无法被大规模应用,或许洋葱路由的设计是一种为了实现低延迟的妥协。

Garlic Routing Overview [25]

混合网络启发了洋葱路由,洋葱路由也启发了大蒜路由。2003年上线的I2P(Invisible Internet Project)便是基于大蒜路由(Garlic Routing)的开源软体,可以视为是去中心化版的Tor。几乎所有大蒜路由中的组件,在洋葱路由中都有对应的概念:例如大蒜路由的隧道(Tunnel)即是洋葱路由的线路;I2P的网络资料库(NetDB)即是Tor的目录;I2P中的匿名服务(Eepsite)即是Tor的洋葱服务。

不过,大蒜路由也有其创新之处:它允许多个封包共用隧道以节省建立隧道的成本,且其使用的网络资料库实际上是一个分散式杂凑表(DHT),这使I2P的运作彻底去中心化。若想进一步理解DHT的运作原理,可以参考笔者之前所撰写的文章:

I2P 最大的诟病就是连线速度太慢,一个缺乏激励的去中心化网络恐怕很难吸引足够的节点愿意持续贡献频宽与电费。

区块链与洋葱路由

那么,基于实体网络的区块链能不能使用洋葱路由或大蒜路由/混合网络/其他技术,以维持节点的匿名答案是肯定的。事实上,目前已经出现数个专案与提案:

全新的专案

Dusk:实作大蒜路由的区块链[32],不过官方已宣布因其影响网络效能而暂停开发此功能。 cMix:透过预先计算(Precomputation)以实现低延迟的混合网络33],是混合网络发明者David Chaum 近期的研究,值得期待。 Loki:结合Monero 与Tor/I2P 的区块链[34],并使用代币激励节点贡献频宽与电力,由其白皮书可以看出发明者对于匿名技术的热爱与信仰。

于主流区块链的提案

比特币:全世界第一条区块链,将于其网络使用一个不同于洋葱路由的匿名技术:Dandelion++[30][31],该匿名技术因其讯息传播路径的形状类似浦公英而得其名。 闪电网络(Lightning Network):知名的比特币第二层方案,将于其网络内实作洋葱路由[27]。 Monero:使用环签章保护用户隐私的区块链,将于其网络内实作大蒜路由,已开发出Kovri[28] 并成为I2P 官方认可的客户端之一[29]。

于以太坊的提案

2018年12月,Mustafa Al-Bassam于以太坊官方研究论坛提议利用洋葱路由改进轻节点之资料可得性(Light Client Data Availability)[36]。资料可得性是轻节点实现的关键,而这之中更关键的是:如何向第三方证明全节点的资料可得性由于这个提案巧妙地运用了洋葱路由的特性,因此在今年7月在另一则讨论中,Vitalik亦强烈建议应尽速使洋葱路由成为以太坊的标准[35]。

在这个提案中,轻节点需建立洋葱路由线路,然而线路节点并非由目录中挑选,而是由前一个节点的可验证随机函数(Verifiable Random Function, VRF)决定。例如线路中的第二个节点需由第一个节点的VRF决定。线路建立后,出口节点便可以接着向全节点请求特定的可验证资料。由于轻节点在过程中维持匿名,因此可以防止全节点对轻节点的审查(Censoring)。取得可验证资料后,其便与VRF证明沿着原线路传回轻节点,轻节点再将可验证资料与VRF证明提交至合约由第三方验证。若第三方验证正确,则资料可得性得证。

结语

隐私与匿名是自由的最后一道防线,我们应该尽可能地捍卫它,不论是透过本文介绍的匿名技术或者其他方式。然而,一个能保护隐私与维持匿名的区块链是否能实现真正的去中心化这是一个值得深思的问题。

本文也是笔者研究区块链至今跨度最广的一篇文章,希望读者能如我一样享受这段令人惊奇又兴奋的探索旅程。