跳转到内容

Tor — 用三层洋葱皮让没人知道你在上网

待复核

Tor 是一个低延迟的匿名通信系统——你的流量经过三个中继节点(relay,负责转发的志愿机器),每一跳都剥掉一层加密,最后到达目标网站,途中没有任何单个节点能同时知道”谁在发”和”发给谁”。日常类比:你想寄一封匿名信,于是把信装进三层信封,最外层写着中间人 A 的地址,A 拆一层看到中间人 B 的地址转寄,B 再拆一层看到中间人 C 的地址转寄,C 拆掉最后一层取出信投递。每个中间人只知道自己的前后一站,没人能把寄信人和收信人对上。

这篇论文是 2004 年 USENIX Security 的工业级设计文档,在美国海军研究实验室 1990 年代第一代洋葱路由的基础上做了大幅改进:加入前向安全、目录服务器、拥塞控制、隐藏服务等。截至 2020 年代,Tor 网络仍有约 7000 个志愿中继在运行,是目前互联网上部署最广的匿名通信基础设施。

不理解 Tor,下面这些事都没法解释:

  • 为什么 .onion 域名能让服务端也匿名——不是只保护客户端,服务器 IP 同样隐藏
  • 为什么端到端加密(如 HTTPS)保护内容,但不保护”谁和谁在通信”这个元数据——Tor 专门解决的就是元数据泄漏
  • 为什么匿名网络选择”低延迟 + 非完美安全”而不是”高延迟 + 理论完美”——这是实际部署的工程取舍
  • 为什么全球监控者(能看到所有流量的对手)仍然能通过流量关联攻击破解 Tor——论文自己承认了这个边界

论文的关键贡献可以拆成四块

  1. 伸缩式电路构建(telescoping circuit construction):第一代洋葱路由一次性把整条路径的密钥打包成一个”洋葱”交给第一跳。Tor 改成逐跳协商——先跟节点 A 建 TLS 连接并协商密钥,再通过 A 向 B 发 EXTEND 命令协商第二层,再通过 A→B 向 C 协商第三层。类比:不是一次塞好三层信封,而是每到一站再加一层锁。好处:每一跳独立做 Diffie-Hellman(双方各出一半秘密拼出共享钥匙)密钥交换,攻破一个节点不影响其他层。

  2. 前向安全(perfect forward secrecy):每条电路用临时密钥,电路关闭后密钥销毁。即使将来中继的长期私钥泄漏,过去录到的加密流量也解不开。类比:你每次通话用一次性密码本,通话结束撕碎,事后录音也没法破译。

  3. 目录服务器 + 出口策略:一组受信任的目录服务器维护”哪些中继在线、带宽多少、出口策略是什么”的签名列表。出口策略让每个中继自己声明”我愿意转发到哪些端口和 IP 段”。类比:黄页只登愿意接单的快递员,且每人可贴纸条写”只送市区、不送快递柜”。

  4. 隐藏服务(hidden services):通过引入点(introduction point)和会合点(rendezvous point)让服务器端也匿名。服务器不直接暴露 IP,而是在 Tor 网络内设一个”约会地点”,客户端和服务器各自建一条电路到那里碰头。

通信最小单位是单元(cell),固定 512 字节。控制单元在相邻节点间传递(CREATE / DESTROY 等);中继单元沿整条电路传递用户数据(RELAY DATA、RELAY EXTEND、RELAY BEGIN、RELAY SENDME——每收约 100 个数据单元回一个 SENDME,类似 TCP 窗口)。

案例 1:一条 Tor 电路的建立过程

Section titled “案例 1:一条 Tor 电路的建立过程”

假设你要访问 example.com,Tor 客户端(OP,onion proxy,本机上的洋葱代理)大致做:

1. 目录 → 选 Guard / Middle / Exit
2. OP ↔ Guard: CREATE → 共享密钥 K1
3. OP → Guard: RELAY EXTEND(Middle) → 协商 K2
4. OP → … → Exit: RELAY EXTEND(Exit) → 协商 K3
5. 发送: encrypt(K1, encrypt(K2, encrypt(K3, data)))

逐部分解释

  • CREATE:跟下一跳握手要钥匙;EXTEND:请当前电路帮你把握手转给更远的一跳
  • 发送时从内到外叠三层加密;Guard 只解 K1,Exit 解到明文再交给 example.com
  • 关键:Guard 知道你是谁但不知道去哪;Exit 知道目的地但不知道你是谁

案例 2:隐藏服务的”约会”流程

Section titled “案例 2:隐藏服务的”约会”流程”

Bob 跑一个 .onion 网站时:

Bob → 选引入点,签名发布到目录
Alice → 选会合点,带一次性令牌建电路
Alice → 经引入点把「会合点+令牌」转给 Bob
Bob → 另建电路到同一会合点,出示令牌
会合点 → 把两条电路接上,双方通信

逐部分解释:引入点像前台传话、会合点像双方都不暴露住址的咖啡馆;全程没有人需要知道 Bob 的真实 IP,Alice 的 IP 也被自己的电路盖住。

中继管理员可在配置里声明出口范围(示意):

# 只做中间转发,不当出口
ExitPolicy reject *:*
# 只允许网页出去
ExitPolicy accept *:80
ExitPolicy accept *:443
ExitPolicy reject *:*

逐部分解释:大学机房可设 reject *:* 避免垃圾邮件投诉,仍贡献中间带宽;论文指出出口策略降低志愿者法律风险,是大规模部署的关键设计。

  1. Tor 不防全局观察者:若对手能同时监控入口和出口,用时间关联(入口发 500 字节、约 50ms 后出口出现同类流量)就能把两端对上——这是威胁模型边界,不是 bug。
  2. DNS 泄漏是常见失误:应用自己查 DNS 而不走 Tor 的 SOCKS 接口,ISP 仍能看到域名;应走 SOCKS4A/SOCKS5 把域名也交给 Tor。
  3. 出口节点能看到明文:出口到目标若不是 HTTPS,出口能读内容;Tor 保护身份不保护内容,内容靠 TLS。
  4. 低延迟换安全性:mix 网络(如 Mixminion)用延迟/重排/填充更抗分析;Tor 为网页交互选低延迟,更容易被流量关联。

适用

  • 保护上网者身份不被目标站和本地网络知道(记者、活动人士、隐私用户)
  • 隐藏服务:服务器不想暴露 IP(匿名举报、SecureDrop)
  • 绕过区域性封锁——目录与网桥(bridge)帮助在审查环境接入
  • 安全研究中隐藏来源 IP;典型网页浏览可接受约数百毫秒到数秒的三跳延迟

不适用

  • 抵抗全局被动观察者(控制大量 ISP 的国家级对手)——论文自己划了这条线
  • 需要高匿名性的邮件——应选高延迟 mix 网络
  • 高带宽应用(视频流、大文件)——三跳 + 志愿带宽,体验差,常不适合 >1–2 Mbps 持续吞吐
  • BitTorrent 等 P2P——长连接占满稀缺带宽,且协议易泄漏真实 IP
  • 1990s 中期:NRL 的 Syverson、Reed、Goldschlag 提出第一代洋葱路由——最初动机是让情报分析师在公开网上搜集信息不暴露身份
  • 悖论:若只有情报机构在用,“使用洋葱路由”本身就是标签;匿名系统需要大量普通人一起用才有效
  • 2002:Dingledine 与 Mathewson(论文署名为 The Free Haven Project)加入并重写代码,补前向安全、多目录、TCP 流等
  • 2004:论文发表时约 30 多个志愿节点;到 2024 年超过 7000。“second-generation”强调这是对第一代的工程重写,不是学术原型
  1. 匿名 ≠ 加密:加密保护内容,匿名保护身份;Tor 管后者,前者要 TLS/HTTPS。
  2. 逐跳协商比一次性打包更稳:伸缩式电路让每跳独立协商密钥——最小权限在密码学里的体现。
  3. 部署需要工程妥协:出口策略、目录服务器、低延迟,都是”理论纯度”让步于”实际可用”;用户基数本身就是匿名性来源(论文所谓 anonymity loves company)。
  4. 威胁模型要画边界:论文明确”不防全局观察者”;设计安全系统的第一步是说清防谁、不防谁。入口守卫(Guard)是论文之后的部署演进:客户端固定少量入口一段时间,降低长期随机撞上坏入口的概率。
  • Tor 项目官网与协议规范:torproject.org / torspec
  • 第一代洋葱路由:Goldschlag, Reed, Syverson, “Hiding Routing Information”, Information Hiding 1996
  • mix 网络与高延迟匿名:Chaum, “Untraceable Electronic Mail…”, 1981
  • 隐藏服务演进:Tor Rendezvous Specification v3(Ed25519 身份密钥等)
  • aes —— Tor 使用 AES-128-CTR 作为对称加密
  • libsignal —— 端到端加密的工程实现,侧重消息而非网络层
  • aes —— Tor 的中继单元加密使用 AES-128-CTR 模式
  • libsignal —— Signal 保护消息内容,Tor 保护通信元数据,两者互补
  • akamai-2002 —— CDN 把内容推向用户以提速,Tor 把流量推过中继以匿名
  • fielding-rest-2000 —— REST 定义 Web 通信架构,Tor 在其上叠加匿名层
  • cook-levin —— Tor 的安全性基于计算困难假设(DH),而非信息论完美
  • chaum-1981-mix —— 高延迟 mix 是 Tor 低延迟路线的对照系