匿名保密通讯资料总结

其他 · 2023-11-26 · 765 人浏览

概述

这次毕设我是打算设计一个保密且匿名的通讯网络,利用一些我接触到的比较新的一些技术和理念,主要参考了Tox的设计方法与区块链的分布式文件存储功能,来实现一个匿名且不可溯源的聊天网络。

结构简介

这个网络是P2P的对等网络,也就意味着每个客户端都是对等客户端,不过基于性能考虑会分为两类端:

  • 轻量端:也可以称为中继端,主要作用是承担DHT网络节点、洋葱中继以及大蒜中继的功能,同时担任网络存储节点。
  • 全量端:也可以称为客户端,具有全部功能,,不会存储DHT网络的信息但是会作为洋葱中继以及大蒜中继。

    目标

  • 保密:利用密码学对每一条消息进行加密,并且保证向前和向后安全。
  • 匿名:利用洋葱路由与大蒜路由技术来实现通讯的## 分布式散列表(DHT)模块
    这是程序的核心,也是程序的底层架构,每个节点都会在DHT网络中获得一个临时DHT密钥,临时DHT密钥与节点的IP地址是一一对应的,泄露了临时DHT密钥地址就会导致IP地址泄露,每次启动程序时会自动随机生成。
    保密,保证发送者与接受者无法知晓互相的真实IP地址,且在中继存在一定数量的钓鱼节点的情况下保证无法获取完整的内容信息。
  • 安全:能够抵御常见的网络攻击,且能够应对检测。

实现方法

加密模块

加密主要由加密模块提供服务,加密模块提供了在软件中所需要使用的加密方法接口。

网络模块

网络通讯主要由网络模块提供服务,Tox为了实现端到端通讯,主要采用的是UDP打孔进行通讯,可是这样做意味着你需要向你的通讯对象提供你的IP地址。为了匿名性,本软件主要采用TCP的方式进行数据传输。

洋葱、大蒜模块

这个模块是匿名的实现,模仿洋葱路由与大蒜路由的方法对流量进行传递,防止溯源。
每一次流量的发出都会经过洋葱与大蒜模块,使得追踪这些流量几乎为不可能。

Tor路由实现匿名访问互联网的原理正如它的名字一样,多层加密、多次转发、层层解密。第一代Tor使用的多次非对称加密算法对数据包进行多次加密,加密数据通过多个中继层层解密,在出口节点恢复原始数据,交付到目标服务器,再由相同路径返回服务器响应报文。

第二代Tor增加了安全的转发信息,对路由的拥塞选择控制协议,通过目录服务器向Tor客户端分发中继节点序列,由客户端经过一定的路由选择策略随机选取三个中继节点建立匿名路径,中间路由过程之间使用TLS协议相互交换,客户端向第一个节点使用非对称加密算法交换对称加密算法密钥并维持一段时间,交换成功之后就使用对称加密算法对数据包进行多次加密,并在出口节点恢复原数据报送达目标服务器,再由相同路径返回服务器响应报文,相较于第一代Tor全程使用非对称密码算法的做法第二代的方法也十分安全,并且替换为对称密码算法之后对服务器和客户端的加密解密计算量大大减少,从而提升了效率,让低延迟的保密通讯成为可能。

以上具体使用到的密码算法在接下来的部分详细描述。

洋葱匿名路径的建立过程

1. 获取洋葱路由序列

客户端首先会向洋葱路由目录节点请求洋葱路由表,经过一定的筛选之后选出其中三个准备建立匿名路径。

2. 洋葱代理与洋葱守卫节点密钥交换

选出洋葱中继节点后选择其中一个作为守卫节点,守卫节点是一个常驻节点,他在一定时间内不会变化,用于反追踪的最后一道防线。洋葱客户端通过洋葱代理与洋葱守卫中继节点使用DH密钥协商协议交换AES密钥,交换完成后不会再使用非对称密码算法进行数据交换,而是通过对称密码算法进行加解密,在保证密钥安全性的条件下,此次加密通讯破解以目前的算力来看是不可能的。由于进行了密钥交换,短时间内不会改变你的守卫节点,以减少与洋葱网络通讯的开销。

3. 洋葱数据报文生成与交换解密

Tor使用的是多层加密模式,在原始数据报文上嵌套TLS协议加密,每次使用不同的密钥,就像洋葱一样一层一层,每经过一个中继节点就能会解密一层,每一个节点都不知道上一个节点是谁,只有最终出口节点知道自己是出口节点,并将原始数据报文送达目标服务器,再接收服务器响应报文,使用之前建立的洋葱匿名路径,多层加密,每经过一个中继节点解密一层,当到达客户端时会只剩下一层加密,对其进行解密就能获取服务器响应报文。
Tor-普通服务器.png

4. 洋葱隐藏服务访问原理

Tor服务器不只能访问表层网络,还有基于Tor的隐藏服务(Tor Hidden Service,以下简称HS)。

洋葱客户端访问HS的方法与访问普通表层互联网的方法有些不同,首先假定客户端通过某些方式得知了一个HS的域名,并且想要访问它,那么洋葱客户端首先要通过洋葱隐藏服务目录服务器发起查询请求,获取HS的公钥与介绍节点。

客户端使用Tor选取一个约会节点并产生一个一次性的Cookie用于身份验证。将Cookie与约会节点的信息打包使用HS的公钥进行加密后,通过洋葱路由将数据包送达介绍节点——介绍节点是一个固定的服务器,它能将通过Tor将你的数据包送达目标HS。

HS收到数据包之后使用自己的私钥进行解密,获得约会节点与Cookie,通过Tor连接约会节点并使用Cookie验证双方身份,从而实现数据交换。
Tor-HS.png

洋葱路由的弱点与对应解决方法

客户端首先会向洋葱路由目录节点请求洋葱路由表,而这个洋葱路由表是一个公开的信息,这也就导致只需要通过防火墙封杀相关路由表中的所有IP即可完成,这种情况下即可导致无法使用该匿名上网方式,可以参考区块链的分布式散列表来动态的生成洋葱路由表,这样使得客户端只需要上线即可加入路由网络,且通过封禁IP的方式会导致大面积误伤。

分布式散列表(DHT)模块

这是程序的核心,也是程序的底层架构,每个节点都会在DHT网络中获得一个临时DHT密钥,临时DHT密钥与节点的IP地址是一一对应的,泄露了临时DHT密钥地址就会导致IP地址泄露,每次启动程序时会自动随机生成。

在DHT网络中,我们可以很轻易的获取周围节点的DHT密钥并进行链接,而不用担心身份泄露,因为DHT密钥与用户身份没有关系,故而所有节点都可以作为DHT节点,为了保证匿名性,所有节点都可以作为洋葱的中继节点。

身份模块

用于向其他人表明自己的身份,使用一个非对称密码算法的公钥来标识不同的人员身份,这个公钥不应当公开,在DHT网络中你可以将此公钥交付与DHT网络中的任意一个节点,并设置洋葱路由包,其中包括一条完整可以路由到你的主机的洋葱路径。

当其他人得知你的用户公钥时,可以通过DHT网络获取你的洋葱路由包来向你发送握手信息,类似与洋葱隐藏服务器,具体实现在其他模块描述。

765 Views
本站已在互联网运行了 Theme Jasmine by Kent Liao