system: [SYSTEM]

user: 3. Tor与I2P的关键技术 由于Tor与I2P在开发理念不完全相同，因此两个网络在一些网络关键技术上存在差异 [ 8 ] [ 9 ]，表1列出了Tor与I2P在关键技术上的差异，这直接影响了网络的功能与性能。 Table 1 Tor vs I2P: key technologie 技术 Tor I2P 端口 SOCKS I2P API 电路/隧道配置 三跳电路 用户可随机配置隧道数 单向/双向 双向电路 单向隧道 对等体选择 基于带宽的对等体选择 基于性能的对等体选择 目录服务器 7个完整数据的目录服务器 分布式DHT(NetDB) 端到端加密 链接和分层加密，但不是端到端加密 端到端、链接和分层加密 退出节点/隐藏服务 许多退出节点、隐藏服务较少 一个退出节点，集成了许多隐藏服务 隐藏服务提供方式 隐藏服务在外置TCP服务器上 许多隐藏服务在内置服务器中 数据交换 电路交换 分组交换 数据传输 仅通过TCP传输 通过TCP和UDP传输 系统实现 在C中实施 在Java中实施 表1. Tor和I2P比较：关键技术 3.1. 接口技术 Tor使用Socket Secure (SOCKS)接口，因此SOCKS能够感知应用程序，可以很容易地指向Tor软件，这表明，采用SOCKS的应用程序无需任何更改，可以直接使用。另一方面，I2P是一个中间件，提供应用程序可用于通过网络进行通信的API，这意味着应用程序需要进行复杂地调整。SOCKS与I2P API，极大地改变了构建使用I2P或Tor网络，通过Internet进行匿名通信的应用程序的工作量和能力。SOCKS接口只能通过TCP传输消息，而I2P可以在UDP和TCP之间进行选择，这可以使I2P在使用某些应用程序时提供更好的性能。 Tor主要是为匿名访问公共互联网而设计的，因此它设计了许多退出节点和代理，而I2P网络的核心设计目标是允许匿名托管服务(隐藏服务)，并不是专注于匿名访问公共互联网。I2P可以通过“out proxies”提供对公共互联网的直接访问，但该功能由各种内部服务提供，以代理到其他匿名系统 [ 10 ]。 I2P API专为匿名和安全而设计，而SOCKS专为功能而设计。在I2P中，确保总安全性不会检测到客户端活动。 Tor使用SOCKS有两个缺点： 1) SOCKS接口只能通过TCP传输消息，而I2P可以在UDP和TCP之间进行选择，这可以使I2P在使用某些应用程序时提供更好的性能。 2) 应用程序发送的消息可能仍包含可识别发件人的信息。为了防止这种情况，需要使用具有过滤功能的应用程序级代理Privoxy。 3.2. 隧道技术 Tor是通过“电路”双向传递消息的，即：入站和出站消息是同一条电路，如图6所示；而I2P是通过“隧道”单向传递消息，即入站和出站消息是不同的两条隧道，并且这两条隧道每隔10 min重新建立，如图7所示。Tor的出站端点是公开的，未隐藏，而I2P的出站端点被隐藏。 图6. Tor的电路 基于电路或隧道的通信是Tor或I2P匿名的核心，其中I2P用户(I2P路由器)的身份与I2P应用程序的身份分离。从匿名的角度看，I2P的单工隧道暴露的流量数据，是Tor的双工电路暴露的一半，而在I2P中，构成请求的数据包将通过一个或多个出站隧道传出，构成响应的数据包将通过一个或多个不同的入站隧道返回。 Tor依靠志愿者提供的服务器来构建电路，但I2P使用具有足够性能特征的对等体参与网络来构建隧道。从技术角度来看，由于具有更好的内存管理和低客户端带宽开销，Tor显得更高效，但在I2P中实现了性能排名机制、允许分析节点的实际性能等，I2P服务比Tor中的隐藏服务更快。 图7. I2P的隧道 在Tor中，由于缺少覆盖流量，攻击者可能会使用流量分析和定时攻击来监控流量模式，跟踪消息流并识别通信方。I2P隧道中的跳数在0到7之间变化，其中隧道中的更多跳数会增加匿名性，但因为数据需要遍历更多中间节点会降低性能 [ 11 ]。 3.3. 对等体选择 Tor和I2P都运行特定的节点选择算法，以提高性能并防范攻击者。Tor是基于带宽的对等体(Peers)选择，I2P是基于性能的对等体选择。对等体选择的目的是快速地构建电路或隧道 [ 12 ]。 在Tor网络中，它的目录服务器使用有源带宽探测来测量和记录每个OR (Onion Routers)能够提供的带宽，如果没有针对此特定OR的探测数据，Tor还必须依赖各自发布的带宽值，带宽信息用于以加权概率方式选择中间路由器和出口路由器。Tor客户端使用路径选择算法来选择用于构建电路的OR，只要测量值可用就优先采用，Tor中的所有其他OR都选择时的概率与其带宽成正比。这意味着仅考虑带宽，而忽略其他属性(如OR的实际位置)。 在I2P网络中，I2P客户端依赖于先前监控的性能值和网络的当前状态，不使用有效带宽探测。I2P节点选择算法，能够非常快速地对失败的对等体和网络拓扑中的其他变化做出反应，通过不断分析和排名性能来选择对等体，而不是信任所声称的容量。 由于Tor在选择OR时仅考虑带宽，而忽略其他属性(如OR的实际位置、时延)，这可能导致高延迟和网络的负载不均衡，现有资源可能无法得到最佳利用。在I2P中，由于隧道的生命周期较短，一些I2P用户很可能会使用一个或多个损坏的对等体来构建隧道，快速响应故障节点的这种行为存在安全问题，同时，I2P在选择对等体时也不考虑I2P对等体的位置，这会导致高时延，所构建的隧道也不是最佳的。 3.4. Tor目录服务器与I2P NetDB Tor和I2P的主要区别在于两个网络如何管理参与者。Tor和I2P都使用目录来存储网络元数据，即：维护网络运行所需的元数据(参与者或应用程序的信息、部署在网络中的服务) [ 10 ] [ 13 ]。 Tor使用中央服务器目录协调其Tor节点，该目录包含每个列出的OR (Onion Router)的路由器描述符和网络状态文档，每个OR还维护两个密钥：一个长期身份密钥，用于签署TLS证书、路由器描述符和目录；一个短期的洋葱密钥，用于解密用户建立电路的请求并协商短期对称密钥。路由器描述符唯一地标识每个OR(Onion Router)并包含要联系的所有相关数据：公钥、IP地址、带宽、退出策略等，网络状态文档包含OR的测量带宽，提供网络的整体视图和统计检索。 I2P网络使用分布式目录协调其I2P路由器，基于分布式Kademlia数据库和用于对等选择的对等分析算法，构建具有自组织的网络数据库NetDB，协调和存储所有系统元数据。I2P的NetDB存储由Leasesets和Routerinfos组成的网络元数据，它是一个分布式哈希表，由填充节点组成。由于Floodfill节点是具有高带宽速率的普通I2P路由器，因此NetDB不是由整个网络构成的，而是仅由所有I2P路由器的子集构成。有关I2P路由器的信息收集在称为Routerinfo的结构中，该数据结构保存该特定I2P路由器的所有联系信息。I2P应用程序不是通过普通的 < IP地址，端口号 > 元组来识别，而是通过与位置无关的标识符(称为I2P目标)来识别。I2P目的地连同一组加密密钥(用于将加密数据发送到应用程序)、签名密钥和用于接收数据的网关列表收集在称为Leaseset的结构中。I2P路由器由Routerinfo标识，而I2P应用程序由租赁集Leaseset标识。 集中式架构存在单点故障的风险，I2P使用分布式哈希表(DHT)，每个对等方负责分析其他路由器，以确定如何最好地利用可用资源，分布式组件可以加强网络并使其更有弹性，同时分布式架构系统消除了单点故障风险。 3.5. 路由方法 由图8、图9对比可知，Tor和I2P网络有相似之处和不同之处。这两个匿名服务的共同目标是通过使用多层加密，将流量中继到多个站点来提供匿名性，多层加密用于强化和拒绝用户与其消息之间的链接。就用于中继流量的路径而言，Tor网络和I2P网络上的路径发生变化并且不固定，用户将保持连接到一个路径(电路隧道级联)的持续时间根据匿名系统的不同而不同，两种匿名服务的路由技术和路径选择也不同 [ 14 ]。 图8. 洋葱路由 图9. 大蒜路由 洋葱路由的目的是让对手更难以进行流量分析，同时首先要保护两个与第三方相互认识的参与者的不可链接性，其次是保护身份。由图8可知，只有电路中的第一个OR知道客户端的IP地址，并且只有电路的最后一个OR知道消息的接收者，所有中间OR只知道它的前身及其后继者，甚至不知道哪些其他OR正在参与电路，通过三个节点间的双向电路构成网络。由于缺少覆盖流量，攻击者可能会使用流量分析和定时攻击来监控流量模式，跟踪消息流并识别通信方。 大蒜路由是洋葱路由的扩展，消息通过使用分层加密的几个中间节点，从其始发者路由到最终端点。由图9可知，通过单向隧道将I2P路由器连接起来，每个隧道由网关(入口点)，一组参与者(中间节点)和一个端点组成，隧道中的I2P路由器均不知道客户端的IP地址和消息的接收者，构成输入隧道和输出隧道的I2P路由器至少有6个。由于所有的I2P流量均在网络内部，因此I2P具有很强的匿名性和对抗“流量分析”、“Sybil攻击”的能力。 大蒜路由与洋葱路由非常相似，但其技术上存在一些差异。一是大蒜路由中，可以聚合多条消息，二是大蒜路由中隧道是单向的。 I2P中的大蒜路由主要采用三个不同的阶段：一是通过单向隧道构建路由(分层加密)；二是对于消息进行捆绑，通过分组交换，确定端到端消息传递的成功或失败；三是用于发布一些网络数据库NetDB条目，进行数据库维护。 3.6. 消息机制和交换方法 如图10所示，Tor协议中的协议数据交换使用的是固定长度的Cell，流量在网络中以固定大小的单元进行传输，每个单元是包含头和有效载荷的12字节数据。头包括一个线路标识符(这个单元使用哪条线路)和一个指令(指明将要对这个单元的数据做什么)。中继单元在有效载荷数据之前有额外的头(中继头)，包含了一个stream ID、一个端到端的校验和、中继负载的长度和一个中继命令。 图10. Tor网络的Cell结构 图11. I2P网络的message结构 在图11中，I2P网络内的信息以I2NP (I2P网络协议)消息的形式交换，主要由传送指令和有效载荷组成，由于大小限制，它可以包含整个消息或仅包含部分消息。为了防止定时攻击，收集特定路由器的多个消息并将其组合成所谓的隧道消息。此消息包含该路由器的ID，用于加密有效负载的IV和有效负载本身，其中包含校验和、填充以及路由器收集的消息，格式为“交付说明”消息)和I2NP本身(称为“Clove”)。 同一个连接中的指令与数据，在Tor中沿着通过TCP协议建立的电路(Ciruit)流动至目的节点，而在I2P中，连接被消息机制(Message)打散为数据包，经由不同的TCP或UDP隧道(Tunnel)交叉传输后，在接收方重组为数据流，即：I2P基于包(分组)切换而Tor基于电路切换。因此，Tor经常应对高拥塞导致高延迟，而在I2P中，分组交换导致一些隐式负载平衡，并有助于避免拥塞和服务中断。这对于大型文件传输尤为重要，因此I2P更适合此类用途。 I2P网络中的所有对等体经常发送消息(端到端和网络维护消息)，端到端消息沿其路径改变大小和数据，路由器间通信既加密又流式传输(使得两个1024字节的消息与一个2048字节的消息无法区分)，所以外部攻击者也无法访问消息。 虽然Tor和I2P都使用分层和有序路径(隧道和电路/流)，Tor是一个电路交换网络，但I2P是一个分组交换网络，允许I2P透明地路由拥塞或其他网络故障、操作冗余路径，并跨可用资源负载平衡数据 [ 14 ]。 3.7. 退出节点和隐藏服务 Tor网络中有许多退出节点，针对具有大量出口路由器的出口流量进行了优化和设计，主要原因是由于其设计理念决定的：Tor主要致力于为用户提供匿名访问网络以外的(Internet)网站，同时还在Tor网络中托管了网站(隐藏服务)。 但在I2P中，只有少数Outproxies (Tor术语中的退出节点)作为标准Internet的网关运行，这主要也是I2P网络设计理念决定的：I2P专为I2P网络内的匿名通信而设计，I2P提供多种应用程序，同时也在I2P网络中托管了部分网站(隐藏服务)，所提供的服务几乎覆盖了整个Internet，所以它的代理很少。 当使用实时交互式服务时，Tor和I2P都试图提供具有低延迟的强匿名性。由于Tor与I2P相比具有更多的退出节点，这些退出节点易于受到攻击，因此其安全性较差。 Tor与I2P都构建了匿名服务，I2P现有的应用几乎包括了绝大部分典型的因特网应用，但Tor提供的隐藏服务在外置服务器上，而I2P提供的隐藏服务在内置服务器上，Tor的规范用法是访问外部服务 [ 15 ]，而I2P规范用法是访问内部服务 [ 16 ]。 3.8. TCP/UDP传输 由于Tor网络中的节点间(除出口节点与服务器)使用TLS进行加密连接构建电路，TLS用于防止可能的攻击者修改数据，冒充洋葱路由器，提高网络效率和安全。Tor使用SOCKS接口与Internet进行交互，提高用户的匿名性。但TLS、SOCKS都是基于TCP协议的，所以Tor的中继之间使用TCP连接，并且多个TCP流可以共享一个虚电路，每个OR都使用TLS连接到其他的OR。 而在I2P网络中，节点间全部使用TLS进行加密连接构建隧道，节点发现使用Kademlia的XOR距离算法。TLS、Kademlia分别基于TCP和UDP，所以I2P的路由之间既使用TCP连接又使用UDP进行数据传输。I2P的传输连接是两个对等传输协议NTCP和SSU，NTCP是基于NIO的TCP，SSU是安全半可靠的UDP(它的主要目的是通过隧道安全地传输I2NP消息，仅加密UDP功能)。I2P同时使用TCP和UDP传输，对于某些深度包检测(DPI)设备来说，UDP可能更难以跟踪。 I2P能够使用TCP以及不可靠的UDP进行传输，因此，I2P会话的设置速度比Tor隐藏的服务会话更快，并且具有更低的延迟 [ 17 ]。