r9776@totoro: nickm | 2007-01-18 14:37:01 -0500
[tor.git] / doc / tor-spec-v2.txt
blob4eeadb9adcab5fbea524cd1ac01459f70a352042
1 $Id$
3                          Tor Protocol Specification
5                               Roger Dingledine
6                                Nick Mathewson
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,
18 see tor-design.pdf.
20 TODO for v2 revision:
21       - Fix onionskin handshake scheme to be more mainstream, less nutty.
22         Can we just do
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
33         lame.
35 TODO:
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)?
40 0. Preliminaries
42 0.1.  Notation and encoding
44    PK -- a public key.
45    SK -- a private key.
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
70      Diffie-Hellman group.
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.
79 0.3. Ciphers
81    For a stream cipher, we use 128-bit AES in counter mode, with an IV of all
82    0 bytes.
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
91    representation is:
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
101    than once.
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.
109    KEY_LEN=16.
110    DH_LEN=128; DH_SEC_LEN=40.
111    PK_ENC_LEN=128; PK_PAD_LEN=42.
112    HASH_LEN=20.
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
121    computed as follows:
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
132    scheme one day. -RD]
134 0.4. Other parameter values
136    CELL_LEN=512
138 1. System overview
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
162    4.1 and 4.2.
164 2. Connections
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,
180    consisting of a
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
185    "<identity>".
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
207    of the cells.
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
222    fields:
224         CircID                                [2 bytes]
225         Command                               [1 byte]
226         Payload (padded with 0 bytes)         [PAYLOAD_LEN bytes]
228    On a version 2 connection, each cell contains the following fields:
230         CircID                                [3 bytes]
231         Command                               [1 byte]
232         Payload (padded with 0 bytes)         [PAYLOAD_LEN bytes]
234    The CircID field determines which circuit, if any, the cell is
235    associated with.
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.
254                (see 5.4)
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;
266    see section 4 below.
268    RELAY cells are used to send commands and data along a circuit; see
269    section 5 below.
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.
279 4.1. VERSIONS cells
281    When a Tor connection is established, both parties normally send a
282    VERSIONS cell before sending any other cells.  (But see below.)
284          NumVersions            [1 byte]
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
308    connection.
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
314    times.
316    A NETINFO cell contains:
317          Timestamp              [4 bytes]
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
324    administrator.
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
331    attacks.
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
353    an onion-skin of:
354        PK-encrypted:
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)
360                                            bytes]
362    The relay payload for an EXTEND relay cell consists of:
363          Address                       [4 bytes]
364          Port                          [2 bytes]
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
404    created.
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"
433    g^x values.
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
439    the private key.)
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
447    integer.
449    If CREATE_FAST is used, the client and server base their key material on
450    K0=X|Y.
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
459    are discarded.
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
492          the circuit to R.
494    To extend the circuit by a single onion router R_M, the OP performs
495    these steps:
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
533    direction's circID.
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.
561    The error codes are:
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
570                            as expected.)
571      8 -- OR_CONN_CLOSED  (The OR connection that was carrying this circuit
572                            died.)
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:
607             For I=N...1,
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
615 6.1. Relay cells
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]
625          StreamID                [2 bytes]
626          Digest                  [4 bytes]
627          Length                  [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
656    field set to zero).
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]
711     or
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
722    attacks.]
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.]
749 6.3. Closing streams
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
769                                    while connecting)
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
788        reset.
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
801    onion router.
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
814    'CLOSED'.
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:
826        Type   (1 octet)
827        Length (1 octet)
828        Value  (variable-width)
829        TTL    (4 octets)
830    "Length" is the length of the Value field.
831    "Type" is one of:
832       0x00 -- Hostname
833       0x04 -- IPv4 address
834       0x06 -- IPv6 address
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.
844 7. Flow control
846 7.1. Link throttling
848    Each node should do appropriate bandwidth throttling to keep its
849    user happy.
851    Communicants rely on TCP's default flow control to push back when they
852    stop reading.
854 7.2. Link padding
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
858    padding.
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
877    packaging window.
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
908   support at all.
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.
915   - IPv6 everywhere.
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.
926   - Directory
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.
937    - UDP (as transport)
938    - UDP (as content)
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.