171-separate-streams.txt 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. Filename: 171-separate-streams-by-port-or-host.txt
  2. Title: Separate streams across circuits by destination port or destination host
  3. Author: Robert Hogan, Jacob Appelbaum, Damon McCoy
  4. Created: 21-Oct-2008
  5. Modified: 30-Aug-2010
  6. Status: Draft
  7. Motivation:
  8. Streams are currently attached to circuits without regard to their content,
  9. destination host, or destination port. We propose three options,
  10. IsolateBySOCKSUser, IsolateStreamsByPort and IsolateStreamsByHost to change the
  11. default behavior.
  12. The contents of some streams will always have revealing plain text information;
  13. these streams should be treated differently than other streams that may or may
  14. not have unencrypted PII content. DNS, with the exception of DNSCurve, is
  15. always unencrypted. It is reasonable to assume that other protocols may exist
  16. that have a similar issue and may cause user concern. It is also the case that
  17. we must balance network load issues and stream privacy. The Tor network will not
  18. currently scale to one circuit per application connection nor should it anytime
  19. soon.
  20. Circuits are currently created with a few constraints and are rotated within
  21. a reasonable time window. This allows a rogue exit node to correlate all
  22. streams on a given circuit.
  23. Design:
  24. We propose two options for isolation of streams that lessen the observability
  25. and linkability of the Tor client's traffic.
  26. IsolateStreamsByPort will take a list of ports or optionally the keyword 'All'
  27. in place of a port list. The use of the keyword 'All' will ensure that all
  28. application connections attached to streams will be isolated to separate
  29. circuits by port number.
  30. IsolateStreamsByHost will take a boolean value. When enabled, all application
  31. connections, regardless of port number will be isolated with separate circuits
  32. per host. If this option is enabled, we should ensure that the client has a
  33. reasonable number of pre-built circuits to ensure perceived performance. This
  34. should also intentionally limit the total number of circuits a client will
  35. build to ten circuits to prevent abuse and load on the network. This is a
  36. trade-off of performance for anonymity. Tor will issue a warning if a client
  37. encounters this limit.
  38. IsolateBySOCKSUser will take a boolean value. When enabled, all application
  39. connections, regardless of port number will be isolated with separate circuits
  40. per SOCKS username. This options ensures that any two streams that were created
  41. with different SOCKS usernames will be sent over different circuits. The empty
  42. username will be treated as its own username different from all other usernames.
  43. Security implications:
  44. It is believed that the proposed changes will improve the anonymity for end
  45. user stream privacy. The end user will no longer link all streams at a single
  46. exit node during a given time window.
  47. There is a possible attack where a hostile web page possibly in collusion with
  48. an exit node contains image links for images at (say) "evil.example.com:53" and
  49. "evil.example.com:31337", and thereby (if they're lucky) correlate port-80
  50. circuits with port-53 and port-31337 circuits.
  51. Specification:
  52. The Tor client circuit selection process is not entirely specified. Any client
  53. circuit specification must take these changes into account.
  54. Compatibility:
  55. The proposed changes should not create any compatibility issues. New Tor clients
  56. will be able to take advantage of this without any modification to the network.
  57. Implementation:
  58. It is further proposed that IsolateStreamsByPort will be enabled by default
  59. for port 22, 53, and port 80.
  60. It is further proposed that IsolateStreamsByHost will be disabled by default.
  61. Implementation notes:
  62. The implementation of this option may want to consider cases where the same
  63. exit node is shared by two or more circuits and IsolateStreamsByPort is in
  64. force. Since the purpose of the option is to reduce the opportunity of Exit
  65. Nodes to attack traffic from the same source on multiple ports, the
  66. implementation may need to ensure that circuits reserved for the exclusive use
  67. of given ports do not share the same exit node.
  68. Circuits should not be shared by unique clients. Tor should check to ensure
  69. that peer IP addresses are identical when they connect to the SOCKS listener or
  70. the TransPort listener before sharing a circuit. If the addresses are not
  71. identical, Tor should ensure that the circuits are not shared.
  72. Performance and scalability notes:
  73. It is further proposed that IsolateStreamsByPort will be enabled by default for
  74. all ports after a reasonable assessment is performed. Specifically, we should
  75. determine the impact this option has on Tor clients and the Tor network.