roadmap-2007.tex 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  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. % TO DO:
  16. % add cites
  17. % add time estimates
  18. \section{Introduction}
  19. Hi, Roger! Hi, Shava. This paragraph should get deleted soon. Right now,
  20. this document goes into about as much detail as I'd like to go into for a
  21. technical audience, since that's the audience I know best. It doesn't have
  22. time estimates everywhere. It isn't well prioritized, and it doesn't
  23. distinguish well between things that need lots of research and things that
  24. don't. The breakdowns don't all make sense. There are lots of things where
  25. I don't make it clear how they fit into larger goals, and lots of larger
  26. goals that don't break down into little things. It isn't all stuff we can do
  27. for sure, and it isn't even all stuff we can do for sure in 2007. The
  28. tmp\{\} macro indicates stuff I haven't said enough about. That said, here
  29. goes...
  30. Tor (the software) and Tor (the overall software/network/support/document
  31. suite) are now experiencing all the crises of success. Over the next year,
  32. we're probably going to grow more in terms of users, developers, and funding
  33. than before. This gives us the opportunity to perform long-neglected
  34. maintenance tasks.
  35. \section{Code and design infrastructure}
  36. \subsection{Protocol revision}
  37. To maintain backward compatibility, we've postponed major protocol
  38. changes and redesigns for a long time. Because of this, there are a number
  39. of sensible revisions we've been putting off until we could deploy several of
  40. them at once. To do each of these, we first need to discuss design
  41. alternatives with other cryptographers and outside collaborators to
  42. make sure that our choices are secure.
  43. First of all, our protocol needs better {\bf versioning support} so that we
  44. can make backward-incompatible changes to our core protocol. There are
  45. difficult anonymity issues here, since many naive designs would make it easy
  46. to tell clients apart (and then track them) based on their supported versions.
  47. With protocol versioning support would come the ability to {\bf future-proof
  48. our ciphersuites}. For example, not only our OR protocol, but also our
  49. directory protocol, is pretty firmly tied to the SHA-1 hash function, which
  50. though not yet known to be insecure for our purposes, has begun to show
  51. its age. We should
  52. remove assumptions thoughout our design based on the assumption that public
  53. keys, secret keys, or digests will remain any particular size indefinitely.
  54. A new protocol could support {\bf multiple cell sizes}. Right now, all data
  55. passes through the Tor network divided into 512-byte cells. This is
  56. efficient for high-bandwidth protocols, but inefficient for protocols
  57. like SSH or AIM that send information in small chunks. Of course, we need to
  58. investigate the extent to which multiple sizes could make it easier for an
  59. adversary to fingerprint a traffic pattern.
  60. Our OR {\bf authentication protocol}, though provably
  61. secure\cite{tap:pet2006}, relies more on particular aspects of RSA and our
  62. implementation thereof than we had initially believed. To future-proof
  63. against changes, we should replace it with a less delicate approach.
  64. We might design a {\bf stream migration} feature so that streams tunneled
  65. over Tor could be more resilient to dropped connections and changed IPs.
  66. As a part of our design, we should investigate possible {\bf cipher modes}
  67. other than counter mode. For example, a mode with built-in integrity
  68. checking, error propagation, and random access could simplify our protocol
  69. significantly. Sadly, many of these are patented and unavailable for us.
  70. \subsection{Scalability}
  71. \subsubsection{Improved directory efficiency}
  72. Right now, clients download a statement of the {\bf network status} made by
  73. each directory authority. We could reduce network bandwidth significantly by
  74. having the authorities jointly sign a statement reflecting their vote on the
  75. current network status. This would save clients up to 160K per hour, and
  76. make their view of the network more uniform. Of course, we'd need to make
  77. sure the voting process was secure and resilient to failures in the network.
  78. We should {\bf shorten router descriptors}, since the current format includes
  79. a great deal of information that's only of interest to the directory
  80. authorities, and not of interest to clients. We can do this by having each
  81. router upload a short-form and a long-form signed descriptor, and having
  82. clients download only the short form. Even a naive version of this would
  83. save about 40\% of the bandwidth currently spent by clients downloading
  84. descriptors.
  85. We should {\bf have routers upload their descriptors even less often}, so
  86. that clients do not need to download replacements every 18 hours whether any
  87. information has changed or not. (As of Tor 0.1.2.3-alpha, clients tolerate
  88. routers that don't upload often, but routers still upload at least every 18
  89. hours to support older clients.)
  90. \subsubsection{Non-clique topology}
  91. Our current network design achieves a certain amount of its anonymity by
  92. making clients act like each other through the simple expedient of making
  93. sure that all clients know all servers, and that any server can talk to any
  94. other server. But as the number of servers increases to serve an
  95. ever-greater number of clients, these assumptions become impractical.
  96. At worst, if these scalability issues become troubling before a solution is
  97. found, we can design and build a solution to {\bf split the network into
  98. multiple slices} until a better solution comes along. This is not ideal,
  99. since rather than looking like all other users from a point of view of path
  100. selection, users would ``only'' look like 200,000--300,000 other users.
  101. We are in the process of designing {\bf improved schemes for network
  102. scalability}. Some approaches focus on limiting what an adversary can know
  103. about what a user knows; others focus on reducing the extent to which an
  104. adversary can exploit this knowledge. These are currently in their infancy,
  105. and will probably not be needed in 2007, but they must be designed in 2007 if
  106. they are to be deployed in 2008.
  107. \subsubsection{Relay incentives}
  108. \tmp{We need incentives to relay.}
  109. \subsection{Portability}
  110. Our {\bf Windows implementation}, though much improved, continues to lag
  111. behind Unix and Mac OS X, especially when running as a server. We hope to
  112. merge promising patches from Mike Chiussi to address this point, and bring
  113. Windows performance on par with other platforms.
  114. We should have {\bf better support for portable devices}, including modes of
  115. operation that require less RAM, and that write to disk less frequently (to
  116. avoid wearing out flash RAM).
  117. \subsection{Performance: resource usage}
  118. We've been working on {\bf using less RAM}, especially on servers. This has
  119. paid off a lot for directory caches in the 0.1.2, which in some cases are
  120. using 90\% less memory than they used to require. But we can do better,
  121. especially in the area around our buffer management algorithms, by using an
  122. approach more like the BSD and Linux kernels use instead of our current ring
  123. buffer approach. (For OR connections, we can just use queues of cell-sized
  124. chunks produced with a specialized allocator.) This could potentially save
  125. around 25 to 50\% of the memory currently allocated for network buffers, and
  126. make Tor a more attractive proposition for restricted-memory environments
  127. like old computers, mobile devices, and the like.
  128. We should improve our {\bf bandwidth limiting}. The current system has been
  129. crucial in making users willing to run servers: nobody is willing to run a
  130. server if it might use an unbounded amount of bandwidth, especially if they
  131. are charged for their usage. We can make our system better by letting users
  132. configure bandwidth limits independently for their own traffic and traffic
  133. relayed for others; and by adding write limits for users running directory
  134. servers.
  135. On many hosts, sockets are still in short supply, and will be until we can
  136. migrate our protocol to UDP. We can {\bf use fewer sockets} by making our
  137. self-to-self connections happen internally to the code rather than involving
  138. the operating system's socket implementation.
  139. \subsection{Performance: network usage}
  140. We know too little about how well our current path
  141. selection algorithms actually spread traffic around the network in practice.
  142. We should {\bf research the efficacy of our traffic allocation} and either
  143. assure ourselves that it is close enough to optimal as to need no improvement
  144. (unlikely) or {\bf identify ways to improve network usage}, and get more
  145. users' traffic delivered faster. Performing this research will require
  146. careful thought about anonymity implications.
  147. We should also {\bf examine the efficacy of our congestion control
  148. algorithm}, and see whether we can improve client performance in the
  149. presence of a congested network through dynamic `sendme' window sizes or
  150. other means. This will have anonymity implications too if we aren't careful.
  151. % \tmp{Tune pathgen algorithms to use it better.}
  152. %
  153. % I think I've included this in the above -NM
  154. \subsection{Performance scenario: one Tor client, many users}
  155. We should {\bf improve Tor's performance when a single Tor handles many
  156. clients}. Many organizations want to manage a single Tor client on their
  157. firewall for many users, rather than having each user install a separate
  158. Tor client. We haven't optimized for this scenario, and it is likely that
  159. there are some code paths in the current implementation that become
  160. inefficient when a single Tor is servicing hundreds or thousands of client
  161. connections. (Additionally, it is likely that such clients have interesting
  162. anonymity requirements the we should investigate.) We should profile Tor
  163. under appropriate loads, identify bottlenecks, and fix them.
  164. % \tmp{Other stress-testing, and fix bottlenecks we find.}
  165. %
  166. % I've moved this into 'improved testing harness' below
  167. \subsection{Tor servers on asymmetric bandwidth}
  168. \tmp{Roger, please write? I don't know what to say here.}
  169. \subsection{Running Tor as both client and server}
  170. \tmp{many performance tradeoffs and balances that need more attention.
  171. Roger, please write.}
  172. \subsection{Protocol redesign for UDP}
  173. Tor has relayed only TCP traffic since its first versions, and has used
  174. TLS-over-TCP to do so. This approach has proved reliable and flexible, but
  175. in the long term we will need to allow UDP traffic on the network, and switch
  176. some or all of the network to using a UDP transport. {\bf Supporting UDP
  177. traffic} will make Tor more suitable for protocols that require UDP, such
  178. as many VOIP protocols. {\bf Using a UDP transport} could greatly reduce
  179. resource limitations on servers, and make the network far less interruptable
  180. by lossy connections. Either of these protocol changes would require a great
  181. deal of design work, however. We hope to be able to enlist the aid of a few
  182. talented graduate students to assist with the initial design and
  183. specification, but the actual implementation will require significant testing
  184. of different reliable transport approaches.
  185. \section{Blocking resistance}
  186. \subsection{Design for blocking resistance}
  187. We have written a design document explaining our general approach to blocking
  188. resistance. We should workshop it with other experts in the field to get
  189. their ideas about how we can improve Tor's efficacy as an anti-censorship
  190. tool.
  191. \subsection{Implementation: client-side and bridges-side}
  192. Our anticensorship design calls for some nodes to act as ``bridges'' that can
  193. circumvent a national firewall, and others inside the firewall to act as pure
  194. clients. This part of the design is quite clear-cut; we're probably ready to begin
  195. implementing it. To implement bridges, we need only to have servers publish
  196. themselves as limited-availability relays to a special bridge authority if
  197. they judge they'd make good servers. Clients need a flexible interface to
  198. learn about bridges and to act on knowledge of bridges.
  199. Clients also need to {\bf use the encrypted directory variant} added in Tor
  200. 0.1.2.3-alpha. This will let them retrieve directory information over Tor
  201. once they've got their initial bridges.
  202. Bridges will want to be able to {\bf listen on multiple addresses and ports}
  203. if they can, to give the adversary more ports to block.
  204. Additionally, we should {\bf resist content-based filters}. Though an
  205. adversary can't see what users are saying, some aspects of our protocol are
  206. easy to fingerprint {\em as} Tor. We should correct this where possible.
  207. \subsection{Implementation: bridge authorities}
  208. The design here is also reasonably clear-cut: we need to run some
  209. directory authorities with a slightly modified protocol that doesn't leak
  210. the entire list of bridges. Thus users can learn up-to-date information
  211. for bridges they already know about, but they can't learn about arbitrary
  212. new bridges.
  213. \subsection{Implementation: how users discover bridges}
  214. Our design anticipates an arms race between discovery methods and censors.
  215. We need to begin the infrastructure on our side quickly, preferably in a
  216. flexible language like Python, so we can adapt quickly to censorship.
  217. \subsection{Resisting censorship of the Tor website, docs, and mirrors}
  218. We should take some effort to consider {\bf initial distribution of Tor and
  219. related information} in countries where the Tor website and mirrors are
  220. censored. (Right now, most countries that block access to Tor block only the
  221. main website and leave mirrors and the network itself untouched.) Falling
  222. back on word-of-mouth is always a good last resort, but we should also take
  223. steps to make sure it's relatively easy for users to get ahold of a copy.
  224. \section{Security}
  225. \subsection{Security research projects}
  226. We should investigate approaches with some promise to help Tor resist
  227. end-to-end traffic correlation attacks. It's an open research question
  228. whether (and to what extent) {\bf mixed-latency} networks, {\bf low-volume
  229. long-distance padding}, or other approaches can resist these attacks, which
  230. are currently some of the most effective against careful Tor users. We
  231. should research these questions and perform simulations to identify
  232. opportunities for strengthening our design without dropping performance to
  233. unacceptable levels. %Cite something
  234. We've got some preliminary results suggesting that {\bf a topology-aware
  235. routing algorithm}~\cite{routing-zones} could reduce Tor users'
  236. vulnerability against local or ISP-level adversaries, by ensuring that they
  237. are never in a position to watch both ends of a connection. We need to
  238. examine the effects of this approach in more detail and consider side-effects
  239. on anonymity against other kinds of adversaries. If the approach still looks
  240. promising, we should investigate ways for clients to implement it (or an
  241. approximation of it) without having to download routing tables for the whole
  242. internet.
  243. %\tmp{defenses against end-to-end correlation} We don't expect any to work
  244. %right now, but it would be useful to learn that one did. Alternatively,
  245. %proving that one didn't would free up researchers in the field to go work on
  246. %other things.
  247. %
  248. % See above; I think I got this.
  249. We should research the efficacy of {\bf website fingperprinting} attacks,
  250. wherein an adversary tries to match the distinctive traffic and timing
  251. pattern of the resources constituting a given website to the traffic pattern
  252. of a user's client. These attacks work great in simulations, but in
  253. practice we hear they don't work nearly as well. We should get some actual
  254. numbers to investigte the issue, and figure out what's going on. If we
  255. resist these attacks, or can improve our design to resist them, we should.
  256. % add cites
  257. \subsection{Implementation security}
  258. Right now, each Tor node stores its keys unencrypted. We should {\bf encrypt
  259. more Tor keys} so that Tor authorities can require a startup password. We
  260. should look into adding intermediary medium-term ``signing keys'' between
  261. identity keys and onion keys, so that a password could be required to replace
  262. a signing key, but not to start Tor. This would improve Tor's long-term
  263. security, especially in its directory authority infrastructure.
  264. We should also {\bf mark RAM that holds key material as non-swappable} so
  265. that there is no risk of recovering key material from a hard disk
  266. compromise. This would require submitting patches upstream to OpenSSL, where
  267. support for marking memory as sensitive is currently in a very preliminary
  268. state.
  269. There are numerous tools for identifying trouble spots in code (such as
  270. Coverity or even VS2005's code analysis tool) and we should convince somebody
  271. to run some of them against the Tor codebase. Ideally, we could figure out a
  272. way to get our code checked periodically rather than just once.
  273. We should try {\bf protocol fuzzing} to identify errors in our
  274. implementation.
  275. Our guard nodes help prevent an attacker from being able to become a chosen
  276. client's entry point by having each client choose a few favorite entry points
  277. as ``guards'' and stick to them. We should implement a {\bf directory
  278. guards} feature to keep adversaries from enumerating Tor users by acting as
  279. a directory cache.
  280. \subsection{Detect corrupt exits and other servers}
  281. With the success of our network, we've attracted servers in many locations,
  282. operated by many kinds of people. Unfortunately, some of these locations
  283. have compromised or defective networks, and some of these people are
  284. untrustworthy or incompetent. Our current design relies on authority
  285. administrators to identify bad nodes and mark them as nonfunctioning. We
  286. should {\bf automate the process of identifying malfunctioning nodes} as
  287. follows:
  288. We should create a generic {\bf feedback mechanism for add-on tools} like
  289. Mike Perry's ``Snakes on a Tor'' to report failing nodes to authorities.
  290. We should write tools to {\bf detect more kinds of innocent node failure},
  291. such as nodes whose network providers intercept SSL, nodes whose network
  292. providers censor popular websites, and so on. We should also try to detect
  293. {\bf routers that snoop traffic}; we could do this by launching connections
  294. to throwaway accounts, and seeing which accounts get used.
  295. We should add {\bf an efficient way for authorities to mark a set of servers
  296. as probably collaborating} though not necessarily otherwise dishonest.
  297. This happens when an administrator starts multiple routers, but doesn't mark
  298. them as belonging to the same family.
  299. To avoid attacks where an adversary claims good performance in order to
  300. attract traffic, we should {\bf have authorities measure node performance}
  301. (including stability and bandwidth) themselves, and not simply believe what
  302. they're told. Measuring bandwidth can be tricky, since it's hard to
  303. distinguish between a server with low capacity, and a high-capacity server
  304. with most of its capacity in use.
  305. {\bf Operating a directory authority should be easier.} We rely on authority
  306. operators to keep the network running well, but right now their job involves
  307. too much busywork and administrative overhead. A better interface for them
  308. to use could free their time to work on exception cases rather than on
  309. adding named nodes to the network.
  310. \subsection{Protocol security}
  311. In addition to other protocol changes discussed above,
  312. % And should we move somve of them down here? -NM
  313. we should add {\bf hooks for denial-of-service resistance}; we have some
  314. prelimiary designs, but we shouldn't postpone them until we realy need them.
  315. If somebody tries a DDoS attack against the Tor network, we won't want to
  316. wait for all the servers and clients to upgrade to a new version.
  317. \section{Development infrastructure}
  318. \subsection{Build farm}
  319. We've begun to deploy a cross-platform distributed build farm of hosts
  320. that build and test the Tor source every time it changes in our development
  321. repository.
  322. We need to {\bf get more participants}, so that we can test a larger variety
  323. of platforms. (Previously, we've only found out when our code had broken on
  324. obscure platforms when somebody got around to building it.)
  325. We need also to {\bf add our dependencies} to the build farm, so that we can
  326. ensure that libraries we need (especially libevent) do not stop working on
  327. any important platform between one release and the next.
  328. \subsection{Improved testing harness}
  329. Currently, our {\bf unit tests} cover only about XX\% of the code base. This
  330. is uncomfortably low; we should write more and switch to a more flexible
  331. testing framework.
  332. We should also write flexible {\bf automated single-host deployment tests} so
  333. we can more easily verify that the current codebase works with the network.
  334. We should build automated {\bf stress testing} frameworks so we can see which
  335. realistic loads cause Tor to perform badly, and regularly profile Tor against
  336. these loads. This would give us {\it in vitro} performance values to
  337. supplement our deployment experience.
  338. \subsection{Centralized build system}
  339. We currently rely on a separate packager to maintain the packaging system and
  340. to build Tor on each platform for which we distribute binaries. Separate
  341. package maintainers is sensible, but separate package builders has meant
  342. long turnaround times between source releases and package releases. We
  343. should create the necessary infrastructure for us to produce binaries for all
  344. major packages within an hour or so of source release.
  345. \subsection{Improved metrics}
  346. \tmp{We'd like to know how the network is doing.}
  347. \tmp{We'd like to know where users are in an even less intrusive way.}
  348. \tmp{We'd like to know how much of the network is getting used.}
  349. \subsection{Controller library}
  350. We've done lots of design and development on our controller interface, which
  351. allows UI applications and other tools to interact with Tor. We could
  352. encourage the development of more such tools by releasing a {\bf
  353. general-purpose controller library}, ideally with API support for several
  354. popular programming languages.
  355. \section{User experience}
  356. \subsection{Get blocked less, get blocked less broadly}
  357. Right now, some services block connections from the Tor network because
  358. they don't have a better
  359. way to keep vandals from abusing them than blocking IP addresses associated
  360. with vandalism. Our approach so far has been to educate them about better
  361. solutions that currently exist, but we should also {\bf create better
  362. solutions for limiting vandalism by anonymous users} like credential and
  363. blind-signature based implementations, and encourage their use. Other
  364. promising starting points including writing a patch and explanation for
  365. Wikipedia, and helping Freenode to document, maintain, and expand its
  366. current Tor-friendly position.
  367. Those who do block Tor users also block overbroadly, sometimes blacklisting
  368. operators of Tor servers that do not permit exit to their services. We could
  369. obviate innocent reasons for doing so by designing a {\bf narrowly-targeted Tor
  370. RBL service} so that those who wanted to overblock Tor clould no longer
  371. plead incompetence.
  372. \subsection{All-in-one bundle}
  373. \tmp{a.k.a ``Torpedo'', but rename this.}
  374. \subsection{LiveCD Tor}
  375. \tmp{a.k.a anonym.os done right}
  376. \subsection{A Tor client in a VM}
  377. \tmp{a.k.a JanusVM} which is quite related to the firewall-level deployment
  378. section below
  379. \subsection{Interface improvements}
  380. \tmp{Allow controllers to manipulate server status.}
  381. % (Why is this in the User Experience section?) -RD
  382. \subsection{Firewall-level deployment}
  383. Another useful deployment mode for some users is using {\bf Tor in a firewall
  384. configuration}, and directing all their traffic through Tor. This can be a
  385. little tricky to set up currently, but it's an effective way to make sure no
  386. traffic leaves the host un-anonymized. To achieve this, we need to {\bf
  387. improve and port our new TransPort} feature which allows Tor to be used
  388. without SOCKS support; to {\bf add an anonymizing DNS proxy} feature to Tor;
  389. and to {\bf construct a recommended set of firewall configurations} to redirect
  390. traffic to Tor.
  391. This is an area where {\bf deployment via a livecd}, or an installation
  392. targetted at specialized home routing hardware, could be useful.
  393. \subsection{Assess software and configurations for anonymity risks}
  394. \tmp{which firefox extensions to use, and which to avoid. best practices for
  395. how to torify each class of application.}
  396. \tmp{clean up our own bundled software:
  397. E.g. Merge the good features of Foxtor into Torbutton}
  398. \subsection{Localization}
  399. Right now, most of our user-facing code is internationalized. We need to
  400. internationalize the last few hold-outs (like the Tor installer), and get
  401. more translations for the parts that are already internationalized.
  402. %[Do you mean the Vidalia bundle installer, or the Tor-installer-for-experts?
  403. %-RD]
  404. % The latter -NM
  405. Also, we should look into a {\bf unified translator's solution}. Currently,
  406. since different tools have been internationalized using the
  407. framework-appropriate method, different tools require translators to localize
  408. them via different interfaces. Inasmuch as possible, we should make
  409. translators only need to use a single tool to translate the whole Tor suite.
  410. \section{Support}
  411. \tmp{would be nice to set up some actual user support infrastructure, especially
  412. focusing on server operators and on coordinating volunteers.}
  413. \section{Documentation}
  414. \subsection{Unified documentation scheme}
  415. We need to {\bf inventory our documentation.} Our documentation so far has
  416. been mostly produced on an {\it ad hoc} basis, in response to particular
  417. needs and requests. We should figure out what documentation we have, which of
  418. it (if any) should get priority, and whether we can't put it all into a
  419. single format.
  420. We could {\bf unify the docs} into a single book-like thing. This will also
  421. help us identify what sections of the ``book'' are missing.
  422. \subsection{Missing technical documentation}
  423. We should {\bf revise our design paper} to reflect the new decisions and
  424. research we've made since it was published in 2004. This will help other
  425. researchers evaluate and suggest improvements to Tor's current design.
  426. Other projects sometimes implement the client side of our prototocol. We
  427. encourage this, but we should write {\bf a document about how to avoid
  428. excessive resource use}, so we don't need to worry that they will do so
  429. without regard to the effect of their choices on server resources.
  430. \subsection{Missing user documentation}
  431. \tmp{Discoursive and comprehensive docs}
  432. \bibliographystyle{plain} \bibliography{tor-design}
  433. \end{document}