Tor网络原理详解

引入

匿名通信是一种通过采用数据转发、内容加密、流量混淆等措施来隐藏通信内容及关系的隐私保护技术。为了提高通信的匿名性,这些数据转发链路通常由多跳加密代理服务节点构成,而所有这些节点即构成了匿名通信系统(或称匿名通信网络)。匿名通信系统本质上是一种提供匿名通信服务的覆盖网络,可以向普通用户提供Internet匿名访问功能以掩盖其网络通信源和目标,向服务提供商提供隐藏服务机制以实现匿名化的网络服务部署。作为匿名通信系统的核心功能,隐藏服务机制通常利用多跳反向代理或通过资源共享存储来掩盖服务提供商的真实地址,可以保证匿名服务不可追踪和定位。

匿名通信技术的提出源于网络用户的隐私保护需求,但是随之而来的是各种匿名滥用问题。尤为突出的是,一些不法用户基于Tor,I2P,Freenet等匿名通信系统提供的隐藏服务机制,架设必须通过特殊软件或进行特殊配置才能访问的网络服务,形成了无法被直接检索的暗网。术语“DarkWeb”和“Darknet”经常被混用指代暗网。为了更好地厘清这2个术语之间的关系和差异,并界定本文所讨论的暗网的内容,给出如下定义:

  1. DarkWeb:必须通过特殊的软件、特殊的配置才能访问的拥有特殊域名的Web站点,搜索引擎无法对其进行检索。
  2. Darknet:必须通过特殊的软件、特殊的配置才能访问,包含Web、IRC、文件共享等各类资源和服务的匿名网络,搜索引擎无法对其进行检索。

两者的关系如图1所示,其中DarkWeb重点在于不可检索、不可直接访问,并不强调匿名,因此既包含匿名Web站点(如Tor隐藏服务站点),也包含非匿名Web站点(如ZeroNet提供的Web站点);而Darknet则强调匿名性,即所有的资源都需要基于相应的匿名通信系统才能进行访问,其中的资源不限于Web服务。
image.png

Tor匿名通信系统

Tor(the second-generation onion router)是目前使用范围最广的匿名通信系统之一,其核心技术“洋葱路由”在20世纪90年代中期由美国海军研究实验室提出,并在1997年交由美国国防高级研究计划局(DARPA)进一步开发。2003年Tor正式版发布,2004年Tor设计文档在第13届USENIX安全讨论会上正式发表,并在同年由美国海军研究实验室公开其源码。

Tor使用多跳代理机制对用户通信隐私进行保护:首先,客户端使用基于加权随机的路由选择算法分别选择3个中继节点,并逐跳与这些中继节点建立链路。在数据传输过程中,客户端对数据进行3层加密,由各个中继节点依次进行解密。由于中继节点和目的服务器无法同时获知客户端IP地址、目的服务器IP地址以及数据内容,从而保障了用户隐私。Tor于2004年开始支持隐藏服务,为Tor暗网的出现提供了技术支撑。Tor暗网是目前规模最大的暗网之一,其中包含大量的敏感内容与恶意内容。Tor隐藏服务是仅能在Tor暗网中通过特定形式的域名(.onion)访问的网络服务。Tor暗网的基本组件包括客户端、目录服务器(directory server)、隐藏服务目录服务器(hidden service directory)、洋葱路由器(onion router, OR)和隐藏服务器(hidden server),如图2所示。
image.png

  1. 客户端:客户端是运行在用户操作系统上的本地程序,称为洋葱代理(onion proxy, OP)。OP将用户数据封装成Tor信元并层层加密,为各类TCP应用程序提供匿名代理服务。
  2. 洋葱路由器:Tor暗网中的数据中继节点。Tor默认匿名链路由3个OR组成,分别为入口节点(Entry)、中间节点(Middle)和出口节点(Exit),其中入口节点一般选择可信度较高的守护节点(Guard)。
  3. 隐藏服务器:提供Web,IRC等TCP应用服务。隐藏服务器受到Tor匿名性的保护,必须使用Tor客户端才能够访问其TCP应用服务。
  4. 目录服务器:目录服务器保存了所有洋葱路由器的IP地址、带宽等信息。客户端在首次启动后向目录服务器请求洋葱路由器信息,以便完成节点选择和链路建立。
  5. 隐藏服务目录服务器:隐藏服务目录服务器存储并为客户端提供隐藏服务器的引入节点(introduction point, IPO)、公钥等节点信息。

客户端、洋葱路由器、目录服务器、隐藏服务目录服务器和隐藏服务器的功能都集成在Tor软件包中,用户可以通过配置文件对具体功能进行配置。

Tor隐藏服务器在启动时会选择3个引入节点作为其前置代理,并将引入节点及其公钥信息上传至隐藏服务目录服务器。客户端访问隐藏服务时,首先建立3跳链路访问隐藏服务目录服务器,获取引入节点和公钥信息。客户端选择一个汇聚节点(rendezvous point, RPO)作为客户端和隐藏服务器通信链路的汇聚点,并将汇聚节点的信息通过引入节点告知隐藏服务器。客户端和隐藏服务器各自建立到达汇聚节点的链路,完成6跳链路的搭建后即可开始通信。Tor用户通过6跳链路访问隐藏服务器,在此过程中任意节点无法同时获知Tor客户端IP地址、隐藏服务器IP地址以及数据内容,保障了Tor客户端与隐藏服务器的匿名性。

匿名接入技术

匿名接入技术是匿名通信网络为了规避网络监管而提供的客户端隐蔽接入技术。网络监管者出于安全审计的考虑,会检测匿名网络的中继节点并阻止用户接入。为了规避此类网络审查,研究人员提出了各种匿名接入技术,包括bridge,pbfs,meek,FTE,Flashproxy等。

bridge节点

Tor的设计者在2011年提出了bridge节点的概念以突破网络监管。由于此类节点的信息不公开,因此Tor客户端可以将其作为入口节点从而接入匿名网络。
bridge是匿名网络为了提升自身隐蔽性和规避基于IP阻断的网络监管而开发的一种接入机制。bridge节点功能上与一般的Tor中继节点相同,但其信息并未被目录服务器公开,从而降低了被网络监管者发现和阻断的风险。为了方便用户获取此类节点信息,Tor项目提供了2种获取方式:

  1. 在bridgeDB数据库中保存了bridge节点信息,用户可通过直接访问官网站点获取3个bridge节点;
  2. 用户还可通过Google和Yahoo邮箱向指定邮箱发送请求,邮件服务器会自动回复3个bridge节点信息。由于Google和Yahoo申请虚假邮件地址比较困难,所以可有效防止无限制获取bridge节点信息等恶意攻击。

obfs混淆代理

虽然Tor可以使用bridge节点来规避基于IP阻断的监管,但监管者仍能通过深度包检测(deep packet inspection, DPI)技术来识别出Tor流量。鉴于此,Tor项目开发了第1个传输插件obfs混淆代理。Obfs后续又经历了3次版本改进,分别为obfs2,obfs3,obfs4,当前最新版本的Tor使用的是obfs4。其中,obfs2设计于2012年,采用分组密码(AES-CTR-128)对Tor的传输数据进行加密,擦除了Tor流量相关的标识信息,从而实现了有效混淆。但是obfs2在设计上存在2个问题:

  1. 握手阶段的连接容易被识别。通信双方在传输数据之前需要交换秘密信息并协商出会话密钥,而在这一阶段的密钥种子是通过明文传输且报文格式固定,导致这种obfs2流量容易被中间审查机制识别并计算出双方的会话密钥。
  2. 可利用Tor客户端探测bridge节点以检查其是否可进行obfs2握手,从而实施主动的bridge探测攻击。

鉴于上述设计缺陷,Tor后续又推出了obfs3和obfs4方案。作为obfs2的后续设计,obfs3使用Diffie-Hellman协议来计算通信双方的共享秘密,并由此生成对称密钥。相较于obfs2,obfs3在握手阶段有了很大的改进,但其在密钥交换阶段仍然缺乏对bridge身份的验证,存在中间人攻击和主动探测攻击的风险。

为了抵御上述攻击,需要能够有效保证双方通信真实性、完整性和机密性的优化方案。ScrambleSuit提出利用带外方式交换共享秘密实现通信双方的互认证,能够有效防御主动探测攻击。在此基础上,obfs4进一步利用BridgeDB实现了基于bridge身份验证的密钥交换。客户端通过BridgeDB查询bridge节点,获得其IP地址、节点ID和公钥信息。只有同时匹配这3个信息才能通过obfs4节点的身份验证并建立连接。obfs4是对obfs3的重大升级,既有效地混淆了Tor流量,又实现了bridge身份验证,达到能够抵御主动探测攻击和中间人攻击的效果。

meek隐蔽通道构建技术

meek是一种基于前置域(domain fronting)的隐蔽通道构建技术,其工作原理如图7所示。首先,meek-client向前置域名服务器发送一个TLS Client Hello消息,并将该服务器域名填入SNI(server name indication)字段。在TLS握手成功后,meek-client把实际传输的Tor流量封装在HTTP POST载荷中,并将目标bridge地址写入HTTP HOST字段。由于监管者无法查看加密后的HTTP POST内容,因此无法识别真正的目标bridge地址。前置域服务器接收到meek-client数据后,根据HTTP HOST字段值将数据转发到目标bridge节点。该节点上运行的meek-server对HTTP报头处理后将封装的Tor流量转发给后续中继节点。在当前Tor网络中,meek的实现主要依赖于Google,Amazon和Azure等大型服务提供商提供的白名单前置域名服务器,造成Tor客户端在访问正常网站的假象,从而规避网络流量监控。
image.png

FTE加密流量转换技术

FTE(format-transforming encryption)由Dyer等人在2013年ACM计算机与通信安全会议(ACM Conference on Computer and Communications Security, CCS)上发表,其主要原理是通过扩展传统对称加密,将密文转换为指定的传输格式。与obfs流量混淆方式不同,FTE没有将原协议流量转换为无序的未知流量,而是根据用户输入的正则表达式,输出具有一定协议格式的流量。其中,用户输入的正则表达式可以从DPI系统源码中直接提取或根据应用层流量自动学习得到。这使得基于正则表达式的DPI技术会将其误识别为用户选定的协议流量,从而实现规避审查的目的。由于大部分Tor流量为HTTP流量,默认情况下采用HTTP正则表达式将之转化为HTTP协议,从而实现流量伪装。

洋葱匿名路由技术

匿名路由技术是匿名通信系统为用户提供匿名服务时所使用的一种关键技术。该技术具体涉及路由节点选择、链路建立、数据传输等多个阶段。通过匿名路由技术,匿名通信系统的安全和性能都能够得到保障。目前,低延迟匿名通信系统所使用的路由技术主要包括洋葱路由、大蒜路由和基于DHT的路由。

洋葱路由技术的核心思想是通过多跳代理与层层加密的方法为用户的通信隐私提供保护。Tor是最典型的使用洋葱路由技术的匿名通信系统。在Tor暗网中,客户端与隐藏服务器之间需要各自选择3个节点建立多跳链路才能进行通信。目前,Tor主要采用基于加权随机的路由选择算法选择洋葱路由器构建链路。该算法依据服务器描述符(server descriptor)与共识文档(consensus document)中的带宽信息与放缩因子计算各节点的加权值,并按照出口节点、入口节点和中间节点的顺序选择链路节点。值得注意的是,链路中任意2个洋葱路由器应来自不同的C类网段。

在节点选择完成之后,OP从入口节点开始逐跳建立匿名链路,节点之间均采用TLS/SSLv3对链路进行认证。为增强可读性,下面将入口节点、中间节点、出口节点用OR1,OR2,OR3表示。首先,OP与OR1建立TLS链接,即OP发送CELL_CREATE信元,OR1进行响应以完成Diffie-Hellman握手并协商会话密钥 k 1 k_{1} k1,从而建立第1跳链路。其中,CELL_CREATE信元是Tor中一种数据传输的基本单元,长度为512B。然后,OP向OR1发出与OR2建立链路的Tor信元,OR1收到后与OR2建立TLS链路,并通过Diffie-Hellman协议协商OP与OR2之间的会话密钥 k 2 k_{2} k2。OR1将会话密钥通过加密报文告知OP,完成第2跳链路的建立。以此类推,Tor建立多跳链路实现与通信目标的安全连接。

在匿名链路建立后,用户可以通过OP访问公共网络进行数据传输。当OP获得目标服务的IP地址和端口后,使用 k 1 k_{1} k1 k 2 k_{2} k2 k 3 k_{3} k3对数据信元进行层层加密封装,即 { { { < I P : p o r t > } k 3 } k 2 } k 1 \{\{\{<IP:port>\}_{k_{3}}\}_{k_{2}}\}_{k_{1}} {{{<IP:port>}k3}k2}k1,这种加密方式称为“洋葱加密”。该信元经过每个OR节点时,都会被使用对应的密钥对最外层进行解密并转发。当到达OR3后进行最后一次解密,即可识别出目标服务器的IP地址和端口,从而建立TCP连接。在此过程中,用户的上行数据经过OP层层加密,由各OR逐层解密并转发至目标服务器;与此相反,目标服务器的下行数据经过各OR加密,由OP逐层解密并最终返回给应用程序。对于目标服务器来说,Tor用户是透明的,其始终认为自己在和OR3通信,而各OR无法同时获得Tor用户IP、目的服务器IP和应用数据,从而保证了通信的匿名性。

Tor隐藏服务

Tor隐藏服务是通过隐藏服务域名(即洋葱域名)唯一标识和查找的。服务器首次运行后将生成一个隐藏服务域名,其域名形式为.onion。其中是长度为16B的字符串,由RSA公钥Hash值的前80b进行base32编码获得。

image.png

Tor隐藏服务器在启动过程中会将其信息上传至隐藏服务目录服务器,Tor客户端能够通过目录服务器获取足够的信息与隐藏服务器建立双向链路。图2展示了客户端访问隐藏服务的具体过程:

  1. 隐藏服务器选择3个洋葱路由器作为其引入节点,并与引入节点建立3跳链路;
  2. 隐藏服务器将其隐藏服务描述符(hidden service descriptor)上传至隐藏服务目录服务器,描述符中包含引入节点的信息与自身RSA公钥;
  3. 客户端通过隐藏服务域名(.onion)进行访问时,从隐藏服务目录服务器获取引入节点的相关信息;
  4. 客户端选择一个洋葱路由器作为汇聚节点并与该节点建立3跳链路;
  5. 客户端建立到达引入节点的3跳链路,并通过引入节点将汇聚节点的信息发送到隐藏服务器;
  6. 隐藏服务器建立到达汇聚节点的3跳链路,并对该链路进行认证;
  7. 经过汇聚节点,客户端与隐藏服务器通过6跳链路进行交互。

Tor隐藏服务器运行时,将自身的RSA公钥及引入节点信息上传至通过下式选定的6个隐藏服务目录服务器上,其中 H ( x ) H(x) H(x)是结果长度为160b的Hash函数, ∥ \parallel 为拼接函数。
D e s c r i p t o r − i d = H ( P u b l i c − k e y − i d ∥ S e c r e t − i d − p a r t ) Descriptor-id=H(Public-key-id\parallel Secret-id-part) Descriptorid=H(PublickeyidSecretidpart)
其中,Public-key-id即为RSA公钥的SHA1摘要的前80b。Secret-id-part,可计算为
S e c r e t − i d − p a r t = H ( T i m e − p e r i o d ∥ D e s c r i p t o r − c o o k i e ∥ R e p l i c a − i n d e x ) Secret-id-part=H(Time-period\parallel Descriptor-cookie\parallel Replica-index) Secretidpart=H(TimeperiodDescriptorcookieReplicaindex)
其中,Descriptor-cookie为可选字段,该字段可以用来防止未授权客户端访问隐藏服务;Replica-index有2种取值,其作用为选择不同的隐藏服务目录服务器。Time-period字段用于分散隐藏服务重新选择隐藏服务目录服务器的时间,可计算为
T i m e − p e r i o d = t + P [ 0 : 1 ] × 86400 256 86400 Time-period=\frac{t+P[0:1]\times \frac{86400}{256} }{86400} Timeperiod=86400t+P[0:1]×25686400
其中,t为当前的UNIX时间。该字段将一天划分为256个时段,并在其中某个时刻重新选择隐藏服务目录服务器上传信息。

隐藏服务目录服务器利用DHT进行组织,每个目录服务器都是DHT中的一个节点,DHT结构如图12所示。
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在排序数组中查找元素的第一个和最后一个位置(Java详解)

一、题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示…

OpenTiny Vue 组件库3.12.0 发布:文档大优化!增加水印和二维码两个新组件

非常高兴跟大家宣布&#xff0c;2023年11月30日&#xff0c;OpenTiny Vue 发布了 v3.12.0 &#x1f389;。 OpenTiny 每次大版本发布&#xff0c;都会给大家带来一些实用的新特性&#xff0c;10.24 我们发布了 v3.11.0 版本&#xff0c;增加了富文本、ColorPicker 等4个新组件…

linux下查看进程资源ulimit

ulimit介绍与使用 ulimit命令用于查看和修改进程的资源限制。下面是ulimit命令的使用方法&#xff1a; 查看当前资源限制&#xff1a; ulimit -a 这将显示当前进程的所有资源限制&#xff0c;包括软限制和硬限制。查看或设置单个资源限制&#xff1a; ulimit -<option> …

喜报丨迪捷软件入选2023年浙江省信息技术应用创新典型案例

12月6日&#xff0c;浙江省经信厅公示了2023年浙江省信息技术应用创新典型案例入围名单。本次案例征集活动&#xff0c;由浙江省经信厅、省密码管理局、工业和信息化部网络安全产业发展中心联合组织开展&#xff0c;共遴选出24个优秀典型解决方案&#xff0c;迪捷软件“基于全数…

安装鸿蒙开发者工具DevEco Studio

1.进入官网下载工具 https://developer.harmonyos.com/cn/develop/deveco-studio/ 选择您电脑对应的系统下载即可 2.安装 很简单直接点击“next”,此处不做赘述 3.配置环境 安装完成后&#xff0c;打开DevEco Studio 会提示配置环境。安装node.js和ohpm 如果不小心关了&a…

DevEco Studio无法识别本地模拟器设备的解决方法

遇到了一个问题&#xff0c;之前测试无误的本地模拟器&#xff0c;运行后设备栏中无法识别了。 此时保持模拟器处于开启状态&#xff0c;关闭DevEco Studio窗口重新启动后&#xff0c;发现重新识别设备了。

【CASS精品教程】cass11提示“请不要在虚拟机中运行此程序”的解决办法

文章目录 一、问题提示二、解决办法一、问题提示 按照正常安装教程安装好南方测绘cass 11之后,打开的时候可能会有以下提示:请不要在虚拟机中运行此程序,如下图所示: 遇到问题,咱们就想办法解决问题,下面将自己尝试的方法及最终解决情况跟大家说一下,供参考。 二、解决…

Linux---压缩和解压缩命令

1. 压缩格式的介绍 Linux默认支持的压缩格式: .gz.bz2.zip 说明: .gz和.bz2的压缩包需要使用tar命令来压缩和解压缩.zip的压缩包需要使用zip命令来压缩&#xff0c;使用unzip命令来解压缩 压缩目的: 节省磁盘空间 2. tar命令及选项的使用 命令说明tar压缩和解压缩命令 …

Linux centos7安装redis 6.2.14 gz并且使用systemctl为开机自启动 / 彻底删除 redis

1.下载 && 减压 wget http://download.redis.io/releases/redis-6.2.14.tar.gz tar -zvxf redis-6.2.14.tar.gz 2.编译&#xff08;分开运行&#xff09; cd redis-6.2.14 make cd src make install 安装目录展示 3.redis.conf 配置更改 daemonize yes supervised s…

智能优化算法应用:基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.JAYA算法4.实验参数设定5.算法结果6.参考文献7.MA…

IDEA配置一个新项目

git clone xxxxx 下载项目主分支 git checkout xxx 切换到需要开发的分支上 配置maven仓库 在File下的Settings中设置maven仓库 配置maven仓库的文件夹 配置好maven后&#xff0c;项目中会出现一个红色的pom.xml文件&#xff0c;右击文件&#xff0c;点击…&#xff0c;pom…

配置Nginx解决跨域问题

Nginx 中将前端请求中的所有以 “/apiUrl” 开头的路径代理到 http://192.12.200.101:9813 例如&#xff1a; /apiUrl/login > http://192.12.200.101:9813/login 配置nginx环境 进入Nginx 的配置文件编辑界面: sudo nano /etc/nginx/conf.d/default.conf开始编辑 defaul…

基于Springboot的旅游网站设计与实现(论文+调试+源码)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

数据手册Datasheet解读-MOS管笔记

数据手册Datasheet解读-MOS管笔记 NMOS应用场景一般特征第一个参数Vdss第二、三个参数Rds&#xff08;on&#xff09;、IdMOS管的散热绝对最大额定值第一个参数-Vd第二个参数-Vdgr第三个参数-Vg(栅源电压)第四个参数-Id第五个参数-Idm第六个参数-Ptot第七个参数-Viso第七和八的…

模块四(一):搭建自己的SSR

前言&#xff1a;同构渲染是将服务器渲染和客户端渲染相结合的一种渲染方式&#xff0c;在服务端生成初始页面&#xff0c;提升首屏加载速度&#xff0c;并且有利于SEO&#xff1b;在客户端接管HTML&#xff0c;并且将静态HTML激活为数据绑定的动态HTML&#xff0c;为用户提供更…

Unity 常用资料

1. Layer layer本质是按序左移的一个Int32数字&#xff0c;int32有4个字节》32位&#xff0c;故可以支持32个层级。系统自身使用了5个层&#xff0c;意味着用户还有27个层可以使用。 0000 0000 0000 0000 0000 0000 0000 0000 可以且只能任意位为1。unity具体的0-31的层级分布…

Python实战 | 如何抓取腾讯视频

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 爬虫: 作用: 批量采集数据 / 模拟用户行为 原理: 模拟成 客户端 向 服务器 发送网络请求 环境介绍: python 3.8 解释器 pycharm 编辑器 第三方模块: reques…

委托线程安全

委托线程安全是指将对共享数据的访问委托给线程安全的类&#xff0c;从而避免在调用方代码中进行额外的同步控制。这可以通过将线程安全性限定在一个类内部来实现。以下是一个简单的例子&#xff1a; 假设有一个计数器类 Counter&#xff0c;它不是线程安全的。 public class…

使用git命令行来拉取项目

哈哈哈&#xff0c;在校的我可能更偏向用git&#xff0c;可是在实习过程中大家都用的是图形化工具&#xff0c;因为还不是太熟练&#xff0c;所以我目前还是在用的git命令行。 下边说一下大致流程吧&#xff01; //拉项目 git clone 仓库地址 //根据项目来安装依赖 npm或者y…

公众号提高上限怎么操作?

一般可以申请多少个公众号&#xff1f;众所周知&#xff0c;在2013年前后&#xff0c;公众号申请是不限制数量的&#xff0c;后来企业开始限制申请50个&#xff0c;直到2018年的11月tx又发布&#xff0c;其中个人主体可申请公众号由2个调整为1个&#xff0c;企业主体由50个调整…