127-dirport-mirrors-downloads.txt 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. Filename: 127-dirport-mirrors-downloads.txt
  2. Title: Relaying dirport requests to Tor download site
  3. Version: $Revision: 11988 $
  4. Last-Modified: $Date: 2007-10-16 12:59:42 -0400 (Tue, 16 Oct 2007) $
  5. Author: Roger Dingledine
  6. Created: 2007-12-02
  7. Status: Needs-Research
  8. 1. Overview
  9. Some countries and networks block connections to the Tor website. As
  10. time goes by, this will remain a problem and it may even become worse.
  11. We have a big pile of mirrors (google for "Tor mirrors"), but few of
  12. our users think to try a search like that. Also, many of these mirrors
  13. might be automatically blocked since their pages contain words that
  14. might cause them to get blocked. And lastly, we can imagine a future
  15. where the blockers are aware of the mirror list too.
  16. Here we describe a new set of URLs for Tor's DirPort that will relay
  17. connections from users to the official Tor download site. Rather than
  18. trying to cache a bunch of new Tor packages (which is a hassle in terms
  19. of keeping them up to date, and a hassle in terms of drive space used),
  20. we instead just proxy the requests directly to Tor's /dist page.
  21. Specifically, we should support
  22. GET /tor/dist/$1
  23. and
  24. GET /tor/website/$1
  25. 2. Linked connections
  26. Check out the connection_ap_make_link() function, as called from
  27. directory.c. Tor clients use this to create a "fake" socks connection
  28. back to themselves, and then they attach a directory request to it,
  29. so they can launch directory fetches via Tor. We could piggyback on
  30. this feature.
  31. 3. One-hop circuits or three-hop circuits?
  32. We could relay the connections directly to the download site -- but
  33. this produces recognizable outgoing traffic on the bridge or cache's
  34. network, which will probably surprise our nice volunteers. (Is this
  35. a good enough reason to discard the direct connection idea?)
  36. But we still have a choice: should we do a one-hop begindir-style
  37. connection to the mirror site (make a one-hop circuit to it, then send a
  38. 'begindir' cell down the circuit), or should we do a normal three-hop
  39. anonymized connection?
  40. If these mirrors are mainly bridges, doing a one-hop connection creates
  41. another way to enumerate bridges. That would argue for three-hop. On
  42. the other hand, downloading a 10+ megabyte installer through a normal
  43. Tor circuit can't be fun. But if you're already getting throttled a
  44. lot because you're in the "relayed traffic" bucket, you're going to
  45. have to accept a slow transfer anyway. So three-hop it is.
  46. Speaking of which, we would want to label this connection
  47. as "relay" traffic for the purposes of rate limiting; see
  48. connection_counts_as_relayed_traffic() and or_conn->client_used. This
  49. will be a bit tricky though, because it uses the bridge's guards.
  50. 4. Scanning resistance
  51. One other goal we'd like to achieve, or at least not hinder, is making
  52. it hard to scan large swaths of the Internet to look for responses
  53. that indicate a bridge.
  54. In general this is a really hard problem, so it's not critical that
  55. we solve it here. But we can note that some bridges should open their
  56. DirPort (and offer this functionality), and others shouldn't. Then some
  57. bridges provide a download mirror while others are scanning-resistant.
  58. 5. Integrity checking
  59. If we serve this stuff in plaintext from the bridge, anybody in between
  60. the user and the bridge can intercept and modify it. The bridge can too.
  61. If we do an anonymized three-hop connection, the exit node can also
  62. intercept and modify the exe it sends back.
  63. Are we setting ourselves up for rogue exit relays, or rogue bridges,
  64. that trojan our users?
  65. Answer #1: Users need to do pgp signature checking. Not a very good
  66. answer, a) because it's complex, and b) because they don't know the
  67. right signatures in the first place.
  68. Answer #2: The mirrors could exit from a specific Tor relay, using the
  69. '.exit' notation. This would make connections a bit more brittle, but
  70. would resolve the rogue exit relay issue. We could even round-robin
  71. among several, and the list could be dynamic -- for example, all the
  72. relays with an Authority flag that allow exits to the Tor website.
  73. Answer #3: We could suggest that users only use trusted bridges for
  74. fetching a copy of Tor. Hopefully they heard about the bridge from a
  75. trusted source rather than from the adversary.
  76. Answer #4: What if the adversary is trawling for Tor downloads by
  77. network signature -- either by looking for known bytes in the binary,
  78. or by looking for "GET /tor/dist/"? It would be nice to encrypt the
  79. connection from the bridge user to the bridge. And we can! The bridge
  80. already supports TLS. Rather than initiating a TLS renegotiation after
  81. connecting to the ORPort, the user should actually request a URL. Then
  82. the ORPort can either pass the connection off as a linked conn to the
  83. dirport, or renegotiate and become a Tor connection, depending on how
  84. the client behaves.