system: [SYSTEM]

user: 2. Tor和I2P网络 Tor和I2P网络有相似之处和不同之处 [ 1 ]。这两个匿名服务的共同目标是通过使用多层加密，将流量中继到多个站点来提供匿名性，多层加密用于强化和拒绝用户与其消息之间的链接。Tor主要致力于为用户提供匿名访问网络以外的网站，而I2P提供匿名访问在I2P网络本身内私下托管的网站。与此同时，Tor还在Tor网络中托管了网站(隐藏服务)，而I2P支持访问Internet上托管的网站，但不支持使用外部代理访问I2P网络 [ 2 ]。就用于中继流量的路径而言，Tor网络和I2P网络上的路径发生变化并且不固定，用户将保持连接到一个路径(电路隧道级联)的持续时间根据匿名系统而不同。两种匿名服务的路由技术和路径选择也不同。 2.1. Tor和I2P的匿名 作为最受欢迎的匿名通信系统Tor和I2P，通过其加密和通信方案提供强大的匿名性 [ 3 ]。 基于电路的通信是Tor匿名的核心 [ 4 ]，其中Tor用户(Tor节点)的身份与Tor应用程序的身份分离。Tor匿名是基于“集中式目录”、“全双工电路”、“洋葱路由”，隐私保护是通过“消息”、“电路交换”而实现的，密码规格使用流密码(AES128)、公钥密码(RSA1024，固定指数65537)、Diffie-Hellman协议(1024位安全素数)和散列函数(SHA1)。Tor支持两种操作模式：第一种操作模式“Web代理”或“Service proxy”，它允许与非Tor启用的系统(普通的Internet)进行传统通信；第二种操作模式称为“隐藏服务”，它消除了与普通Internet的传统通信，Tor确保传输到网络中的数据永远不会离开混合，这意味着只能访问参与此类网络的服务，并且Tor内的用户对于TCP/IP的2~4层上可用的信息完全是匿名的 [ 5 ]。 基于隧道的通信是I2P匿名的核心 [ 4 ]，I2P的匿名性在于将用户的身份(由路由器信息提供)与其正在运行的应用程序(由其租赁集提供)分离。通过“分布式目录”、“单向隧道”、“大蒜路由”、“细胞”、“分组交换”而实现匿名和隐私保护，密码规格使用流密码(AES256-CBC)、公钥密码(ElGamal2048，DSA1024)、Diffie-Hellman协议(2048位安全素数)和散列函数(SHA256)。由于I2P网络可以集成各种应用程序，同时可以匿名的提供全部典型的Internet应用，所以I2P只提供“隐藏服务”一种操作模式 [ 6 ]。I2P也可以通过“out proxies”提供对公共互联网的直接访问，该功能由各种内部服务提供，主要目的是代理访问其他匿名系统。 Tor、I2P的域名、节点和路由器采用了与位置无关的标识符(服务描述符–隐藏服务)加密密钥标识。 1) 域名生成算法步骤如图1所示。 图1. 匿名域名生成算法流程 由于域名是公钥的一部分，保证了网站的匿名性和安全性，可以提供隐藏服务。 2) I2P中的节点标识符、路由标识符计算公式为：NetDB中的节点标识符Node_ID=SHA1(IP Number) || Random，路由标识符Routing_id = SHA256(Node_ID || 时间戳)。 Node ID和Route ID的生成算法关键程序如下： public void ipDeal(ip){ if(ipv4){ long=iptolong(ipv4); binStr=ip.toBinaryString(long); randStr=rand.generateString(128); }else if(ipv6){ big=ipv6toInt(ip); binStr=big.toString(2); randStr=rand.generateString(32); } result=binStr.concat(randStr); sha1=DigestUtils.sha1Hex(result); Str=result.concat(timestamp); sha256=DigestUtils.sha256Hex(Str) } 在生成Node ID的时候，首先将IP地址(IPv4或IPv6)转化为十进制数，然后再转化为二进制数，当得到的二进制数不足32位(或128位)时，在二进制数的左边补0，然后与用随机数发生器产生128位(或32位)的随机数“凑合”，再采用SHA1生成160位的Node ID；再将Node ID与时间戳“凑合”，采用SHA256加密得到Route ID。 在创建Node ID和Route ID时，由于Node ID为160位，Route ID的位数为256位，160位的Node ID与时间戳、随机数发生器产生的随机数“凑合”，组成256位的Route ID，这样保证了路由器IP地址的匿名性和动态性，同时增加了攻击者的难度。 2.2. Tor和I2P的体系结构 1) Tor系统架构和协议层次 Tor是用C语言编写的匿名P2P网络的多应用程序，图2表示了Tor网络体系结构、协议层次模型。 图2. Tor协议层次模型 在图2中，Tor层是Tor网络的关键部分，由Tor路由节点建立通信电路，可以将其看作为代理服务器，是它将客户端数据传输到网络中，并从网络中获取服务器端数据。应用层主要有应用代理和退出的连接功能；Tor协议层主要有洋葱路由、电路创建协议；传输层有TCP、SSL/TLS协议，TLS的主要功能是用于电路的加密。 2) I2P系统架构和协议层次 I2P是用Java编写的匿名P2P网络的多应用程序框架 [ 12 ]，图3概述了I2P架构、I2P协议层次模型。 图3. I2P协议层次模型 I2P框架的核心是I2P路由器，它是I2P协议的关键组件。I2P是围绕所谓的I2P路由器构建的应用程序框架(或中间件层)，路由器是一个在主机上运行的软件组件，为本地I2P应用程序提供连接，应用程序可以访问隐藏服务(作为客户端)，也可以托管服务(作为服务器)。应用程序之间的连接通过完全分散的对等网络实现，该网络作为IP上的覆盖层运行。应用程序可以使用称为NTCP的类TCP协议，也可以使用称为SSU的类UDP协议，路由器将这些连接映射到基于数据包的I2P隧道，这些I2P隧道使用标准大蒜路由提供匿名性，隧道由链中最外层的对等体和唯一的Tunnel ID标识。 3) Tor和I2P架构比较 Tor和I2P架构体现了两个匿名网络的设计理念差别，Tor允许匿名访问分别实施和操作外部的互联网服务，解决“匿名性”和“隐藏服务”，侧重应用层设计，构建了一个“覆盖网络”。I2P试图将现有的互联网服务转移到I2P网络，并在框架内提供服务实现，提供匿名文件共享和匿名网络托管，解决“匿名性”、“隐藏服务”和“安全性”，侧重网络层设计，构建了一个“虚拟互联网” [ 7 ]。 2.3. 工作流程 1) Tor工作流程 图4. Tor网络工作流程 图4说明了Tor网络的工作流程，用户可以通过搜索Tor目录服务器或网桥登录Tor网络。 2) I2P工作流程 图5说明了I2P网络的工作流程，用户可以通过搜索I2P NetDB的路由器联系信息和目的地联系信息登录I2P网络。 图5. I2P网络工作流程 由图4、图5的工作流程对比可以看出，Tor围绕可信赖的权威服务器构建进行集中式设计。这些服务器中的每一个都跟踪网络中的所有节点及其性能。权限服务器定期发布此列表供客户端使用。客户端从此列表中选择节点以创建加密隧道，直到它们到达出口节点。然后，这些出口节点充当代理，允许Tor用户访问公共Internet (称为clearnet)，而不会泄露其身份。由于只有少数可信任的授权服务器，因此这些节点的完整性对整个网络至关重要，使其成为攻击的重要目标。此外，由于所有权威机构都需要跟踪整个网络并定期就其状态达成一致，因此该设计的可扩展性有限。 用户使用I2P时，首先访问分布式数据库NetDB，NetDB保留两种类型的记录：路由器联系信息和目的地联系信息，路由器联系信息存储在RouterInfo结构中，该结构包含到达对等方所需的信息：路由器标识、IP地址、端口、公钥等。leaseSets结构中存储目的地信息，该结构包含：隧道网关路由器标识符、域名标识符、公钥等。如果应用程序想要访问I2P服务，首先需要找到该服务，它要求路由器提供服务信息，路由器可以在本地存储该服务信息并且能够立即将其返回给应用程序。