warning 免责声明
《中国计算机信息网络国际联网管理规定》 计算机信息网络直接进行国际联网,必须使用邮电部国家公用电信网提供的国际出入口信道。任何单位和个人不得自行建立或者使用其他信道进行国际联网。如果您位于中国,那么请遵守以上规定。本站对您的行为不负任何责任。
前言: 白云“深”处有人家
近期网站要接入I2P了,本来打算写一篇短文,结果一不小心就写成了科普向的技术文章。
在这篇文章里我将系统性地叙述目前互联网上流行的两种匿名上网工具,即 Tor 和 I2P。我会在用偏形象化的语言描述这两个工具是怎么通过巧妙的设计来保护用户隐私的同时,兼顾具有一定难度的技术细节。也会参照资料对这两个工具进行横向对比,同时贴出一些安全问题。
借此机会,我也会较为简单地说明互联网系统中的一些概念。因为要兼顾易读性,所以本文将不会完全按照标准定义说明概念。如有失当之处欢迎指出。
为了防止本站被橄榄[1],本文将不会贴出任何外部链接和资源,也不会将操作这两个工具的过程描述得很详细。在阅读本文之前,请您留意上方的声明。
话不多说,我们切入正题。
概念篇
概念篇,顾名思义,是为了后面的系统性叙述做一些概念层面的铺垫。
概念篇的内容将尽力保持言简意赅,确保可读性。如果你已经知道相关概念,那么可以略过这部分。
表层网、深网、暗网
这三个名词需要放在一块儿说,它们所体现的是互联网的纵深。自互联网在20世纪被发明以来,其影响范围就在逐渐扩大,目前已经形成了一个非常“宏伟”的森林体系。
在这森林体系当中,自然有三六九等之分。人们为了理解方便,对互联网做出了三个深度上的划分,也就是标题所提到的”表层网“,”深网“,和”暗网“。
形象地说,表层网相当于一个大冰山在水面之上的部分。对应到实际当中,就是人们日常生活中可以通过互联网搜索引擎搜索到的大多数内容。这样看来,本站也属于表层网。
深网则相当于冰山在水面之下的部分。实际包括各种内部网站,譬如领域性较强的论坛,各种盗版资源下载站,和企业的内网等。深网通常很难在搜索引擎上直接搜到,访问它需要特殊的信息来源,比如朋友的推荐,不显眼的小广告等。
暗网是深网的子集,位于整个冰山的最底部,换句话说,深网的一小部分是暗网。暗网比深网更加难以通过常规手段访问,其匿名性和隐私性在整个互联网中最高。访问暗网需要特殊工具,其中常见的两个就是下文将要介绍的 Tor 和 I2P 。从技术层面上说,暗网的匿名性很强,个人在暗网上的网络活动几乎不可能被第三方追踪,这有助于商业秘密的传递和防止”大数据杀熟“。然而,暗网的存在也导致许多犯罪者都活跃在暗网上以逃避执法机构的监管。
代理服务器
代理服务器(Proxy Agent Server) 是互联网流量的中转处。从OSI模型[2]上来说,基础的代理服务器运行于传输层,一般分为TCP[3]转发和UDP[4]转发两种。
上述定义可能略有专业性,为了使文章易于理解,有关TCP,UDP和OSI模型的技术细节就不再展开说明了。形象地说,代理服务器好比一个快递站,任务是接受客户端[5]发来的数据,把数据进行一些处理[6]后发给源服务器,再把源服务器的响应数据原路回传给客户端。
代理服务器可以起到隐藏客户端真实信息的作用。不论是 Tor 还是 I2P,代理服务器在其运行机制中都是不可或缺的一部分。这两个工具都只是在数据传输协议,传输流程和加密等方面做文章,而其基础都是世界各地志愿者运行的代理服务器。
多重代理、代理链
多重代理和代理链是一回事,顾名思义,指将数据经过多个代理服务器代理。代理服务器的概念在上方已经说明,此处便不再赘述。
多重代理可以更好地保护隐私。理论上,数据经过代理的数量越多,地域分布越广,就越难以被溯源。技术实践上通常采用三重代理将流量中转三次,这样可以在成本和隐私间取得平衡。
Tor 和 I2P 都采用了多重代理,尽管它们使用的传输协议截然不同。多重代理的不足之处是数据传输效率较低,换句话说就是网速慢。
P2P
P2P, 全名 Peer-to-Peer, 中文译名为对等网络,亦可理解为“端到端”。P2P是一个十分重要的去中心化网络环境,在互联网的许多方面都有应用。它的概念略有些抽象,但很有意思。
一般网络的环境是一对多的,换句话说,是中心化的,也就是网络中有一方占主导地位。
中心化好比人们都到一个特定的超市买菜,如果这个超市关门了,那么人人都买不到菜。人们买不到菜的原因显而易见——在环境中只有一个超市提供菜,而且人与人之间毫无联系。
P2P的宗旨是多对多,即去中心化,正如它的中文译名“对等网络”一样。回到前面的例子,去中心化好比人们去超市买菜,但去超市的每个人都开了一家超市,这样人们没有的菜不一定要去某一个特定的超市买,可以互帮互助。即环境中的个体没有主导与被主导之分,都是对等的。
上述只是个简单的例子,P2P应用到技术层面上的典例是Bittorrent协议。如果没有听说过Bittorrent,中国国内的下载软件迅雷也采用了P2P以加速下载,同时减轻服务器压力。
I2P使用了P2P网络,这让它在安全性上比Tor更胜一筹,同时也满足了用户在其网络上快速传输文件的刚需。
此外,P2P网络的弱点也很明显——当网络内的成员数量太少的时候,其优势便荡然无存了。
协议
上述说明中有很多句子都提到了“协议”。所谓协议,简单地说,是指传输数据的两方共同遵守的一个相同的传输数据的方式。
这好比有两个说不同语言的人,他们之间要想直接交流,必须得使用相同的某一种语言。从协议的概念上来看,这种语言相当于一个“协议”。只有两个人都遵守这个”协议“进行沟通,才能保证沟通的效率和安全。
互联网世界中也是一样,两个互联网设备之间想要沟通,也必须使用相同的协议。现代互联网协议十分多样化,它们运行在不同的层次上。
常见的协议有HTTP/HTTPS(应用层)、TCP/UDP(传输层)、IPv4/IPv6(网络层)等等,本文不会详细说明这些协议的技术细节。在OSI模型上,这些协议都是自下而上,层层支持的关系,即每一级协议都为它的上层协议提供支持。越低级的协议,其物理性越强,重要性也越强。
隧道
隧道是一类网络传输方式的统称。它可以使用一种隧道网络协议将另一个网络协议封装在其内部。
借助 Tor 的形象化比喻,隧道好比一个洋葱,洋葱的最内层是要传输的真实数据,而洋葱外面的皮就相当于隧道。设备想要访问洋葱内部的真实数据,首先需要剥去它的外皮。剥去外皮的过程通常是根据一定的算法对数据的解密和重组。需要强调的是,根据隧道的定义,隧道采用什么协议与隧道内部数据采用的协议没有关系,举个例子,隧道采用KCP协议,但隧道内部数据可以采用TCP协议,最终源服务器看到的数据也会是TCP协议下的。
隧道的建立,传输与关闭是一个很复杂的过程,但也很有意思。
要建立一个隧道,简单地说,首先需要建立隧道的双方互相握手[7]以确认身份等相关基础信息,然后按照隧道协议的规定确认隧道的安全性以防止中间人攻击[8]等,最后确认隧道建立。
在隧道数据传输的过程中,一个原始数据包需要经历四个步骤:预处理,加密,解密,逆处理。其中,预处理和加密是将原始数据封装到隧道里,更准确地说,是为了让数据合乎隧道的协议要求。而解密和逆处理则是让数据脱去隧道的外衣。
隧道的关闭可以很直接,也可以很正式。直接关闭隧道在无状态的协议中很常见,正式关闭隧道一般适用于有状态的协议。具体来说,前者是双方中的某一方直接停止发送数据,后者是双方预先沟通后再同时关闭隧道。
Tor 篇 – 私密浏览,自由探索
结束了概念篇,相信各位读者对互联网的部分技术概念有了大致的认识。接下来将介绍第一个匿名上网工具——Tor。
Tor 概述
Tor, 全称 “The Onion Router”,译名 “洋葱路由”,是一个匿名上网工具。Tor 的前身是一个由美国海军实验室发起的匿名网络项目,后来这个项目被非营利组织接手。目前,Tor 项目仍然在收受美国海军(US Navy)和美国中央情报局(CIA)的捐款。
Tor 的功能十分纯粹,即隐藏使用者的网络踪迹。Tor 使用者的流量对所有人来说都是不可探测的,包括网络服务提供商在内。在链路上监听流量的审查者最多只能知道用户在使用Tor,而无法知道其访问的网站是什么。
“剥洋葱” – Tor 的技术细节
作为一个开源的匿名上网工具,Tor的技术细节一直备受网络安全专家和从业者的关注。
言简意赅地说,Tor的主要安全技术是多重代理和加密。当你打开Tor浏览器,打算网上冲浪时,你会发现Tor会要求你先链接Tor网络。
本质上,连接到Tor网络的过程是协调代理服务器的过程。Tor会从公共代理列表中,根据你所在的地区,协调三个不同的代理服务器,Tor将其称为中继(Relay)。为了严谨,本文将会用Tor组织发表的论文中的表述来描述这三个中继,它们依次被称为:入口节点(Guard Relay,有时也被称为守卫节点),中间节点(Middle Relay),和出口节点(Exit Relay)。
Tor会将初始的数据报文(通常是HTTPS协议)加密三次,每一次加密都会向其数据头添加下一个中继的信息。入口节点会收到三次加密后的报文并使用协议中规定的解密算法将报文脱去一层解密,然后按照报文数据头中的指示将数据发送给下一个中继,以此类推。
这也是给这个项目起名为“洋葱路由”的原因——数据包的层层解密就好像在“剥洋葱”。
当报文到达出口节点的时候,出口节点会将报文彻底解密(如果报文是HTTPS协议的,那么出口节点仍将无法看见HTTPS协议加密保护下的明文),然后将原始数据包发送至目标服务器。目标服务器的响应数据包会在出口节点被加密,然后原路经历一次类似的解密过程。
Tor的巧妙设计确保了上网者的相对匿名。在整个加密链路中,入口节点知道访问者是谁,却不知道访问的目的;出口节点知道访问的目的,却不知道访问者是谁;中继节点既不知道访问者是谁,也不知道访问的目的。在中继的选择上,Tor也会有意识地避免选择同一个地区的中继,且中继链路每十分钟切换一次,这样可以让匿名性得到相对的最大化。
Tor 的安全隐患
在这居心叵测的互联网世界,再安全的工具都会有安全隐患,Tor也不例外。
Tor的巧妙设计令审查者寸步难行,但是仍然有人找到了攻击Tor网络安全性的可能手段。一个最容易理解的例子是被恶意控制的Tor中继。
当然,仅仅控制三个中继中的某一个仍不足以影响链路的整体安全性,因为一个中继能得知的信息实在太少。但是如果审查者同时控制了链路中的入口节点和出口节点,那么对流量进行溯源就非常简单了。
Tor本身无法避免这个问题,其安全人员研究了几种方案来对抗这种攻击。例如通过修改中继选择算法,让中继的地理位置更加分散。以及,设置中继的地区性数量上限,禁止某一个地区的中继超量接入Tor网络。所有这些对抗皆在提升攻击者的攻击成本,但当面对国家级的审查机器时,Tor浏览器显得有些力不从心。
除此之外,因为Tor浏览器可以访问Tor网络之外的互联网,所以其攻击面相对较大。例如,一些审查者会恶意修改Tor浏览器的代码,向其中植入追踪上报机制,然后将修改后的Tor浏览器发布到网络上,用户一旦下载使用这些被修改过的Tor浏览器,其隐私安全就会大打折扣。审查者有时也会自行设立暗网站点,诱使用户访问,通过类似钓鱼网站的方式获取用户的隐私信息。
近年来,网安部门和办案机关经过不断努力,摸索出许多行之有效的追查方式。如通过监控Tor等浏览器的下载信息顺藤摸瓜,跟踪“暗网”用户并监控其行为;创建“暗网”陷阱,对犯罪分子等用户开放,坐等违法犯罪分子入瓮;由监管人员扮演成“暗网”用户进行卧底,深入虎穴,成功取证;建立“暗网”空间搜索引擎,完成对“暗网”入口、链接、内容检测采集,对“暗网”交易数据进行跟踪以及对“暗网”网络结构及数据资源进行合理掌握等。
——《检察日报》
说到这儿,就不得不引入为了解决上述问题而诞生的另一个匿名上网工具—— I2P 了。
I2P 篇 – 隐形的互联网
I2P 在很多地方和Tor很像,但也在安全和匿名性方面比Tor更上一层楼。
前文提过,Tor 是“洋葱路由”的简称,那么你知道I2P基于什么路由吗?
答案是,I2P基于“大蒜路由”。
I2P 概述
I2P, 全称 “The Invisible Internet Project”,译名 “隐形互联网计划”,是一项混合授权的匿名网络项目。I2P项目由世界各地的志愿者维护。虽然同Tor一样,I2P项目也接受捐赠,但是其捐赠者相对Tor较零散。
I2P主要基于大蒜路由和P2P技术开发,其网络比Tor更加去中心化,因此匿名性和安全性相较于Tor更高。与Tor不同的是,I2P不支持访问I2P网络之外的互联网,这样可以在最大程度上保护每个用户的隐私。
“掰大蒜” – I2P的技术细节
I2P之所以比Tor安全,是因为其高度的去中心化。
I2P不存在所谓“公共节点列表”,其网络结构类似于电驴和BT种子,是P2P网络。当你打开I2P的时候,I2P同Tor一样,会先连接到I2P网络。
连接到I2P网络的过程类似于下载种子文件,通过分布式哈希表寻找I2P网络上的节点,然后与节点建立隧道。当用户成功连接到I2P网络上后,用户的客户端便自动成为了一个I2P节点,这意味着其他人也可以通过该用户的设备建立隧道,以此互相连接。
说到这里,大蒜路由(Garlic Routing)登场了。大蒜路由会将传输的原始数据拆散为加密数据包,将数据通过多个随机隧道交叉疏散传递。在一次请求中,I2P的请求数据和服务器的响应数据将使用不同的隧道传输。与Tor相似,I2P的数据包也有多重加密保护。
不难看出,I2P网络比Tor网络更加复杂,同时也更加安全。各个节点之间都是对等的关系,这让所有用户和服务器看起来没有区别。与此同时,I2P无法直接连接到外部互联网,所有请求都被封在了I2P网络中。所有这些特性让审查者的流量分析难上加难,几乎彻底失效。也因此,I2P网络具有比Tor网络更强的匿名性。
I2P的安全隐患
说到I2P的安全隐患,有一个惊人的事实——I2P还没有已知的重大安全隐患!
这看起来是不可能的事情,笔者也调查了很多资料,但是均没有发现I2P网络的严重安全问题报告。
网络安全研究者们还在不停研究中,相信未来会有安全漏洞被报告出来。
安全,是一个永恒的话题。
番外篇 – “洋葱” 还是 “大蒜” ?
多亏了安全技术人员的巧妙设计,我们得以“管中窥豹”,看到匿名网络的冰山一角。
但是,“洋葱”和“大蒜”孰胜孰负,该选哪个呢?
就安全性而言,“大蒜”更胜一筹。就易用性而言,“洋葱” 更胜一筹。
Tor VS I2P
Tor相较于I2P,有如下优点:
- 庞大的用户数;在学术和黑客群体中得到较多关注; 基于正式研究的匿名性、抵抗性和性能优势;项目有一个非匿名的,来自大学的领导者。
- 解决了一些 I2P 尚未解决的规模问题(现在I2P拥有30000个以上的活跃节点和18000个左右的公网IP,Tor拥有6000个左右的中继和2000个左右的网桥)
- 有可观的资金(有美国政府支持)
- 有更多的开发者,其中有些是全职的
- 由于具有基于 TLS 的传输和网桥,对国家级封锁有更强的抵抗
- 为出口流量设计和优化,有大量的出口节点
- 更好的文档,拥有正式文件,论文和规范, 更美观的网页。
- 内存使用更高效
- Tor 客户端节点的带宽开销非常低,在Tor中,客户端节点不需要太多带宽,他们没有完全参与网络。
- 集中控制降低了每个节点的复杂性,并能有效应对 Sybil 攻击
- 高容量节点提供更高的吞吐量和更低的延迟
- 采用C++编写客户端
I2P VS Tor
I2P相较于Tor,有如下优点:
- 专为隐藏服务设计和优化,在这方面比Tor快许多
- 完全分布式和自组织
- 通过不断分析和比较性能,而不是根据目录声称的带宽来选择节点
- 洪泛节点(目录服务器)是持续变化并且不被信任的, 而不是硬编码写入一个服务器列表
- 它还没有被大量(或者根本没有)封锁
- P2P 友好
- 消息交换而不是线路交换
- 消息的隐式透明负载平衡跨越多个对等点,而不是单一路径
- 单向隧道而不是双向隧道线路,使对等点必须的节点数量增加一倍以获得相同的信息。
- 当攻击者参与隧道时防止检测客户端活动。
- I2P 隧道的时效是短暂的,减少了攻击面。
- I2P 协议专为匿名和安全性而设计。
- 基本上所有节点都参与为其他人的路由
- 使用TCP和UDP传输
- 采用Java编写客户端
尾声 – 网络安全是永恒的话题
本文写于2022年即将结束之际,时值网络安全的话题再度成为热门之际。
网络安全是永恒的话题,是一个多方的博弈。审查者,用户,开发者,黑客,所有人都和网络安全有着千丝万缕的联系。互联网世界中的你我,也是如此。
本文通过介绍两个匿名上网工具,让各位能够窥得网络安全的冰山一角。本文的语言尽量保持了浅显易懂,但是这里需要强调的是,浅显易懂的语言通常是不准确的,还有更多深层次的技术细节在水面之下。
本文是笔者随心之作,若有不准确的地方,还请在评论区指正。
感谢各位能够读到这里,将这篇枯燥的文章看完,这里祝各位2023年新年快乐!
References
↑1 | 网络谐音梗,同 “干烂”。 |
---|---|
↑2 | 开放系统互联(Open System Interconnection,OSI)是由ISO发起的,其任务是制定国际计算机通信标准,特别是促进不兼容系统间的互联。OSI模型将计算机通信协议划分为七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 |
↑3 | 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 |
↑4 | 用户数据报协议 (User Datagram Protocol, UDP)是一个简单的面向无连接的,不可靠的数据报的传输层协议,IETF RFC 768是UDP的正式规范。 |
↑5 | 客户端,网络术语,指某个服务的使用者。通常情况下指用户本人的设备。 |
↑6 | 有时不进行处理,取决于客户端所使用的代理是否存在特殊的协议。 |
↑7 | 此处“握手”在表述上借助了TCP协议的概念。根据使用协议的不同,这一步也会有所不同。 |
↑8 | 中间人攻击,一种恶意的攻击手段,是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。 |