#tor #匿名 #arti #networking

tor-proto

异步客户端实现Tor中心网络协议

33个版本 (21个破坏性更新)

0.21.0 2024年8月1日
0.20.0 2024年6月27日
0.19.0 2024年6月5日
0.16.1 2024年3月4日
0.0.0 2021年6月24日

#65 in 加密学

Download history 527/week @ 2024-04-28 308/week @ 2024-05-05 190/week @ 2024-05-12 553/week @ 2024-05-19 779/week @ 2024-05-26 485/week @ 2024-06-02 557/week @ 2024-06-09 1409/week @ 2024-06-16 1108/week @ 2024-06-23 1659/week @ 2024-06-30 248/week @ 2024-07-07 532/week @ 2024-07-14 702/week @ 2024-07-21 1402/week @ 2024-07-28 1393/week @ 2024-08-04 1026/week @ 2024-08-11

每月4,636次下载
用于 30 个crate(直接使用15个)

MIT/Apache

2MB
35K SLoC

tor-proto

核心Tor协议的实现

概述

tor-proto crate位于Arti的核心,Arti是一个用Rust实现Tor的项目。大多数人不应直接使用此crate,因为其API对于大多数用途来说过于底层,且很容易在不安全或侵犯隐私的方式中误用。

大多数人应使用arti-client crate。此crate主要对那些希望以低级别访问Tor协议的人感兴趣。

核心概念

本质上,Tor通过TLS与其他Tor实例建立称为“通道”的连接。这些通道使用TLS实现。每个通道都复用多个匿名多跳“电路”,这些电路作为“中继消息”的可靠传输,这些消息在客户端和电路上的不同中继之间发送。最后,每个电路复用多个“流”,每个流大致对应于一个应用层请求。

此crate实现了实现这些channel::Channelcircuit::ClientCircstream::DataStream的逻辑、协议和加密。它使用Rust异步代码和与future相关的特性,旨在与(几乎)任何遵循futures API的executor实现一起工作。它还应该与(几乎)任何公开AsyncRead和AsyncWrite特性的TLS实现一起工作。

不在本crate中

该软件包不实现基于Tor协议的高级协议,例如洋葱服务或Tor目录协议。它也不决定何时、如何或在哪里构建通道和电路:这是高级软件包的作用。

该软件包也不支持超时,因此这里的所有网络操作都有可能无限期地阻塞当前任务。超时是另一个在高级别添加的必要组件。

为了创建通道和电路,您需要了解一些Tor中继站的信息,并通过tor_linkspec::ChanTargettor_linkspec::CircTarget暴露这些信息。目前,tor-netdir软件包是实现此功能的最简单方法。

关于此软件包的示例,请参阅arti-client库或arti CLI。

设计说明

该软件包的API结构旨在限制异步运行时的使用:它只在必要时启动任务或创建计时器。

在尽可能的情况下,该软件包避免在其用于网络活动的函数中执行公钥密码学。这使得高级代码更容易并行化或让出公钥操作。

此外,该软件包试图避免了解或编码有关其对象(通道、电路、流)的用途的信息。也就是说,只要可能,我们编码对象应该如何行为,而不是它应该为什么那样行为。例如,该软件包中的Circuit对象会记住电路建立的路由,但不会记住电路所服务的目的或可能被用于什么。这是其他软件包执行此类规则的责任。

为什么以这种方式将行为与目的分开?我们这样做是为了防止我们在C tor实现中遇到的一种逻辑过载,其中使用信息与行为设置没有分开。由于使用信息可用,在代码库的所有位置,C tor代码都在许多地方趋于复杂逻辑,涉及该使用信息以设置个别行为。正因为如此,向C tor添加新的用途或行为变得相当复杂。我们正在尝试在Arti中避免这种复杂性。

限制

这些都是正在进行中的工作,完成前需要严重重构。

这是一个仅限客户端的实现;没有支持中继站需要的操作。

有许多缺失的功能无法列出。

文档或示例不足。

这是我在Rust中使用异步的第一个尝试,可能相当糟糕。

我敢打赌,在这段代码中某处存在死锁。我修复了我能找到或想到的所有死锁,但找到一种消除我们拥有的每一个锁的好方法会更好。

许可证:MIT OR Apache-2.0

依赖关系

24–36MB
~564K SLoC