blob: 8a15d6e6ff0f233762e7c762f549bdff7bbcaa74 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# Protocol support and compatibility in Arti
**Up to date as of Feb 2026**
Summary:
Arti runs as a client, and supports running onion services and connecting to
them. It supports using bridges and pluggable transports.
There is no support in Arti yet for running as a relay, a bridge, or a
directory authority. We are currently building those.
Arti aims for compatibility with all _currently recommended_ Tor protocols.
We have not implemented, and do not plan to implement, obsolete versions of
anything.
## Protocol support
### Client-side support
Here's a checklist of Tor [sub-protocol capabilities][subproto]
versions that we currently have
client-side support for:
* [ ] `Conflux=1` (`CONFLUX_BASE`) [^conflux]
* [x] `Cons=2` (`CONS_ED25519_MDS`) [^cons28]
* [x] `Desc=2` (`DESC_CROSSSIGN`)
* [x] `Desc=3` (`DESC_NO_TAP`)
* [x] `Desc=4` (`DESC_FAMILY_IDS`)
* [x] `DirCache=2` (`DIRCACHE_CONSDIFF`)
* [x] `FlowCtrl=0` (`FLOWCTRL_AUTH_SENDME`)
* [x] `FlowCtrl=1` (`FLOWCTRL_CC`)
* [x] `HSDir=2` (`HSDIR_V3`)
* [x] `HSIntro=4` (`HSINTRO_V3`)
* [x] `HSIntro=5` (`HSINTRO_RATELIM`)
* [x] `HSRend=2` (`HSREND_V3`)
* [x] `Link=4` (`LINK_V4`)
* [x] `Link=5` (`LINK_V5`)
* [x] `Microdesc=2` (`MICRODESC_ED25519_KEY`) [^cons28]
* [x] `Microdesc=3` (`MICRODESC_NO_TAP`)
* [ ] `Padding=2` (`PADDING_MACHINE_CIRC_SETUP`) [^padding]
* [x] `Relay=2` (`RELAY_NTOR`)
* [x] `Relay=3` (`RELAY_EXTEND_IPV6`)
* [x] `Relay=4` (`RELAY_NTORV3`)
* [x] `Relay=5` (`RELAY_NEGOTIATE_SUBPROTO`)
* [x] `Relay=6` (`RELAY_CRYPT_CGO`)
Going forward, Arti is the preferred Tor client for new feature development.
All new client features will have implementations in Arti.
[^cons28]: If a consensus method before 28 is used, we won't find IPv6
addresses correctly. All such consensus methods are currently obsolete,
though, and authorities won't negotiate them any more.
[^conflux]: The `tor-proto` crate supports conflux tunnels,
but Arti does not currently build or use them.
[^padding]: The `tor-proto` crate supports padding machines based on
[`maybenot`], but they are not currently implemented.
### Relay-side support
Relay-side support is a work in progress.
We want to support all of these [sub-protocol capabilities][subproto].
Many of them are partly implemented;
we'll check them off as they become accessible on a running relay.
* [ ] `Conflux=1` (`CONFLUX_BASE`)
* [ ] `Cons=2` (`CONS_ED25519_MDS`)
* [ ] `Desc=2` (`DESC_CROSSSIGN`)
* [ ] `Desc=3` (`DESC_NO_TAP`)
* [ ] `Desc=4` (`DESC_FAMILY_IDS`)
* [ ] `DirCache=2` (`DIRCACHE_CONSDIFF`)
* [ ] `FlowCtrl=0` (`FLOWCTRL_AUTH_SENDME`)
* [ ] `FlowCtrl=1` (`FLOWCTRL_CC`)
* [ ] `HSDir=2` (`HSDIR_V3`)
* [ ] `HSIntro=4` (`HSINTRO_V3`)
* [ ] `HSIntro=5` (`HSINTRO_RATELIM`)
* [ ] `HSRend=2` (`HSREND_V3`)
* [ ] `Link=4` (`LINK_V4`)
* [ ] `Link=5` (`LINK_V5`)
* [ ] `LinkAuth=3` (`LINKAUTH_ED25519_SHA256_EXPORTER`)
* [ ] `Microdesc=2` (`MICRODESC_ED25519_KEY`)
* [ ] `Microdesc=3` (`MICRODESC_NO_TAP`)
* [ ] `Padding=2` (`PADDING_MACHINE_CIRC_SETUP`)
* [ ] `Relay=2` (`RELAY_NTOR`)
* [ ] `Relay=3` (`RELAY_EXTEND_IPV6`)
* [ ] `Relay=4` (`RELAY_NTORV3`)
* [ ] `Relay=5` (`RELAY_NEGOTIATE_SUBPROTO`)
* [ ] `Relay=6` (`RELAY_CRYPT_CGO`)
We do not ever plan to support these:
* `Cons=1` (obsolete format)
* `Desc=1` (obsolete format)
* `DirCache=1` (no relays still support this)
* `HSDir=2`(obsolete since 2021)
* `HSIntro=3` (obsolete since 2021)
* `HSRend=1` (obsolete since 2021)
* `LinkAuth=1` (only used by RSA-only relays)
* `Microdesc=1` (obsolete format)
* `Padding=1` (deprecated)
[subproto]: https://spec.torproject.org/tor-spec/subprotocol-versioning.html
[`maybenot`]: https://docs.rs/crate/maybenot/latest
|