xxx-bridges.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. Filename: xxx-bridges.txt
  2. Title: Behavior for bridge users, bridge relays, and bridge authorities
  3. Version: $Revision: 12051 $
  4. Last-Modified: $Date: 2007-10-19 14:56:24 -0400 (Fri, 19 Oct 2007) $
  5. Author: Roger Dingledine
  6. Created: 11-Nov-2007
  7. Status: Open
  8. 0. Preface
  9. This document describes the design decisions around support for bridge
  10. users, bridge relays, and bridge authorities. It acts as an overview
  11. of the bridge design and deployment for developers, and it also tries
  12. to point out limitations in the current design and implementation.
  13. For more details on what all of these mean, look at blocking.tex in
  14. /doc/design-paper/
  15. 1. Bridge relays
  16. Bridge relays are just like normal Tor relays except they don't publish
  17. their server descriptors to the main directory authorities.
  18. 1.1. PublishServerDescriptor
  19. To configure your relay to be a bridge relay, just add
  20. PublishServerDescriptor bridge
  21. to your torrc. This will cause your relay to publish its descriptor
  22. to the bridge authorities rather than to the default authorities.
  23. Alternatively, you can say
  24. PublishServerDescriptor 0
  25. which will cause your relay to not publish anywhere. This could be
  26. useful for private bridges.
  27. 1.2. Defining DirPort
  28. Bridges need to answer BEGIN_DIR requests, both so they can answer
  29. "/server/authority" questions ("what's your descriptor?") and so they
  30. can supply their bridge users with cached copies of all the various
  31. Tor network information.
  32. Right now (0.2.0.11-alpha) we require that bridges turn their DirPort on
  33. -- which means both that we answer BEGIN_DIR requests and that we fetch
  34. and cache directory information in an aggressive way like other servers.
  35. But:
  36. a) we don't enforce that DirPort is on, since it's not clear how to
  37. detect if the user meant to be a bridge. So it's easy to set up a bridge
  38. relay that silently refuses BEGIN_DIR requests and is thus useless.
  39. b) We don't actually care if they have an open or reachable DirPort. So
  40. at some point we should separate having an open DirPort from answering
  41. directory questions. Which leads to:
  42. c) We need to investigate if there are any anonymity worries with
  43. answering BEGIN_DIR requests when our DirPort is off. If there aren't,
  44. we should drop the DirPort requirement.
  45. I claim that we don't open any new attacks by answering BEGIN_DIR
  46. questions when DirPort is off: it's still a fine question to ask what
  47. partitioning attacks there are when you can query a Tor client about
  48. its current directory opinions, but these attacks already exist when
  49. DirPort is on.
  50. We need to answer this issue in 0.2.0.x.
  51. 1.3. Exit policy
  52. Bridge relays should use an exit policy of "reject *:*". This is
  53. because they only need to relay traffic between the bridge users
  54. and the rest of the Tor network, so there's no need to let people
  55. exit directly from them.
  56. 1.4. RelayBandwidthRate / RelayBandwidthBurst
  57. We invented the RelayBandwidth* options for this situation: Tor clients
  58. who want to allow relaying too. See proposal 111 for details. Relay
  59. operators should feel free to rate-limit their relayed traffic.
  60. 1.5. Helping the user with port forwarding, NAT, etc.
  61. Just as for operating normal relays, our documentation and hints for
  62. how to make your ORPort reachable are inadequate for normal users.
  63. We need to work harder on this step, perhaps in 0.2.1.x.
  64. 1.6. Vidalia integration
  65. Vidalia 0.0.15 has turned its "Relay" settings page into a tri-state
  66. "Don't relay" / "Relay for the Tor network" / "Help censored users".
  67. If you click the third choice, it forces your exit policy to reject *:*,
  68. and it forces your DirPort to 9030 (but see Sec 1.2 above about DirPort).
  69. If all the bridges end up on port 9001, that's not so good. On the
  70. other hand, putting the bridges on a low-numbered port in the Unix
  71. world requires jumping through extra hoops. The current compromise is
  72. that Vidalia makes the ORPort default to 443 on Windows, and 9001 on
  73. other platforms.
  74. At the bottom of the relay config settings window, Vidalia displays
  75. the bridge identifier to the operator (see Section 3.1) so he can pass
  76. it on to bridge users.
  77. 1.7. What if the default ORPort is already used?
  78. If the user already has a webserver or some other application
  79. bound to port 443, then Tor will fail to bind it and complain to the
  80. user, probably in a cryptic way. Rather than just working on a better
  81. error message (though we should do this), we should consider an
  82. "ORPort auto" option that tells Tor to try to find something that's
  83. bindable and reachable. This would also help us tolerate ISPs that
  84. filter incoming connections on port 80 and port 443. But this should
  85. be a different proposal, and can wait until 0.2.1.x.
  86. 2. Bridge authorities.
  87. Bridge authorities are like normal directory authorities, except they
  88. don't create their own network-status documents or votes. So if you
  89. ask an authority for a network-status document or consensus, they
  90. behave like a directory mirror: they give you one from one of the main
  91. authorities. But if you ask the bridge authority for the descriptor
  92. corresponding to a particular identity fingerprint, it will happily
  93. give you the latest descriptor for that fingerprint.
  94. To become a bridge authority, add these lines to your torrc:
  95. AuthoritativeDirectory 1
  96. BridgeAuthoritativeDir 1
  97. Right now there's one bridge authority, running on the Tonga relay.
  98. 2.1. Exporting bridge-purpose descriptors
  99. We've added a new purpose for server descriptors: the "bridge"
  100. purpose. With the new router-descriptors file format that includes
  101. annotations, it's easy to look through it and find the bridge-purpose
  102. descriptors.
  103. We should work with Tonga to export its router-descriptors file to
  104. some place where we can distribute the bridge addresses according to
  105. the policies in blocking.pdf. It might even be easier to have it write
  106. out a separate file, just for export, that includes only the bridge
  107. descriptors; or maybe a six-liner perl postprocessing script is the
  108. better plan there to create a file for export.
  109. 2.2. Reachability/uptime testing
  110. Right now the bridge authorities just passively collect bridge
  111. descriptors, and give them out on request. At some point we are going
  112. to want to recommend new bridges to users, and we'll want to have
  113. some way of deciding which ones are up right now, which ones have
  114. been around for a while, etc. We should have the bridge authorities
  115. do active measurements of bridges just as the normal authorities do
  116. active measurements of normal relays. Then we can export the results
  117. just like in Section 2.1. above.
  118. In the design document, we suggested that bridges should publish
  119. anonymously (i.e. via Tor) to the bridge authority, so somebody watching
  120. the bridge authority can't just enumerate all the bridges. But if we're
  121. doing active measurement, the game is up. Perhaps we should back off on
  122. this goal, or perhaps we should do our active measurement anonymously?
  123. Answering this issue is scheduled for 0.2.1.x.
  124. 2.3. Migrating to multiple bridge authorities
  125. Having only one bridge authority is both a trust bottleneck (if you
  126. break into one place you learn about every single bridge we've got)
  127. and a robustness bottleneck (when it's down, bridge users become sad).
  128. Right now if we put up a second bridge authority, all the bridges would
  129. publish to it, and (assuming the code works) bridge users would query
  130. a random bridge authority. This resolves the robustness bottleneck,
  131. but makes the trust bottleneck even worse.
  132. In 0.2.1.x and later we should think about better ways to have multiple
  133. bridge authorities.
  134. 3. Bridge users.
  135. Bridge users are like ordinary Tor users except they use encrypted
  136. directory connections by default, and they use bridge relays as both
  137. entry guards (their first hop) and directory guards (the source of
  138. all their directory information).
  139. To become a bridge user, add the following two lines to your torrc:
  140. UseBridges 1
  141. TunnelDirConns 1
  142. and then add at least one "Bridge" line to your torrc based on the
  143. format below.
  144. 3.1. Format of the bridge identifier.
  145. The canonical format for a bridge identifier contains an IP address,
  146. an ORPort, and an identity fingerprint:
  147. bridge 128.31.0.34:9009 4C17 FB53 2E20 B2A8 AC19 9441 ECD2 B017 7B39 E4B1
  148. However, the identity fingerprint can be left out, in which case the
  149. bridge user will connect to that relay and use it as a bridge regardless
  150. of what identity key it presents:
  151. bridge 128.31.0.34:9009
  152. This might be useful for cases where only short bridge identifiers
  153. can be communicated to bridge users.
  154. In a future version we may also support bridge identifiers that are
  155. only a key fingerprint:
  156. bridge 4C17 FB53 2E20 B2A8 AC19 9441 ECD2 B017 7B39 E4B1
  157. and the bridge user can fetch the latest descriptor from the bridge
  158. authority (see Section 3.4).
  159. 3.2. Bridges as entry guards
  160. For now, bridge users add their bridge relays to their list of "entry
  161. guards" (see path-spec.txt for background on entry guards). They are
  162. managed by the entry guard algorithms exactly as if they were a normal
  163. entry guard -- their keys and timing get cached in the "state" file,
  164. etc. This means that when the Tor user starts up with "UseBridges"
  165. disabled, he will skip past the bridge entries since they won't be
  166. listed as up and usable in his networkstatus consensus. But to be clear,
  167. the "entry_guards" list doesn't currently distinguish guards by purpose.
  168. Internally, each bridge user keeps a smartlist of "bridge_info_t"
  169. that reflects the "bridge" lines from his torrc along with a download
  170. schedule (see Section 3.5 below). When he starts Tor, he attempts
  171. to fetch a descriptor for each configured bridge (see Section 3.4
  172. below). When he succeeds at getting a descriptor for one of the bridges
  173. in his list, he adds it directly to the entry guard list using the
  174. normal add_an_entry_guard() interface. Once a bridge descriptor has
  175. been added, should_delay_dir_fetches() will stop delaying further
  176. directory fetches, and the user begins to bootstrap his directory
  177. information from that bridge (see Section 3.3).
  178. Currently bridge users cache their bridge descriptors to the
  179. "cached-descriptors" file (annotated with purpose "bridge"), but
  180. they don't make any attempt to reuse descriptors they find in this
  181. file. The theory is that either the bridge is available now, in which
  182. case you can get a fresh descriptor, or it's not, in which case an
  183. old descriptor won't do you much good.
  184. We could disable writing out the bridge lines to the state file, if
  185. we think this is a problem.
  186. As an exception, if we get an application request when we have one
  187. or more bridge descriptors but we believe none of them are running,
  188. we mark them all as running again. This is similar to the exception
  189. already in place to help long-idle Tor clients realize they should
  190. fetch fresh directory information rather than just refuse requests.
  191. 3.3. Bridges as directory guards
  192. In addition to using bridges as the first hop in their circuits, bridge
  193. users also use them to fetch directory updates. Other than initial
  194. bootstrapping to find a working bridge descriptor (see Section 3.4
  195. below), all further non-anonymized directory fetches will be redirected
  196. to the bridge.
  197. This means that bridge relays need to have cached answers for all
  198. questions the bridge user might ask. This makes the upgrade path
  199. tricky --- for example, if we migrate to a v4 directory design, the
  200. bridge user would need to keep using v3 so long as his bridge relays
  201. only knew how to answer v3 queries.
  202. In a future design, for cases where the user has enough information
  203. to build circuits yet the chosen bridge doesn't know how to answer a
  204. given query, we might teach bridge users to make an anonymized request
  205. to a more suitable directory server.
  206. 3.4. How bridge users get their bridge descriptor
  207. Bridge users can fetch bridge descriptors in two ways: by going directly
  208. to the bridge and asking for "/tor/server/authority", or by going to
  209. the bridge authority and asking for "/tor/server/fp/ID". By default,
  210. they will only try the direct queries. If the user sets
  211. UpdateBridgesFromAuthority 1
  212. in his config file, then he will try querying the bridge authority
  213. first for bridges where he knows a digest (if he only knows an IP
  214. address and ORPort, then his only option is a direct query).
  215. If the user has at least one working bridge, then he will do further
  216. queries to the bridge authority through a full three-hop Tor circuit.
  217. But when bootstrapping, he will make a direct begin_dir-style connection
  218. to the bridge authority.
  219. As of Tor 0.2.0.10-alpha, if the user attempts to fetch a descriptor
  220. from the bridge authority and it returns a 404 not found, the user
  221. will automatically fall back to trying a direct query. Therefore it is
  222. recommended that bridge users always set UpdateBridgesFromAuthority,
  223. since at worst it will delay their fetches a little bit and notify
  224. the bridge authority of the identity fingerprint (but not location)
  225. of their intended bridges.
  226. 3.5. Bridge descriptor retry schedule
  227. Bridge users try to fetch a descriptor for each bridge (using the
  228. steps in Section 3.4 above) on startup. Whenever they receive a
  229. bridge descriptor, they reschedule a new descriptor download for 1
  230. hour from then.
  231. If on the other hand it fails, they try again after 15 minutes for the
  232. first attempt, after 15 minutes for the second attempt, and after 60
  233. minutes for subsequent attempts.
  234. In 0.2.1.x we should come up with some smarter retry schedules.
  235. 3.6. Vidalia integration
  236. Vidalia 0.0.15 has a new checkbox in its Network config window called
  237. "My ISP blocks connections to the Tor network." Users who click that
  238. box change their configuration to:
  239. TunnelDirConns 1
  240. PreferTunneledDirConns 1
  241. Once the box is checked, there is also a section for adding bridge
  242. identifiers. When at least one bridge identifier is present, Vidalia
  243. also changes their config to:
  244. UseBridges 1
  245. UpdateBridgesFromAuthority 1
  246. and updates their Bridge config option accordingly.
  247. 3.7. When should we make TunnelDirConns default
  248. Right now Tor's directory requests can be filtered on the network,
  249. and some tools used by Middle Eastern governments even do this. A user
  250. who wants to circumvent these filters should click the above box in
  251. Vidalia 0.0.15. But at what point should we make tunneled directory
  252. requests the default?
  253. Once proposal 124 (modified TLS handshake) is in place, we should
  254. consider doing the switch. This might even be in the 0.2.0.x timeframe.