3 Tor Protocol Specification
8 Note: This document aims to specify Tor as implemented in 0.2.1.0-alpha-dev
9 and later. Future versions of Tor will implement improved protocols, and
10 compatibility is not guaranteed.
12 THIS DOCUMENT IS UNSTABLE. Right now, we're revising the protocol to remove
13 a few long-standing limitations. For the most stable current version of the
14 protocol, see tor-spec.txt; current versions of Tor are backward-compatible.
16 This specification is not a design document; most design criteria
17 are not examined. For more information on why Tor acts as it does,
21 - Fix onionskin handshake scheme to be more mainstream, less nutty.
23 E(HMAC(g^x), g^x) rather than just E(g^x) ?
24 No, that has the same flaws as before. We should send
25 E(g^x, C) with random C and expect g^y, HMAC_C(K=g^xy).
26 Better ask Ian; probably Stephen too.
27 - Versioned CREATE and friends
28 - Length on CREATE and friends
29 - Versioning on circuits
30 - Versioning on create cells
31 - SHA1 is showing its age
32 - Not being able to upgrade ciphersuites or increase key lengths is
36 - REASON_CONNECTFAILED should include an IP.
37 - Copy prose from tor-design to make everything more readable.
38 - Spec when we should rotate which keys (tls, link, etc)?
42 0.1. Notation and encoding
46 K -- a key for a symmetric cypher.
48 a|b -- concatenation of 'a' and 'b'.
50 [A0 B1 C2] -- a three-byte sequence, containing the bytes with
51 hexadecimal values A0, B1, and C2, in that order.
53 All numeric values are encoded in network (big-endian) order.
55 H(m) -- a cryptographic hash of m.
57 0.2. Security parameters
59 Tor uses a stream cipher, a public-key cipher, the Diffie-Hellman
60 protocol, and a hash function.
62 KEY_LEN -- the length of the stream cipher's key, in bytes.
64 PK_ENC_LEN -- the length of a public-key encrypted message, in bytes.
65 PK_PAD_LEN -- the number of bytes added in padding for public-key
66 encryption, in bytes. (The largest number of bytes that can be encrypted
67 in a single public-key operation is therefore PK_ENC_LEN-PK_PAD_LEN.)
69 DH_LEN -- the number of bytes used to represent a member of the
71 DH_SEC_LEN -- the number of bytes used in a Diffie-Hellman private key (x).
73 HASH_LEN -- the length of the hash function's output, in bytes.
75 PAYLOAD_LEN -- The longest allowable cell payload, in bytes. (509)
77 CELL_LEN -- The length of a Tor cell, in bytes.
81 For a stream cipher, we use 128-bit AES in counter mode, with an IV of all
84 For a public-key cipher, we use RSA with 1024-bit keys and a fixed
85 exponent of 65537. We use OAEP padding, with SHA-1 as its digest
86 function. (For OAEP padding, see
87 ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf)
89 For Diffie-Hellman, we use a generator (g) of 2. For the modulus (p), we
90 use the 1024-bit safe prime from rfc2409 section 6.2 whose hex
93 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
94 "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
95 "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
96 "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
97 "49286651ECE65381FFFFFFFFFFFFFFFF"
99 As an optimization, implementations SHOULD choose DH private keys (x) of
100 320 bits. Implementations that do this MUST never use any DH key more
102 [May other implementations reuse their DH keys?? -RD]
103 [Probably not. Conceivably, you could get away with changing DH keys once
104 per second, but there are too many oddball attacks for me to be
105 comfortable that this is safe. -NM]
107 For a hash function, we use SHA-1.
110 DH_LEN=128; DH_SEC_LEN=40.
111 PK_ENC_LEN=128; PK_PAD_LEN=42.
114 When we refer to "the hash of a public key", we mean the SHA-1 hash of the
115 DER encoding of an ASN.1 RSA public key (as specified in PKCS.1).
117 All "random" values should be generated with a cryptographically strong
118 random number generator, unless otherwise noted.
120 The "hybrid encryption" of a byte sequence M with a public key PK is
122 1. If M is less than PK_ENC_LEN-PK_PAD_LEN, pad and encrypt M with PK.
123 2. Otherwise, generate a KEY_LEN byte random key K.
124 Let M1 = the first PK_ENC_LEN-PK_PAD_LEN-KEY_LEN bytes of M,
125 and let M2 = the rest of M.
126 Pad and encrypt K|M1 with PK. Encrypt M2 with our stream cipher,
127 using the key K. Concatenate these encrypted values.
128 [XXX Note that this "hybrid encryption" approach does not prevent
129 an attacker from adding or removing bytes to the end of M. It also
130 allows attackers to modify the bytes not covered by the OAEP --
131 see Goldberg's PET2006 paper for details. We will add a MAC to this
134 0.4. Other parameter values
140 Tor is a distributed overlay network designed to anonymize
141 low-latency TCP-based applications such as web browsing, secure shell,
142 and instant messaging. Clients choose a path through the network and
143 build a ``circuit'', in which each node (or ``onion router'' or ``OR'')
144 in the path knows its predecessor and successor, but no other nodes in
145 the circuit. Traffic flowing down the circuit is sent in fixed-size
146 ``cells'', which are unwrapped by a symmetric key at each node (like
147 the layers of an onion) and relayed downstream.
149 1.1. Protocol Versioning
151 The node-to-node TLS-based "OR connection" protocol and the multi-hop
152 "circuit" protocol are versioned quasi-independently. (Certain versions
153 of the circuit protocol may require a minimum version of the connection
154 protocol to be used.)
156 Version numbers are incremented for backward-incompatible protocol changes
157 only. Backward-compatible changes are generally implemented by adding
158 additional fields to existing structures; implementations MUST ignore
159 fields they do not expect.
161 Parties negotiate OR connection versions as described below in sections
166 Tor uses TLS for link encryption. All implementations MUST support
167 the TLS ciphersuite "TLS_EDH_RSA_WITH_DES_192_CBC3_SHA", and SHOULD
168 support "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" if it is available.
169 Implementations MAY support other ciphersuites, but MUST NOT
170 support any suite without ephemeral keys, symmetric keys of at
171 least KEY_LEN bits, and digests of at least HASH_LEN bits.
173 Even though the connection protocol is identical, we think of the
174 initiator as either an onion router (OR) if it is willing to relay
175 traffic for other Tor users, or an onion proxy (OP) if it only handles
176 local requests. Onion proxies SHOULD NOT provide long-term-trackable
177 identifiers in their handshakes.
179 The connection initiator always sends a two-certificate chain,
181 certificate using a short-term connection key and a second, self-
182 signed certificate containing the OR's identity key. The commonName of the
183 first certificate is the OR's nickname, and the commonName of the second
184 certificate is the OR's nickname, followed by a space and the string
187 Implementations running Protocol 1 and earlier use an
188 organizationName of "Tor" or "TOR". Future implementations (which
189 support the version negotiation protocol in section 4.1) MUST NOT
190 have either of these values for their organizationName.
192 All parties receiving certificates must confirm that the identity key is
193 as expected. (When initiating a connection, the expected identity key is
194 the one given in the directory; when creating a connection because of an
195 EXTEND cell, the expected identity key is the one given in the cell.) If
196 the key is not as expected, the party must close the connection.
198 All parties SHOULD reject connections to or from ORs that have malformed
199 or missing certificates. ORs MAY accept or reject connections from OPs
200 with malformed or missing certificates.
202 Once a TLS connection is established, the two sides send cells
203 (specified below) to one another. Cells are sent serially. All
204 cells are CELL_LEN bytes long. Cells may be sent embedded in TLS
205 records of any size or divided across TLS records, but the framing
206 of TLS records MUST NOT leak information about the type or contents
209 TLS connections are not permanent. Either side may close a connection
210 if there are no circuits running over it and an amount of time
211 (KeepalivePeriod, defaults to 5 minutes) has passed.
213 (As an exception, directory servers may try to stay connected to all of
214 the ORs -- though this will be phased out for the Tor 0.1.2.x release.)
216 3. Cell Packet format
218 The basic unit of communication for onion routers and onion
219 proxies is a fixed-width "cell".
221 On a version 1 connection, each cell contains the following
226 Payload (padded with 0 bytes) [PAYLOAD_LEN bytes]
228 On a version 2 connection, each cell contains the following fields:
232 Payload (padded with 0 bytes) [PAYLOAD_LEN bytes]
234 The CircID field determines which circuit, if any, the cell is
237 The 'Command' field holds one of the following values:
238 0 -- PADDING (Padding) (See Sec 7.2)
239 1 -- CREATE (Create a circuit) (See Sec 5.1)
240 2 -- CREATED (Acknowledge create) (See Sec 5.1)
241 3 -- RELAY (End-to-end data) (See Sec 5.5 and 6)
242 4 -- DESTROY (Stop using a circuit) (See Sec 5.4)
243 5 -- CREATE_FAST (Create a circuit, no PK) (See Sec 5.1)
244 6 -- CREATED_FAST (Circuit created, no PK) (See Sec 5.1)
245 7 -- VERSIONS (Negotiate versions) (See Sec 4.1)
246 8 -- NETINFO (Time and MITM-prevention) (See Sec 4.2)
248 The interpretation of 'Payload' depends on the type of the cell.
249 PADDING: Payload is unused.
250 CREATE: Payload contains the handshake challenge.
251 CREATED: Payload contains the handshake response.
252 RELAY: Payload contains the relay header and relay body.
253 DESTROY: Payload contains a reason for closing the circuit.
255 Upon receiving any other value for the command field, an OR must
256 drop the cell. [XXXX Versions prior to 0.1.0.?? logged a warning
257 when dropping the cell; this is bad behavior. -NM]
259 The payload is padded with 0 bytes.
261 PADDING cells are currently used to implement connection keepalive.
262 If there is no other traffic, ORs and OPs send one another a PADDING
263 cell every few minutes.
265 CREATE, CREATED, and DESTROY cells are used to manage circuits;
268 RELAY cells are used to send commands and data along a circuit; see
271 VERSIONS cells are used to introduce parameters and characteristics of
272 Tor clients and servers when connections are established.
274 4. Connection management
276 Upon establishing a TLS connection, both parties immediately begin
277 negotiating a connection protocol version and other connection parameters.
281 When a Tor connection is established, both parties normally send a
282 VERSIONS cell before sending any other cells. (But see below.)
285 Versions [NumVersions bytes]
287 "Versions" is a sequence of NumVersions link connection protocol versions,
288 each one byte long. Parties should list all of the versions which they
289 are able and willing to support. Parties can only communicate if they
290 have some connection protocol version in common.
292 Version 0.1.x.y-alpha and earlier don't understand VERSIONS cells,
293 and therefore don't support version negotiation. Thus, waiting until
294 the other side has sent a VERSIONS cell won't work for these servers:
295 if they send no cells back, it is impossible to tell whether they
296 have sent a VERSIONS cell that has been stalled, or whether they have
297 dropped our own VERSIONS cell as unrecognized. Thus, immediately after
298 a TLS connection has been established, the parties check whether the
299 other side has an obsolete certificate (organizationName equal to "Tor"
300 or "TOR"). If the other party presented an obsolete certificate,
301 we assume a v1 connection. Otherwise, both parties send VERSIONS
302 cells listing all their supported versions. Upon receiving the
303 other party's VERSIONS cell, the implementation begins using the
304 highest-valued version common to both cells. If the first cell from
305 the other party is _not_ a VERSIONS cell, we assume a v1 protocol.
307 Implementations MUST discard cells that are not the first cells sent on a
310 4.2. MITM-prevention and time checking
312 If we negotiate a v2 connection or higher, the first cell we send SHOULD
313 be a NETINFO cell. Implementations SHOULD NOT send NETINFO cells at other
316 A NETINFO cell contains:
318 This OR's address [variable]
319 Other OR's address [variable]
321 Timestamp is the OR's current Unix time, in seconds since the epoch. If
322 an implementation receives time values from many validated ORs that
323 indicate that its clock is skewed, it SHOULD try to warn the
326 Each address contains Type/Length/Value as used in Section 6.4. The first
327 address is the address of the interface the party sending the VERSIONS cell
328 used to connect to or accept connections from the other -- we include it
329 to block a man-in-the-middle attack on TLS that lets an attacker bounce
330 traffic through his own computers to enable timing and packet-counting
333 The second address is the one that the party sending the VERSIONS cell
334 believes the other has -- it can be used to learn what your IP address
335 is if you have no other hints.
337 5. Circuit management
339 5.1. CREATE and CREATED cells
341 Users set up circuits incrementally, one hop at a time. To create a
342 new circuit, OPs send a CREATE cell to the first node, with the
343 first half of the DH handshake; that node responds with a CREATED
344 cell with the second half of the DH handshake plus the first 20 bytes
345 of derivative key data (see section 5.2). To extend a circuit past
346 the first hop, the OP sends an EXTEND relay cell (see section 5)
347 which instructs the last node in the circuit to send a CREATE cell
348 to extend the circuit.
350 The payload for a CREATE cell is an 'onion skin', which consists
351 of the first step of the DH handshake data (also known as g^x).
352 This value is hybrid-encrypted (see 0.3) to Bob's public key, giving
355 Padding padding [PK_PAD_LEN bytes]
356 Symmetric key [KEY_LEN bytes]
357 First part of g^x [PK_ENC_LEN-PK_PAD_LEN-KEY_LEN bytes]
358 Symmetrically encrypted:
359 Second part of g^x [DH_LEN-(PK_ENC_LEN-PK_PAD_LEN-KEY_LEN)
362 The relay payload for an EXTEND relay cell consists of:
365 Onion skin [DH_LEN+KEY_LEN+PK_PAD_LEN bytes]
366 Identity fingerprint [HASH_LEN bytes]
368 The port and address field denote the IPV4 address and port of the next
369 onion router in the circuit; the public key hash is the hash of the PKCS#1
370 ASN1 encoding of the next onion router's identity (signing) key. (See 0.3
371 above.) (Including this hash allows the extending OR verify that it is
372 indeed connected to the correct target OR, and prevents certain
373 man-in-the-middle attacks.)
375 The payload for a CREATED cell, or the relay payload for an
376 EXTENDED cell, contains:
377 DH data (g^y) [DH_LEN bytes]
378 Derivative key data (KH) [HASH_LEN bytes] <see 5.2 below>
380 The CircID for a CREATE cell is an arbitrarily chosen 2-byte integer,
381 selected by the node (OP or OR) that sends the CREATE cell. To prevent
382 CircID collisions, when one OR sends a CREATE cell to another, it chooses
383 from only one half of the possible values based on the ORs' public
384 identity keys: if the sending OR has a lower key, it chooses a CircID with
385 an MSB of 0; otherwise, it chooses a CircID with an MSB of 1.
387 Public keys are compared numerically by modulus.
389 As usual with DH, x and y MUST be generated randomly.
392 To implement backward-compatible version negotiation, parties MUST
393 drop CREATE cells with all-[00] onion-skins.
396 5.1.1. CREATE_FAST/CREATED_FAST cells
398 When initializing the first hop of a circuit, the OP has already
399 established the OR's identity and negotiated a secret key using TLS.
400 Because of this, it is not always necessary for the OP to perform the
401 public key operations to create a circuit. In this case, the
402 OP MAY send a CREATE_FAST cell instead of a CREATE cell for the first
403 hop only. The OR responds with a CREATED_FAST cell, and the circuit is
406 A CREATE_FAST cell contains:
408 Key material (X) [HASH_LEN bytes]
410 A CREATED_FAST cell contains:
412 Key material (Y) [HASH_LEN bytes]
413 Derivative key data [HASH_LEN bytes] (See 5.2 below)
415 The values of X and Y must be generated randomly.
417 [Versions of Tor before 0.1.0.6-rc did not support these cell types;
418 clients should not send CREATE_FAST cells to older Tor servers.]
420 If an OR sees a circuit created with CREATE_FAST, the OR is sure to be the
421 first hop of a circuit. ORs SHOULD reject attempts to create streams with
422 RELAY_BEGIN exiting the circuit at the first hop: letting Tor be used as a
423 single hop proxy makes exit nodes a more attractive target for compromise.
425 5.2. Setting circuit keys
427 Once the handshake between the OP and an OR is completed, both can
428 now calculate g^xy with ordinary DH. Before computing g^xy, both client
429 and server MUST verify that the received g^x or g^y value is not degenerate;
430 that is, it must be strictly greater than 1 and strictly less than p-1
431 where p is the DH modulus. Implementations MUST NOT complete a handshake
432 with degenerate keys. Implementations MUST NOT discard other "weak"
435 (Discarding degenerate keys is critical for security; if bad keys
436 are not discarded, an attacker can substitute the server's CREATED
437 cell's g^y with 0 or 1, thus creating a known g^xy and impersonating
438 the server. Discarding other keys may allow attacks to learn bits of
441 (The mainline Tor implementation, in the 0.1.1.x-alpha series, discarded
442 all g^x values less than 2^24, greater than p-2^24, or having more than
443 1024-16 identical bits. This served no useful purpose, and we stopped.)
445 If CREATE or EXTEND is used to extend a circuit, the client and server
446 base their key material on K0=g^xy, represented as a big-endian unsigned
449 If CREATE_FAST is used, the client and server base their key material on
452 From the base key material K0, they compute KEY_LEN*2+HASH_LEN*3 bytes of
453 derivative key data as
454 K = H(K0 | [00]) | H(K0 | [01]) | H(K0 | [02]) | ...
456 The first HASH_LEN bytes of K form KH; the next HASH_LEN form the forward
457 digest Df; the next HASH_LEN 41-60 form the backward digest Db; the next
458 KEY_LEN 61-76 form Kf, and the final KEY_LEN form Kb. Excess bytes from K
461 KH is used in the handshake response to demonstrate knowledge of the
462 computed shared key. Df is used to seed the integrity-checking hash
463 for the stream of data going from the OP to the OR, and Db seeds the
464 integrity-checking hash for the data stream from the OR to the OP. Kf
465 is used to encrypt the stream of data going from the OP to the OR, and
466 Kb is used to encrypt the stream of data going from the OR to the OP.
468 5.3. Creating circuits
470 When creating a circuit through the network, the circuit creator
471 (OP) performs the following steps:
473 1. Choose an onion router as an exit node (R_N), such that the onion
474 router's exit policy includes at least one pending stream that
475 needs a circuit (if there are any).
477 2. Choose a chain of (N-1) onion routers
478 (R_1...R_N-1) to constitute the path, such that no router
479 appears in the path twice.
481 3. If not already connected to the first router in the chain,
482 open a new connection to that router.
484 4. Choose a circID not already in use on the connection with the
485 first router in the chain; send a CREATE cell along the
486 connection, to be received by the first onion router.
488 5. Wait until a CREATED cell is received; finish the handshake
489 and extract the forward key Kf_1 and the backward key Kb_1.
491 6. For each subsequent onion router R (R_2 through R_N), extend
494 To extend the circuit by a single onion router R_M, the OP performs
497 1. Create an onion skin, encrypted to R_M's public key.
499 2. Send the onion skin in a relay EXTEND cell along
500 the circuit (see section 5).
502 3. When a relay EXTENDED cell is received, verify KH, and
503 calculate the shared keys. The circuit is now extended.
505 When an onion router receives an EXTEND relay cell, it sends a CREATE
506 cell to the next onion router, with the enclosed onion skin as its
507 payload. The initiating onion router chooses some circID not yet
508 used on the connection between the two onion routers. (But see
509 section 5.1. above, concerning choosing circIDs based on
510 lexicographic order of nicknames.)
512 When an onion router receives a CREATE cell, if it already has a
513 circuit on the given connection with the given circID, it drops the
514 cell. Otherwise, after receiving the CREATE cell, it completes the
515 DH handshake, and replies with a CREATED cell. Upon receiving a
516 CREATED cell, an onion router packs it payload into an EXTENDED relay
517 cell (see section 5), and sends that cell up the circuit. Upon
518 receiving the EXTENDED relay cell, the OP can retrieve g^y.
520 (As an optimization, OR implementations may delay processing onions
521 until a break in traffic allows time to do so without harming
522 network latency too greatly.)
524 5.4. Tearing down circuits
526 Circuits are torn down when an unrecoverable error occurs along
527 the circuit, or when all streams on a circuit are closed and the
528 circuit's intended lifetime is over. Circuits may be torn down
529 either completely or hop-by-hop.
531 To tear down a circuit completely, an OR or OP sends a DESTROY
532 cell to the adjacent nodes on that circuit, using the appropriate
535 Upon receiving an outgoing DESTROY cell, an OR frees resources
536 associated with the corresponding circuit. If it's not the end of
537 the circuit, it sends a DESTROY cell for that circuit to the next OR
538 in the circuit. If the node is the end of the circuit, then it tears
539 down any associated edge connections (see section 6.1).
541 After a DESTROY cell has been processed, an OR ignores all data or
542 destroy cells for the corresponding circuit.
544 To tear down part of a circuit, the OP may send a RELAY_TRUNCATE cell
545 signaling a given OR (Stream ID zero). That OR sends a DESTROY
546 cell to the next node in the circuit, and replies to the OP with a
547 RELAY_TRUNCATED cell.
549 When an unrecoverable error occurs along one connection in a
550 circuit, the nodes on either side of the connection should, if they
551 are able, act as follows: the node closer to the OP should send a
552 RELAY_TRUNCATED cell towards the OP; the node farther from the OP
553 should send a DESTROY cell down the circuit.
555 The payload of a RELAY_TRUNCATED or DESTROY cell contains a single octet,
556 describing why the circuit is being closed or truncated. When sending a
557 TRUNCATED or DESTROY cell because of another TRUNCATED or DESTROY cell,
558 the error code should be propagated. The origin of a circuit always sets
559 this error code to 0, to avoid leaking its version.
562 0 -- NONE (No reason given.)
563 1 -- PROTOCOL (Tor protocol violation.)
564 2 -- INTERNAL (Internal error.)
565 3 -- REQUESTED (A client sent a TRUNCATE command.)
566 4 -- HIBERNATING (Not currently operating; trying to save bandwidth.)
567 5 -- RESOURCELIMIT (Out of memory, sockets, or circuit IDs.)
568 6 -- CONNECTFAILED (Unable to reach server.)
569 7 -- OR_IDENTITY (Connected to server, but its OR identity was not
571 8 -- OR_CONN_CLOSED (The OR connection that was carrying this circuit
573 9 -- FINISHED (The circuit has expired for being dirty or old.)
574 10 -- TIMEOUT (Circuit construction took too long)
575 11 -- DESTROYED (The circuit was destroyed w/o client TRUNCATE)
576 12 -- NOSUCHSERVICE (Request for unknown hidden service)
578 [Versions of Tor prior to 0.1.0.11 didn't send reasons; implementations
579 MUST accept empty TRUNCATED and DESTROY cells.]
581 5.5. Routing relay cells
583 When an OR receives a RELAY cell, it checks the cell's circID and
584 determines whether it has a corresponding circuit along that
585 connection. If not, the OR drops the RELAY cell.
587 Otherwise, if the OR is not at the OP edge of the circuit (that is,
588 either an 'exit node' or a non-edge node), it de/encrypts the payload
589 with the stream cipher, as follows:
590 'Forward' relay cell (same direction as CREATE):
591 Use Kf as key; decrypt.
592 'Back' relay cell (opposite direction from CREATE):
593 Use Kb as key; encrypt.
594 Note that in counter mode, decrypt and encrypt are the same operation.
596 The OR then decides whether it recognizes the relay cell, by
597 inspecting the payload as described in section 6.1 below. If the OR
598 recognizes the cell, it processes the contents of the relay cell.
599 Otherwise, it passes the decrypted relay cell along the circuit if
600 the circuit continues. If the OR at the end of the circuit
601 encounters an unrecognized relay cell, an error has occurred: the OR
602 sends a DESTROY cell to tear down the circuit.
604 When a relay cell arrives at an OP, the OP decrypts the payload
605 with the stream cipher as follows:
606 OP receives data cell:
608 Decrypt with Kb_I. If the payload is recognized (see
609 section 6..1), then stop and process the payload.
611 For more information, see section 6 below.
613 6. Application connections and stream management
617 Within a circuit, the OP and the exit node use the contents of
618 RELAY packets to tunnel end-to-end commands and TCP connections
619 ("Streams") across circuits. End-to-end commands can be initiated
620 by either edge; streams are initiated by the OP.
622 The payload of each unencrypted RELAY cell consists of:
623 Relay command [1 byte]
624 'Recognized' [2 bytes]
628 Data [CELL_LEN-14 bytes]
630 The relay commands are:
631 1 -- RELAY_BEGIN [forward]
632 2 -- RELAY_DATA [forward or backward]
633 3 -- RELAY_END [forward or backward]
634 4 -- RELAY_CONNECTED [backward]
635 5 -- RELAY_SENDME [forward or backward] [sometimes control]
636 6 -- RELAY_EXTEND [forward] [control]
637 7 -- RELAY_EXTENDED [backward] [control]
638 8 -- RELAY_TRUNCATE [forward] [control]
639 9 -- RELAY_TRUNCATED [backward] [control]
640 10 -- RELAY_DROP [forward or backward] [control]
641 11 -- RELAY_RESOLVE [forward]
642 12 -- RELAY_RESOLVED [backward]
643 13 -- RELAY_BEGIN_DIR [forward]
645 Commands labelled as "forward" must only be sent by the originator
646 of the circuit. Commands labelled as "backward" must only be sent by
647 other nodes in the circuit back to the originator. Commands marked
648 as either can be sent either by the originator or other nodes.
650 The 'recognized' field in any unencrypted relay payload is always set
651 to zero; the 'digest' field is computed as the first four bytes of
652 the running digest of all the bytes that have been destined for
653 this hop of the circuit or originated from this hop of the circuit,
654 seeded from Df or Db respectively (obtained in section 5.2 above),
655 and including this RELAY cell's entire payload (taken with the digest
658 When the 'recognized' field of a RELAY cell is zero, and the digest
659 is correct, the cell is considered "recognized" for the purposes of
660 decryption (see section 5.5 above).
662 (The digest does not include any bytes from relay cells that do
663 not start or end at this hop of the circuit. That is, it does not
664 include forwarded data. Therefore if 'recognized' is zero but the
665 digest does not match, the running digest at that node should
666 not be updated, and the cell should be forwarded on.)
668 All RELAY cells pertaining to the same tunneled stream have the
669 same stream ID. StreamIDs are chosen arbitrarily by the OP. RELAY
670 cells that affect the entire circuit rather than a particular
671 stream use a StreamID of zero -- they are marked in the table above
672 as "[control]" style cells. (Sendme cells are marked as "sometimes
673 control" because they can take include a StreamID or not depending
674 on their purpose -- see Section 7.)
676 The 'Length' field of a relay cell contains the number of bytes in
677 the relay payload which contain real payload data. The remainder of
678 the payload is padded with NUL bytes.
680 If the RELAY cell is recognized but the relay command is not
681 understood, the cell must be dropped and ignored. Its contents
682 still count with respect to the digests, though. [Before
683 0.1.1.10, Tor closed circuits when it received an unknown relay
684 command. Perhaps this will be more forward-compatible. -RD]
686 6.2. Opening streams and transferring data
688 To open a new anonymized TCP connection, the OP chooses an open
689 circuit to an exit that may be able to connect to the destination
690 address, selects an arbitrary StreamID not yet used on that circuit,
691 and constructs a RELAY_BEGIN cell with a payload encoding the address
692 and port of the destination host. The payload format is:
694 ADDRESS | ':' | PORT | [00]
696 where ADDRESS can be a DNS hostname, or an IPv4 address in
697 dotted-quad format, or an IPv6 address surrounded by square brackets;
698 and where PORT is encoded in decimal.
700 [What is the [00] for? -NM]
701 [It's so the payload is easy to parse out with string funcs -RD]
703 Upon receiving this cell, the exit node resolves the address as
704 necessary, and opens a new TCP connection to the target port. If the
705 address cannot be resolved, or a connection can't be established, the
706 exit node replies with a RELAY_END cell. (See 6.4 below.)
707 Otherwise, the exit node replies with a RELAY_CONNECTED cell, whose
708 payload is in one of the following formats:
709 The IPv4 address to which the connection was made [4 octets]
710 A number of seconds (TTL) for which the address may be cached [4 octets]
712 Four zero-valued octets [4 octets]
713 An address type (6) [1 octet]
714 The IPv6 address to which the connection was made [16 octets]
715 A number of seconds (TTL) for which the address may be cached [4 octets]
716 [XXXX Versions of Tor before 0.1.1.6 ignore and do not generate the TTL
717 field. No version of Tor currently generates the IPv6 format.
719 Tor servers before 0.1.2.0 set the TTL field to a fixed value. Later
720 versions set the TTL to the last value seen from a DNS server, and expire
721 their own cached entries after a fixed interval. This prevents certain
724 The OP waits for a RELAY_CONNECTED cell before sending any data.
725 Once a connection has been established, the OP and exit node
726 package stream data in RELAY_DATA cells, and upon receiving such
727 cells, echo their contents to the corresponding TCP stream.
728 RELAY_DATA cells sent to unrecognized streams are dropped.
730 Relay RELAY_DROP cells are long-range dummies; upon receiving such
731 a cell, the OR or OP must drop it.
733 6.2.1. Opening a directory stream
735 If a Tor server is a directory server, it should respond to a
736 RELAY_BEGIN_DIR cell as if it had received a BEGIN cell requesting a
737 connection to its directory port. RELAY_BEGIN_DIR cells ignore exit
738 policy, since the stream is local to the Tor process.
740 If the Tor server is not running a directory service, it should respond
741 with a REASON_NOTDIRECTORY RELAY_END cell.
743 Clients MUST generate an all-zero payload for RELAY_BEGIN_DIR cells,
744 and servers MUST ignore the payload.
746 [RELAY_BEGIN_DIR was not supported before Tor 0.1.2.2-alpha; clients
747 SHOULD NOT send it to routers running earlier versions of Tor.]
751 When an anonymized TCP connection is closed, or an edge node
752 encounters error on any stream, it sends a 'RELAY_END' cell along the
753 circuit (if possible) and closes the TCP connection immediately. If
754 an edge node receives a 'RELAY_END' cell for any stream, it closes
755 the TCP connection completely, and sends nothing more along the
756 circuit for that stream.
758 The payload of a RELAY_END cell begins with a single 'reason' byte to
759 describe why the stream is closing, plus optional data (depending on
760 the reason.) The values are:
762 1 -- REASON_MISC (catch-all for unlisted reasons)
763 2 -- REASON_RESOLVEFAILED (couldn't look up hostname)
764 3 -- REASON_CONNECTREFUSED (remote host refused connection) [*]
765 4 -- REASON_EXITPOLICY (OR refuses to connect to host or port)
766 5 -- REASON_DESTROY (Circuit is being destroyed)
767 6 -- REASON_DONE (Anonymized TCP connection was closed)
768 7 -- REASON_TIMEOUT (Connection timed out, or OR timed out
770 8 -- (unallocated) [**]
771 9 -- REASON_HIBERNATING (OR is temporarily hibernating)
772 10 -- REASON_INTERNAL (Internal error at the OR)
773 11 -- REASON_RESOURCELIMIT (OR has no resources to fulfill request)
774 12 -- REASON_CONNRESET (Connection was unexpectedly reset)
775 13 -- REASON_TORPROTOCOL (Sent when closing connection because of
776 Tor protocol violations.)
777 14 -- REASON_NOTDIRECTORY (Client sent RELAY_BEGIN_DIR to a
778 non-directory server.)
780 (With REASON_EXITPOLICY, the 4-byte IPv4 address or 16-byte IPv6 address
781 forms the optional data; no other reason currently has extra data.
782 As of 0.1.1.6, the body also contains a 4-byte TTL.)
784 OPs and ORs MUST accept reasons not on the above list, since future
785 versions of Tor may provide more fine-grained reasons.
787 [*] Older versions of Tor also send this reason when connections are
789 [**] Due to a bug in versions of Tor through 0095, error reason 8 must
790 remain allocated until that version is obsolete.
792 --- [The rest of this section describes unimplemented functionality.]
794 Because TCP connections can be half-open, we follow an equivalent
795 to TCP's FIN/FIN-ACK/ACK protocol to close streams.
797 An exit connection can have a TCP stream in one of three states:
798 'OPEN', 'DONE_PACKAGING', and 'DONE_DELIVERING'. For the purposes
799 of modeling transitions, we treat 'CLOSED' as a fourth state,
800 although connections in this state are not, in fact, tracked by the
803 A stream begins in the 'OPEN' state. Upon receiving a 'FIN' from
804 the corresponding TCP connection, the edge node sends a 'RELAY_FIN'
805 cell along the circuit and changes its state to 'DONE_PACKAGING'.
806 Upon receiving a 'RELAY_FIN' cell, an edge node sends a 'FIN' to
807 the corresponding TCP connection (e.g., by calling
808 shutdown(SHUT_WR)) and changing its state to 'DONE_DELIVERING'.
810 When a stream in already in 'DONE_DELIVERING' receives a 'FIN', it
811 also sends a 'RELAY_FIN' along the circuit, and changes its state
812 to 'CLOSED'. When a stream already in 'DONE_PACKAGING' receives a
813 'RELAY_FIN' cell, it sends a 'FIN' and changes its state to
816 If an edge node encounters an error on any stream, it sends a
817 'RELAY_END' cell (if possible) and closes the stream immediately.
819 6.4. Remote hostname lookup
821 To find the address associated with a hostname, the OP sends a
822 RELAY_RESOLVE cell containing the hostname to be resolved. (For a reverse
823 lookup, the OP sends a RELAY_RESOLVE cell containing an in-addr.arpa
824 address.) The OR replies with a RELAY_RESOLVED cell containing a status
825 byte, and any number of answers. Each answer is of the form:
828 Value (variable-width)
830 "Length" is the length of the Value field.
835 0xF0 -- Error, transient
836 0xF1 -- Error, nontransient
838 If any answer has a type of 'Error', then no other answer may be given.
840 The RELAY_RESOLVE cell must use a nonzero, distinct streamID; the
841 corresponding RELAY_RESOLVED cell must use the same streamID. No stream
842 is actually created by the OR when resolving the name.
848 Each node should do appropriate bandwidth throttling to keep its
851 Communicants rely on TCP's default flow control to push back when they
856 Link padding can be created by sending PADDING cells along the
857 connection; relay cells of type "DROP" can be used for long-range
860 Currently nodes are not required to do any sort of link padding or
861 dummy traffic. Because strong attacks exist even with link padding,
862 and because link padding greatly increases the bandwidth requirements
863 for running a node, we plan to leave out link padding until this
864 tradeoff is better understood.
866 7.3. Circuit-level flow control
868 To control a circuit's bandwidth usage, each OR keeps track of
869 two 'windows', consisting of how many RELAY_DATA cells it is
870 allowed to package for transmission, and how many RELAY_DATA cells
871 it is willing to deliver to streams outside the network.
872 Each 'window' value is initially set to 1000 data cells
873 in each direction (cells that are not data cells do not affect
874 the window). When an OR is willing to deliver more cells, it sends a
875 RELAY_SENDME cell towards the OP, with Stream ID zero. When an OR
876 receives a RELAY_SENDME cell with stream ID zero, it increments its
879 Each of these cells increments the corresponding window by 100.
881 The OP behaves identically, except that it must track a packaging
882 window and a delivery window for every OR in the circuit.
884 An OR or OP sends cells to increment its delivery window when the
885 corresponding window value falls under some threshold (900).
887 If a packaging window reaches 0, the OR or OP stops reading from
888 TCP connections for all streams on the corresponding circuit, and
889 sends no more RELAY_DATA cells until receiving a RELAY_SENDME cell.
890 [this stuff is badly worded; copy in the tor-design section -RD]
892 7.4. Stream-level flow control
894 Edge nodes use RELAY_SENDME cells to implement end-to-end flow
895 control for individual connections across circuits. Similarly to
896 circuit-level flow control, edge nodes begin with a window of cells
897 (500) per stream, and increment the window by a fixed value (50)
898 upon receiving a RELAY_SENDME cell. Edge nodes initiate RELAY_SENDME
899 cells when both a) the window is <= 450, and b) there are less than
900 ten cell payloads remaining to be flushed at that edge.
903 A.1. Differences between spec and implementation
905 - The current specification requires all ORs to have IPv4 addresses, but
906 allows servers to exit and resolve to IPv6 addresses, and to declare IPv6
907 addresses in their exit policies. The current codebase has no IPv6
910 B. Things that should change in a later version of the Tor protocol
912 B.1. ... but which will require backward-incompatible change
914 - Circuit IDs should be longer.
916 - Maybe, keys should be longer.
917 - Maybe, key-length should be adjustable. How to do this without
918 making anonymity suck?
919 - Drop backward compatibility.
920 - We should use a 128-bit subgroup of our DH prime.
921 - Handshake should use HMAC.
922 - Multiple cell lengths.
923 - Ability to split circuits across paths (If this is useful.)
924 - SENDME windows should be dynamic.
927 - Stop ever mentioning socks ports
929 B.1. ... and that will require no changes
931 - Mention multiple addr/port combos
932 - Advertised outbound IP?
933 - Migrate streams across circuits.
935 B.2. ... and that we have no idea how to do.
939 - Use a better AES mode that has built-in integrity checking,
940 doesn't grow with the number of hops, is not patented, and
941 is implemented and maintained by smart people.