roadmap-2007.tex 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. \documentclass{article}
  2. \newenvironment{tightlist}{\begin{list}{$\bullet$}{
  3. \setlength{\itemsep}{0mm}
  4. \setlength{\parsep}{0mm}
  5. % \setlength{\labelsep}{0mm}
  6. % \setlength{\labelwidth}{0mm}
  7. % \setlength{\topsep}{0mm}
  8. }}{\end{list}}
  9. \newcommand{\tmp}[1]{{\bf #1} [......] \\}
  10. \begin{document}
  11. \title{Tor Development Roadmap: Wishlist for Nov 2006--Dec 2007}
  12. \author{Roger Dingledine \and Nick Mathewson \and Shava Nerad}
  13. \maketitle
  14. \pagestyle{plain}
  15. \section{Introduction}
  16. Hi, Roger! Hi, Shava. This paragraph should get deleted soon. Right now,
  17. this document goes into about as much detail as I'd like to go into for a
  18. technical audience, since that's the audience I know best. It doesn't have
  19. time estimates everywhere. It isn't well prioritized, and it doesn't
  20. distinguish well between things that need lots of research and things that
  21. don't. The breakdowns don't all make sense. There are lots of things where
  22. I don't make it clear how they fit into larger goals, and lots of larger
  23. goals that don't break down into little things. It isn't all stuff we can do
  24. for sure, and it isn't even all stuff we can do for sure in 2007. The
  25. tmp\{\} macro indicates stuff I haven't said enough about. That said, here
  26. goes...
  27. Tor (the software) and Tor (the overall software/network/support/document
  28. suite) are now experiencing all the crises of success. Over the next year,
  29. we're probably going to grow more in terms of users, developers, and funding
  30. than before. This gives us the opportunity to perform long-neglected
  31. maintenance tasks.
  32. \section{Code and design infrastructure}
  33. \subsection{Protocol revision}
  34. To maintain backward compatibility, we've postponed major protocol
  35. changes and redesigns for a long time. Because of this, there are a number
  36. of sensible revisions we've been putting off until we could deploy several of
  37. them at once. To do each of these, we first need to discuss design
  38. alternatives with other cryptographers and outside collaborators to
  39. make sure that our choices are secure.
  40. First of all, our protocol needs better {\bf versioning support} so that we
  41. can make backward-incompatible changes to our core protocol. There are
  42. difficult anonymity issues here, since many naive designs would make it easy
  43. to tell clients apart (and then track them) based on their supported versions.
  44. With protocol versioning support would come the ability to {\bf future-proof
  45. our ciphersuites}. For example, not only our OR protocol, but also our
  46. directory protocol, is pretty firmly tied to the SHA-1 hash function, which
  47. though not yet known to be insecure for our purposes, has begun to show
  48. its age. We should
  49. remove assumptions thoughout our design based on the assumption that public
  50. keys, secret keys, or digests will remain any particular size indefinitely.
  51. A new protocol could support {\bf multiple cell sizes}. Right now, all data
  52. passes through the Tor network divided into 512-byte cells. This is
  53. efficient for high-bandwidth protocols, but inefficient for protocols
  54. like SSH or AIM that send information in small chunks. Of course, we need to
  55. investigate the extent to which multiple sizes could make it easier for an
  56. adversary to fingerprint a traffic pattern.
  57. Our OR {\bf authentication protocol}, though provably
  58. secure\cite{tap:pet2006}, relies more on particular aspects of RSA and our
  59. implementation thereof than we had initially believed. To future-proof
  60. against changes, we should replace it with a less delicate approach.
  61. \tmp{Stream migration?}
  62. \tmp{Use a better AES mode that has built-in integrity checking,
  63. doesn't grow with the number of hops, is not patented, and
  64. is implemented and maintained by smart people.}
  65. \subsection{Scalability}
  66. \subsubsection{Improved directory efficiency}
  67. Right now, clients download a statement of the {\bf network status} made by
  68. each directory authority. We could reduce network bandwidth significantly by
  69. having the authorities jointly sign a statement reflecting their vote on the
  70. current network status. This would save clients up to 160K per hour, and
  71. make their view of the network more uniform. Of course, we'd need to make
  72. sure the voting process was secure and resilient to failures in the network.
  73. We should {\bf shorten router descriptors}, since the current format includes
  74. a great deal of information that's only of interest to the directory
  75. authorities, and not of interest to clients. We can do this by having each
  76. router upload a short-form and a long-form signed descriptor, and having
  77. clients download only the short form. Even a naive version of this would
  78. save about 40\% of the bandwidth currently spent by clients downloading
  79. descriptors.
  80. We should {\bf have routers upload their descriptors even less often}, so
  81. that clients do not need to download replacements every 18 hours whether any
  82. information has changed or not. (As of Tor 0.1.2.3-alpha, clients tolerate
  83. routers that don't upload often, but routers still upload at least every 18
  84. hours to support older clients.)
  85. \subsubsection{Non-clique topology}
  86. Our current network design achieves a certain amount of its anonymity by
  87. making clients act like each other through the simple expedient of making
  88. sure that all clients know all servers, and that any server can talk to any
  89. other server. But as the number of servers increases to serve an
  90. ever-greater number of clients, these assumptions become impractical.
  91. At worst, if these scalability issues become troubling before a solution is
  92. found, we can design and build a solution to {\bf split the network into
  93. multiple slices} until a better solution comes along. This is not ideal,
  94. since rather than looking like all other users from a point of view of path
  95. selection, users would ``only'' look like 200,000--300,000 other users.
  96. We are in the process of designing {\bf improved schemes for network
  97. scalability}. Some approaches focus on limiting what an adversary can know
  98. about what a user knows; others focus on reducing the extent to which an
  99. adversary can exploit this knowledge. These are currently in their infancy,
  100. and will probably not be needed in 2007, but they must be designed in 2007 if
  101. they are to be deployed in 2008.
  102. \subsubsection{Relay incentives}
  103. \tmp{We need incentives to relay.}
  104. \subsection{Portability}
  105. Our {\bf Windows implementation}, though much improved, continues to lag
  106. behind Unix and Mac OS X, especially when running as a server. We hope to
  107. merge promising patches from Mike Chiussi to address this point, and bring
  108. Windows performance on par with other platforms.
  109. We should have {\bf better support for portable devices}, including modes of
  110. operation that require less RAM, and that write to disk less frequently (to
  111. avoid wearing out flash RAM).
  112. \subsection{Performance: resource usage}
  113. \tmp{Use less RAM when we have little. Make buffer code smarter}
  114. \tmp{Allow separate bandwidth buckets for different bandwidth classes} This
  115. gets us more users happy to run servers.
  116. \tmp{Write-limiting for directory servers}
  117. \tmp{Don't use so many sockets} We can save some for hidden services and for
  118. encrypted directories.
  119. \subsection{Performance: network usage}
  120. \tmp{Do research to figure out how well capacity is actually used.}
  121. \tmp{Adapt to congestion better. Dynamic SENDME window sizes.}
  122. \tmp{Tune pathgen algorithms to use it better.}
  123. \subsection{Performance: one Tor client, many users}
  124. \tmp{Many organizations want to manage a single Tor client on their
  125. firewall for many users, rather than having each user install a separate
  126. Tor client.} Nobody has tried this before, and we bet it will scale
  127. really poorly.
  128. Other stress-testing, and fix bottlenecks we find.
  129. \subsection{Tor servers on asymmetric bandwidth}
  130. \subsection{Running Tor as both client and server}
  131. many performance tradeoffs and balances that need more attention.
  132. \subsection{Blue-sky: UDP}
  133. \tmp{support udp traffic}
  134. \tmp{Use udp as a transport}
  135. \section{Blocking resistance}
  136. \subsection{Design for blocking resistance}
  137. We have written a design document explaining our general approach to blocking
  138. resistance. We should workshop it with other experts in the field to get
  139. their ideas about how we can improve Tor's efficacy as an anti-censorship
  140. tool.
  141. \subsection{Implementation: client-side and bridges-side}
  142. Our anticensorship design calls for some nodes to act as ``bridges'' that can
  143. circumvent a national firewall, and others inside the firewall to act as pure
  144. clients. This part of the design is quite clear-cut; we're probably ready to begin
  145. implementing it. To implement bridges, we need only to have servers publish
  146. themselves as limited-availability relays to a special bridge authority if
  147. they judge they'd make good servers. Clients need a flexible interface to
  148. learn about bridges and to act on knowledge of bridges.
  149. Clients also need to {\bf use the encrypted directory variant} added in Tor
  150. 0.1.2.3-alpha. This will let them retrieve directory information over Tor
  151. once they've got their initial bridges.
  152. Bridges will want to be able to {\bf listen on multiple addresses and ports}
  153. if they can, to give the adversary more ports to block.
  154. Additionally, we should {\bf resist content-based filters}. Though an
  155. adversary can't see what users are saying, some aspects of our protocol are
  156. easy to fingerprint {\em as} Tor. We should correct this where possible.
  157. \subsection{Implementation: bridge authorities}
  158. The design here is also reasonably clear-cut: we need to run some
  159. directory authorities with a slightly modified protocol that doesn't leak
  160. the entire list of bridges. Thus users can learn up-to-date information
  161. for bridges they already know about, but they can't learn about arbitrary
  162. new bridges.
  163. \subsection{Implementation: how users discover bridges}
  164. Our design anticipates an arms race between discovery methods and censors.
  165. We need to begin the infrastructure on our side quickly, preferably in a
  166. flexible language like Python, so we can adapt quickly to censorship.
  167. \subsection{The Tor website, docs, and mirrors}
  168. They're the first to be blocked. How do users learn about Tor in the
  169. first place, and how do they fetch a genuine copy of Tor?
  170. \section{Security}
  171. \subsection{Security research projects}
  172. \tmp{Mixed-latency}
  173. \tmp{long-distance padding}
  174. \tmp{router-zones}
  175. \tmp{defenses against end-to-end correlation} We don't expect any to work
  176. right now, but it would be useful to learn that one did. Alternatively,
  177. proving that one didn't would free up researchers in the field to go work on
  178. other things.
  179. \tmp{website fingperprinting} They work great in simulations, but in
  180. practice we hear they don't work nearly as well. We should get some actual
  181. numbers on both sides of the issue, and figure out what's going on.
  182. \subsection{Implementation security}
  183. \tmp{Encrypt more keys}
  184. \tmp{Talk Coverity or somebody with a copy of vs2005 into running tools on
  185. our code} And figure out a way to get our code checked periodically rather
  186. than just once.
  187. \tmp{Directory guards}
  188. \subsection{Detect corrupt exits and other servers}
  189. \tmp{Improved feedback mechanism for tools like SOAT to use}
  190. \tmp{More tools like SOAT: check for routers that bork SSL, routers that
  191. sniff (and use) passwords...}
  192. \tmp{Add a way for authorities to declare families.}
  193. \tmp{Make authority administration simpler so authority ops spend less time
  194. on random junk and more time on care and feeding of the network.}
  195. \tmp{Authorities should measure Stable (and maybe Fast) themselves, and not
  196. just believe declared router uptime.}
  197. \subsection{Protocol security}
  198. \tmp{Build in hooks for DoS-resistance: when we need it, we'll really need
  199. it.}
  200. \section{Development infrastructure}
  201. \subsection{Build farm}
  202. We've begun to deploy a cross-platform distributed build farm of hosts
  203. that build and test the Tor source every time it changes in our development
  204. repository.
  205. We need to {\bf get more participants}, so that we can test a larger variety
  206. of platforms. (Previously, we've only found out when our code had broken on
  207. obscure platforms when somebody got around to building it.)
  208. We need also to {\bf add our dependencies} to the build farm, so that we can
  209. ensure that libraries we need (especially libevent) do not stop working on
  210. any important platform between one release and the next.
  211. \subsection{Improved testing harness}
  212. Currently, our {\bf unit tests} cover only about XX\% of the code base. This
  213. is uncomfortably low; we should write more and switch to a more flexible
  214. testing framework.
  215. We should also write flexible {\bf automated single-host deployment tests} so
  216. we can more easily verify that the current codebase works with the network.
  217. \subsection{Centralized build system}
  218. We currently rely on a separate packager to maintain the packaging system and
  219. to build Tor on each platform for which we distribute binaries. Separate
  220. package maintainers is sensible, but separate package builders has meant
  221. long turnaround times between source releases and package releases. We
  222. should create the necessary infrastructure for us to produce binaries for all
  223. major packages within an hour or so of source release.
  224. \subsection{Improved metrics}
  225. \tmp{We'd like to know how the network is doing.}
  226. \tmp{We'd like to know where users are in an even less intrusive way.}
  227. \tmp{We'd like to know how much of the network is getting used.}
  228. \subsection{Controller library}
  229. We've done lots of design and development on our controller interface, which
  230. allows UI applications and other tools to interact with Tor. We could
  231. encourage the development of more such tools by releasing a {\bf
  232. general-purpose controller library}, ideally with API support for several
  233. popular programming languages.
  234. \section{User experience}
  235. \subsection{Get blocked less, get blocked less broadly}
  236. Right now, some services block connections from the Tor network because
  237. they don't have a better
  238. way to keep vandals from abusing them than blocking IP addresses associated
  239. with vandalism. Our approach so far has been to educate them about better
  240. solutions that currently exist, but we should also {\bf create better
  241. solutions for limiting vandalism by anonymous users} like credential and
  242. blind-signature based implementations, and encourage their use. Other
  243. promising starting points including writing a patch and explanation for
  244. Wikipedia, and helping Freenode to document, maintain, and expand its
  245. current Tor-friendly position.
  246. Those who do block Tor users also block overbroadly, sometimes blacklisting
  247. operators of Tor servers that do not permit exit to their services. We could
  248. obviate innocent reasons for doing so by designing a {\bf narrowly-targeted Tor
  249. RBL service} so that those who wanted to overblock Tor clould no longer
  250. plead incompetence.
  251. \subsection{All-in-one bundle}
  252. \tmp{a.k.a ``Torpedo'', but rename this.}
  253. \subsection{LiveCD Tor}
  254. \tmp{a.k.a anonym.os done right}
  255. \subsection{A Tor client in a VM}
  256. \tmp{a.k.a JanusVM} which is quite related to the firewall-level deployment
  257. section below
  258. \subsection{Interface improvements}
  259. \tmp{Allow controllers to manipulate server status.}
  260. (Why is this in the User Experience section?)
  261. \subsection{Firewall-level deployment}
  262. Another useful deployment mode for some users is using {\bf Tor in a firewall
  263. configuration}, and directing all their traffic through Tor. This can be a
  264. little tricky to set up currently, but it's an effective way to make sure no
  265. traffic leaves the host un-anonymized. To achieve this, we need to {\bf
  266. improve and port our new TransPort} feature which allows Tor to be used
  267. without SOCKS support; to {\bf add an anonymizing DNS proxy} feature to Tor;
  268. and to {\bf construct a recommended set of firewall configurations} to redirect
  269. traffic to Tor.
  270. This is an area where {\bf deployment via a livecd}, or an installation
  271. targetted at specialized home routing hardware, could be useful.
  272. \subsection{Assess software and configurations for anonymity risks}
  273. which firefox extensions to use, and which to avoid. best practices for
  274. how to torify each class of application.
  275. clean up our own bundled software:
  276. E.g. Merge the good features of Foxtor into Torbutton
  277. \subsection{Localization}
  278. Right now, most of our user-facing code is internationalized. We need to
  279. internationalize the last few hold-outs (like the Tor installer), and get
  280. more translations for the parts that are already internationalized.
  281. [Do you mean the Vidalia bundle installer, or the Tor-installer-for-experts? -RD]
  282. Also, we should look into a {\bf unified translator's solution}. Currently,
  283. since different tools have been internationalized using the
  284. framework-appropriate method, different tools require translators to localize
  285. them via different interfaces. Inasmuch as possible, we should make
  286. translators only need to use a single tool to translate the whole Tor suite.
  287. \section{Support}
  288. would be nice to set up some actual user support infrastructure, especially
  289. focusing on server operators and on coordinating volunteers.
  290. \section{Documentation}
  291. \subsection{Unified documentation scheme}
  292. We need to {\bf inventory our documentation.} Our documentation so far has
  293. been mostly produced on an {\it ad hoc} basis, in response to particular
  294. needs and requests. We should figure out what documentation we have, which of
  295. it (if any) should get priority, and whether we can't put it all into a
  296. single format.
  297. We could {\bf unify the docs} into a single book-like thing. This will also
  298. help us identify what sections of the ``book'' are missing.
  299. \subsection{Missing technical documentation}
  300. We should {\bf revise our design paper} to reflect the new decisions and
  301. research we've made since it was published in 2004. This will help other
  302. researchers evaluate and suggest improvements to Tor's current design.
  303. Other projects sometimes implement the client side of our prototocol. We
  304. encourage this, but we should write {\bf a document about how to avoid
  305. excessive resource use}, so we don't need to worry that they will do so
  306. without regard to the effect of their choices on server resources.
  307. \subsection{Missing user documentation}
  308. \tmp{Discoursive and comprehensive docs}
  309. \bibliographystyle{plain} \bibliography{tor-design}
  310. \end{document}