141-jit-sd-downloads.txt 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. Filename: 141-jit-sd-downloads.txt
  2. Title: Download server descriptors on demand
  3. Version: $Revision$
  4. Last-Modified: $Date$
  5. Author: Peter Palfrader
  6. Created: 15-Jun-2008
  7. Status: Draft
  8. 1. Overview
  9. Downloading all server descriptors is the most expensive part
  10. of bootstrapping a Tor client. These server descriptors currently
  11. amount to about 1.5 Megabytes of data, and this size will grow
  12. linearly with network size.
  13. Fetching all these server descriptors takes a long while for people
  14. behind slow network connections. It is also a considerable load on
  15. our network of directory mirrors.
  16. This document describes proposed changes to the Tor network and
  17. directory protocol so that clients will no longer need to download
  18. all server descriptors.
  19. These changes consist of moving load balancing information into
  20. network status documents, implementing a means to download server
  21. descriptors on demand in an anonymity-preserving way, and dealing
  22. with exit node selection.
  23. 2. What is in a server descriptor
  24. When a Tor client starts the first thing it will try to get is a
  25. current network status document: a consensus signed by a majority
  26. of directory authorities. This document is currently about 100
  27. Kilobytes in size, tho it will grow linearly with network size.
  28. This document lists all servers currently running on the network.
  29. The Tor client will then try to get a server descriptor for each
  30. of the running servers. All server descriptors currently amount
  31. to about 1.5 Megabytes of downloads.
  32. A Tor client learns several things about a server from its descriptor.
  33. Some of these it already learned from the network status document
  34. published by the authorities, but the server descriptor contains it
  35. again in a single statement signed by the server itself, not just by
  36. the directory authorities.
  37. Tor clients use the information from server descriptors for
  38. different purposes, which are considered in the following sections.
  39. #three ways: One, to determine if a server will be able to handle
  40. #this client's request; two, to actually communicate or use the server;
  41. #three, for load balancing decisions.
  42. #
  43. #These three points are considered in the following subsections.
  44. 2.1 Load balancing
  45. The Tor load balancing mechanism is quite complex in its details, but
  46. it has a simple goal: The more traffic a server can handle the more
  47. traffic it should get. That means the more traffic a server can
  48. handle the more likely a client will use it.
  49. For this purpose each server descriptor has bandwidth information
  50. which tries to convey a server's capacity to clients.
  51. Currently we weigh servers differently for different purposes. There
  52. is a weigh for when we use a server as a guard node (our entry to the
  53. Tor network), there is one weigh we assign servers for exit duties,
  54. and a third for when we need intermediate (middle) nodes.
  55. 2.2 Exit information
  56. When a Tor wants to exit to some resource on the internet it will
  57. build a circuit to an exit node that allows access to that resource's
  58. IP address and TCP Port.
  59. When building that circuit the client can make sure that the circuit
  60. ends at a server that will be able to fulfill the request because the
  61. client already learned of all the servers' exit policies from their
  62. descriptors.
  63. 2.3 Capability information
  64. Server descriptors contain information about the specific version or
  65. the Tor protocol they understand [proposal 105].
  66. Furthermore the server descriptor also contains the exact version of
  67. the Tor software that the server is running and some decisions are
  68. made based on the server version number (for instance a Tor client
  69. will only make conditional consensus requests [proposal 139] when
  70. talking to Tor servers version 0.2.1.1-alpha or later).
  71. 2.4 Contact/key information
  72. A server descriptor lists a server's IP address and TCP ports on which
  73. it accepts onion and directory connections. Furthermore it contains
  74. the onion key (a short lived RSA key to which clients encrypt CREATE
  75. cells).
  76. 2.5 Identity information
  77. A Tor client learns the digest of a server's key from the network
  78. status document. Once it has a server descriptor this descriptor
  79. contains the full RSA identity key of the server. Clients verify
  80. that 1) the digest of the identity key matches the expected digest
  81. it got from the consensus, and 2) that the signature on the descriptor
  82. from that key is valid.
  83. 3. No longer require clients to have copies of all SDs
  84. 3.1 Load balancing info in consensus documents
  85. One of the reasons why clients download all server descriptors is for
  86. doing load proper load balancing as described in 2.1. In order for
  87. clients to not require all server descriptors this information will
  88. have to move into the network status document.
  89. Consensus documents will have a new line per router similar
  90. to the "r", "s", and "v" lines that already exist. This line
  91. will convey weight information to clients.
  92. "w Bandwidth=193671"
  93. The bandwidth number is the lesser of observed bandwidth and bandwidth
  94. rate limit from the server descriptor that the "r" line referenced by
  95. digest (1st and 3rd field of the bandwidth line in the descriptor).
  96. The bandwidth item is added as another item in the router tuple
  97. described in dir-spec section 3.4:
  98. | * Two router entries are "the same" if they have the same
  99. | <descriptor digest, published time, nickname, IP, ports> tuple.
  100. | We choose the tuple for a given router as whichever tuple appears
  101. | for that router in the most votes. We break ties in favor of
  102. | the more recently published.
  103. 3.2 Fetching descriptors on demand
  104. As described in 2.4 a descriptor lists IP address, OR- and Dir-Port,
  105. and the onion key for a server.
  106. A client already knows the IP address and the ports from the consensus
  107. documents, but without the onion key it will not be able to send
  108. CREATE/EXTEND cells for that server. Since the client needs the onion
  109. key it needs the descriptor.
  110. If a client only downloaded a few descriptors in an observable manner
  111. then that would leak which nodes it was going to use.
  112. This proposal suggests the following:
  113. 1) when connecting to a guard node for which the client does not
  114. yet have a cached descriptor it requests the descriptor it
  115. expects by hash. (The consensus document that the client holds
  116. has a hash for the descriptor of this server. We want exactly
  117. that descriptor, not a different one.)
  118. It does that by sending a RELAY_REQUEST_SD cell.
  119. A client MAY cache the descriptor of the guard node so that it does
  120. not need to request it every single time it contacts the guard.
  121. 2) when a client wants to extend a circuit that currently ends in
  122. server B to a new next server C, the client will send a
  123. RELAY_REQUEST_SD cell to server B. This cell contains in its
  124. payload the hash of a server descriptor the client would like
  125. to obtain (C's server descriptor). The server sends back the
  126. descriptor and the client can now form a valid EXTEND/CREATE cell
  127. encrypted to C's onion key.
  128. Clients MUST NOT cache such descriptors. If they did they might
  129. leak that they already extended to that server at least once
  130. before.
  131. Replies to RELAY_REQUEST_SD requests need to be padded to some
  132. constant upper limit in order to conceal a client's destination
  133. from anybody who might be counting cells/bytes.
  134. RELAY_REQUEST_SD cells contain the following information:
  135. - hash of the server descriptor requested
  136. - hash of the identity digest of the server for which we want the SD
  137. - IP address and OR-port or the server for which we want the SD
  138. - padding factor - the number of cells we want the answer
  139. padded to.
  140. [XXX this just occured to me and it might be smart. or it might
  141. be stupid. clients would learn the padding factor they want
  142. to use from the consensus document. This allows us to grow
  143. the replies later on should SDs become larger.]
  144. [XXX: figure out a decent padding size]
  145. 3.3 Protocol versions
  146. Server descriptors contain optional information of supported
  147. link-level and circuit-level protocols in the form of
  148. "opt protocols Link 1 2 Circuit 1". These are not currently needed
  149. and will probably eventually move into the "v" (version) line in
  150. the consensus. This proposal does not deal with them.
  151. Similarly a server descriptor contains the version number of
  152. a Tor node. This information is already present in the consensus
  153. and is thus available to all clients immediately.
  154. 3.4 Exit selection
  155. Currently finding an appropriate exit node for a user's request is
  156. easy for a client because it has complete knowledge of all the exit
  157. policies of all servers on the network.
  158. [XXX: I have no finished ideas here yet.
  159. - if clients only rely on the current exit flag they will
  160. a) never use servers for exit purposes that don't have it,
  161. b) will have a hard time finding a suitable exit node for
  162. their weird port that only a few servers allow.
  163. - the authorities could create a new summary document that
  164. lists all the exit policies and their nodes (by fingerprint).
  165. I need to find out how large that document would be.
  166. - can we make the "Exit" flag more useful? can we come
  167. up with some "standard policies" and have operators pick
  168. one of the standards?
  169. ]
  170. 4. Future possibilities
  171. This proposal still requires that all servers have the descriptors of
  172. every other node in the network in order to answer RELAY_REQUEST_SD
  173. cells. These cells are sent when a circuit is extended from ending at
  174. node B to a new node C. In that case B would have to answer a
  175. RELAY_REQUEST_SD cell that asks for C's server descriptor (by SD digest).
  176. In order to answer that request B obviously needs a copy of C's server
  177. descriptor. The RELAY_REQUEST_SD cell already has all the info that
  178. B needs to contact C so it can ask about the descriptor before passing it
  179. back to the client.