roadmap-future.tex 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. \documentclass{article}
  2. \usepackage{url}
  3. \newenvironment{tightlist}{\begin{list}{$\bullet$}{
  4. \setlength{\itemsep}{0mm}
  5. \setlength{\parsep}{0mm}
  6. % \setlength{\labelsep}{0mm}
  7. % \setlength{\labelwidth}{0mm}
  8. % \setlength{\topsep}{0mm}
  9. }}{\end{list}}
  10. \newcommand{\tmp}[1]{{\bf #1} [......] \\}
  11. \newcommand{\plan}[1]{ {\bf (#1)}}
  12. \begin{document}
  13. \title{Tor Development Roadmap: Wishlist for 2008 and beyond}
  14. \author{Roger Dingledine \and Nick Mathewson}
  15. \maketitle
  16. \pagestyle{plain}
  17. \section{Introduction}
  18. Tor (the software) and Tor (the overall software/network/support/document
  19. suite) are now experiencing all the crises of success. Over the next
  20. years, we're probably going to grow even more in terms of users, developers,
  21. and funding than before. This document attempts to lay out all the
  22. well-understood next steps that Tor needs to take. We should periodically
  23. reorganize it to reflect current and intended priorities.
  24. \section{Everybody can be a relay}
  25. \subsection{UPNP}
  26. \subsection{"ORPort auto" to look for a reachable port}
  27. \subsection{Incentives design}
  28. \subsection{Windows libevent}
  29. \subsection{Network scaling}
  30. - Practical side: how to handle a huge directory?
  31. - Anonymity side: impacts from partitioning?
  32. \subsection{Using fewer sockets}
  33. - Restricted-route topology
  34. - UDP design
  35. \subsection{Better algorithms for giving priority to local traffic}
  36. \subsection{Auto bandwidth detection and rate limiting, especially for
  37. asymmetric connections.}
  38. \subsection{Tolerate absurdly wrong clocks, even for servers}
  39. \subsection{Metrics for deciding when you're fast enough and stable enough
  40. to opt to switch from being a bridge relay to a public relay.}
  41. \section{Tor on low resources / slow links}
  42. \subsection{Reducing directory fetches further}
  43. \subsection{AvoidDiskWrites}
  44. \subsection{Using less ram}
  45. \subsection{Better DoS resistance for tor servers / authorities}
  46. \section{Blocking resistance}
  47. \subsection{Better bridge-address-distribution strategies}
  48. \subsection{Get more volunteers running bridges}
  49. \subsection{Handle multiple bridge authorities}
  50. \subsection{Anonymity for bridge users: second layer of entry guards, etc?}
  51. \subsection{More TLS normalization}
  52. \subsection{Harder to block Tor software distribution}
  53. \subsection{Integration with Psiphon}
  54. \section{Packaging}
  55. \subsection{Switch Privoxy out for Polipo}
  56. - Make Vidalia able to launch more programs itself
  57. \subsection{Continue Torbutton improvements}
  58. especially better docs
  59. \subsection{Vidalia and stability (especially wrt ongoing Windows problems)}
  60. \subsection{Polipo support on Windows}
  61. \subsection{Auto update for Tor, Vidalia, others}
  62. \subsection{Tor browser bundle for USB and standalone use}
  63. \subsection{LiveCD solution}
  64. \subsection{VM-based solution}
  65. \subsection{Tor-on-enclave-firewall configuration}
  66. \subsection{General tutorials on what common applications are Tor-friendly}
  67. \subsection{Controller libraries (torctl) plus documentation}
  68. \subsection{Localization and translation (Vidalia, Torbutton, web pages)}
  69. \section{Interacting better with Internet sites}
  70. \subsection{Make tordnsel (tor exitlist) better and more well-known}
  71. \subsection{Nymble}
  72. \subsection{Work with Wikipedia, Slashdot, Google(, IRC networks)}
  73. \subsection{IPv6 support for exit destinations}
  74. \section{Network health}
  75. \subsection{torflow / soat to detect bad relays}
  76. \subsection{make authorities more automated}
  77. \subsection{torstatus pages and better trend tracking}
  78. \subsection{better metrics for assessing network health / growth}
  79. - geoip usage-by-country reporting and aggregation
  80. (Once that's working, switch to Directory guards)
  81. \subsection{Performance research}
  82. - Load balance better
  83. - Improve our congestion control algorithms
  84. \section{Outreach and user education}
  85. \subsection{"Who uses Tor" use cases}
  86. \subsection{Law enforcement contacts}
  87. - "Was this IP address a Tor relay recently?" database
  88. \subsection{Commercial/enterprise outreach. Help them use Tor well and
  89. not fear it.}
  90. \subsection{NGO outreach and training.}
  91. - "How to be a safe blogger"
  92. \subsection{More activist coordinators, more people to answer user questions}
  93. \subsection{More people to hold hands of server operators}
  94. \subsection{The-dangers-of-plaintext awareness}
  95. \subsection{check.torproject.org and other "privacy checkers"}
  96. \subsection{Stronger legal FAQ for US}
  97. \subsection{Legal FAQs for other countries}
  98. \section{Anonymity research}
  99. \subsection{estimate relay bandwidth more securely}
  100. \subsection{website fingerprinting attacks}
  101. \subsection{safer e2e defenses}
  102. \subsection{Using Tor when you really need anonymity. Can you compose it
  103. with other steps, like more trusted guards or separate proxies?}
  104. \subsection{Topology-aware routing; routing-zones, steven's pet2007 paper.}
  105. \section{Organizational growth and stability}
  106. \subsection{A contingency plan if Roger gets hit by a bus}
  107. - Get a new executive director
  108. \subsection{More diversity of funding}
  109. - Don't rely on any one funder as much
  110. - Don't rely on any sector or funder category as much
  111. \subsection{More Tor-funded people who are skilled at peripheral apps like
  112. Vidalia, Torbutton, Polipo, etc}
  113. \subsection{Clearer and more predictable trademark behavior}
  114. \subsection{More outside funding for internships, etc e.g. GSoC.}
  115. \section{Hidden services}
  116. \subsection{Scaling: how to handle many hidden services}
  117. \subsection{Performance: how to rendezvous with them quickly}
  118. \subsection{Authentication/authorization: how to tolerate DoS / load}
  119. \section{Tor as a general overlay network}
  120. \subsection{Choose paths / exit by country}
  121. \subsection{Easier to run your own private servers and have Tor use them
  122. anywhere in the path}
  123. \subsection{Easier to run an independent Tor network}
  124. \section{Code security/correctness}
  125. \subsection{veracode}
  126. \subsection{code audit}
  127. \subsection{more fuzzing tools}
  128. \subsection{build farm, better testing harness}
  129. \subsection{Long-overdue code refactoring and cleanup}
  130. \section{Protocol security}
  131. \subsection{safer circuit handshake}
  132. \subsection{protocol versioning for future compatibility}
  133. \subsection{cell sizes}
  134. \subsection{adapt to new key sizes, etc}
  135. \section{Code and design infrastructure}
  136. \subsection{Protocol revision}
  137. To maintain backward compatibility, we've postponed major protocol
  138. changes and redesigns for a long time. Because of this, there are a number
  139. of sensible revisions we've been putting off until we could deploy several of
  140. them at once. To do each of these, we first need to discuss design
  141. alternatives with other cryptographers and outside collaborators to
  142. make sure that our choices are secure.
  143. First of all, our protocol needs better {\bf versioning support} so that we
  144. can make backward-incompatible changes to our core protocol. There are
  145. difficult anonymity issues here, since many naive designs would make it easy
  146. to tell clients apart (and then track them) based on their supported versions.
  147. With protocol versioning support would come the ability to {\bf future-proof
  148. our ciphersuites}. For example, not only our OR protocol, but also our
  149. directory protocol, is pretty firmly tied to the SHA-1 hash function, which
  150. though not yet known to be insecure for our purposes, has begun to show
  151. its age. We should
  152. remove assumptions throughout our design based on the assumption that public
  153. keys, secret keys, or digests will remain any particular size indefinitely.
  154. Our OR {\bf authentication protocol}, though provably
  155. secure\cite{tap:pet2006}, relies more on particular aspects of RSA and our
  156. implementation thereof than we had initially believed. To future-proof
  157. against changes, we should replace it with a less delicate approach.
  158. \plan{For all the above: 2 person-months to specify, spread over several
  159. months with time for interaction with external participants. One
  160. person-month to implement. Start specifying in early 2007.}
  161. We might design a {\bf stream migration} feature so that streams tunneled
  162. over Tor could be more resilient to dropped connections and changed IPs.
  163. \plan{Not in 2007.}
  164. A new protocol could support {\bf multiple cell sizes}. Right now, all data
  165. passes through the Tor network divided into 512-byte cells. This is
  166. efficient for high-bandwidth protocols, but inefficient for protocols
  167. like SSH or AIM that send information in small chunks. Of course, we need to
  168. investigate the extent to which multiple sizes could make it easier for an
  169. adversary to fingerprint a traffic pattern. \plan{Not in 2007.}
  170. As a part of our design, we should investigate possible {\bf cipher modes}
  171. other than counter mode. For example, a mode with built-in integrity
  172. checking, error propagation, and random access could simplify our protocol
  173. significantly. Sadly, many of these are patented and unavailable for us.
  174. \plan{Not in 2007.}
  175. \subsection{Scalability}
  176. \subsubsection{Improved directory efficiency}
  177. We should {\bf have routers upload their descriptors even less often}, so
  178. that clients do not need to download replacements every 18 hours whether any
  179. information has changed or not. (As of Tor 0.1.2.3-alpha, clients tolerate
  180. routers that don't upload often, but routers still upload at least every 18
  181. hours to support older clients.) \plan{Must do, but not until 0.1.1.x is
  182. deprecated in mid 2007. 1 week.}
  183. \subsubsection{Non-clique topology}
  184. Our current network design achieves a certain amount of its anonymity by
  185. making clients act like each other through the simple expedient of making
  186. sure that all clients know all servers, and that any server can talk to any
  187. other server. But as the number of servers increases to serve an
  188. ever-greater number of clients, these assumptions become impractical.
  189. At worst, if these scalability issues become troubling before a solution is
  190. found, we can design and build a solution to {\bf split the network into
  191. multiple slices} until a better solution comes along. This is not ideal,
  192. since rather than looking like all other users from a point of view of path
  193. selection, users would ``only'' look like 200,000--300,000 other
  194. users.\plan{Not unless needed.}
  195. We are in the process of designing {\bf improved schemes for network
  196. scalability}. Some approaches focus on limiting what an adversary can know
  197. about what a user knows; others focus on reducing the extent to which an
  198. adversary can exploit this knowledge. These are currently in their infancy,
  199. and will probably not be needed in 2007, but they must be designed in 2007 if
  200. they are to be deployed in 2008.\plan{Design in 2007; unknown difficulty.
  201. Write a paper.}
  202. \subsubsection{Relay incentives}
  203. To support more users on the network, we need to get more servers. So far,
  204. we've relied on volunteerism to attract server operators, and so far it's
  205. served us well. But in the long run, we need to {\bf design incentives for
  206. users to run servers} and relay traffic for others. Most obviously, we
  207. could try to build the network so that servers offered improved service for
  208. other servers, but we would need to do so without weakening anonymity and
  209. making it obvious which connections originate from users running servers. We
  210. have some preliminary designs~\cite{incentives-txt,tor-challenges},
  211. but need to perform
  212. some more research to make sure they would be safe and effective.\plan{Write
  213. a draft paper; 2 person-months.}
  214. (XXX we did that)
  215. \subsection{Portability}
  216. Our {\bf Windows implementation}, though much improved, continues to lag
  217. behind Unix and Mac OS X, especially when running as a server. We hope to
  218. merge promising patches from Christian King to address this point, and bring
  219. Windows performance on par with other platforms.\plan{Do in 2007; 1.5 months
  220. to integrate not counting Mike's work.}
  221. We should have {\bf better support for portable devices}, including modes of
  222. operation that require less RAM, and that write to disk less frequently (to
  223. avoid wearing out flash RAM).\plan{Optional; 2 weeks.}
  224. \subsection{Performance: resource usage}
  225. We've been working on {\bf using less RAM}, especially on servers. This has
  226. paid off a lot for directory caches in the 0.1.2, which in some cases are
  227. using 90\% less memory than they used to require. But we can do better,
  228. especially in the area around our buffer management algorithms, by using an
  229. approach more like the BSD and Linux kernels use instead of our current ring
  230. buffer approach. (For OR connections, we can just use queues of cell-sized
  231. chunks produced with a specialized allocator.) This could potentially save
  232. around 25 to 50\% of the memory currently allocated for network buffers, and
  233. make Tor a more attractive proposition for restricted-memory environments
  234. like old computers, mobile devices, and the like.\plan{Do in 2007; 2-3 weeks
  235. plus one week measurement.} (XXX We did this, but we need to do something
  236. more/else.)
  237. \subsection{Performance: network usage}
  238. We know too little about how well our current path
  239. selection algorithms actually spread traffic around the network in practice.
  240. We should {\bf research the efficacy of our traffic allocation} and either
  241. assure ourselves that it is close enough to optimal as to need no improvement
  242. (unlikely) or {\bf identify ways to improve network usage}, and get more
  243. users' traffic delivered faster. Performing this research will require
  244. careful thought about anonymity implications.
  245. We should also {\bf examine the efficacy of our congestion control
  246. algorithm}, and see whether we can improve client performance in the
  247. presence of a congested network through dynamic `sendme' window sizes or
  248. other means. This will have anonymity implications too if we aren't careful.
  249. \plan{For both of the above: research, design and write
  250. a measurement tool in 2007: 1 month. See if we can interest a graduate
  251. student.}
  252. We should work on making Tor's cell-based protocol perform better on
  253. networks with low bandwidth
  254. and high packet loss.\plan{Do in 2007 if we're funded to do it; 4-6 weeks.}
  255. \subsection{Performance scenario: one Tor client, many users}
  256. We should {\bf improve Tor's performance when a single Tor handles many
  257. clients}. Many organizations want to manage a single Tor client on their
  258. firewall for many users, rather than having each user install a separate
  259. Tor client. We haven't optimized for this scenario, and it is likely that
  260. there are some code paths in the current implementation that become
  261. inefficient when a single Tor is servicing hundreds or thousands of client
  262. connections. (Additionally, it is likely that such clients have interesting
  263. anonymity requirements the we should investigate.) We should profile Tor
  264. under appropriate loads, identify bottlenecks, and fix them.\plan{Do in 2007
  265. if we're funded to do it; 4-8 weeks.}
  266. \subsection{Tor servers on asymmetric bandwidth}
  267. Tor should work better on servers that have asymmetric connections like cable
  268. or DSL. Because Tor has separate TCP connections between each
  269. hop, if the incoming bytes are arriving just fine and the outgoing bytes are
  270. all getting dropped on the floor, the TCP push-back mechanisms don't really
  271. transmit this information back to the incoming streams.\plan{Do in 2007 since
  272. related to bandwidth limiting. 3-4 weeks.}
  273. \subsection{Running Tor as both client and server}
  274. Many performance tradeoffs and balances that might need more attention.
  275. We first need to track and fix whatever bottlenecks emerge; but we also
  276. need to invent good algorithms for prioritizing the client's traffic
  277. without starving the server's traffic too much.\plan{No idea; try
  278. profiling and improving things in 2007.}
  279. \subsection{Protocol redesign for UDP}
  280. Tor has relayed only TCP traffic since its first versions, and has used
  281. TLS-over-TCP to do so. This approach has proved reliable and flexible, but
  282. in the long term we will need to allow UDP traffic on the network, and switch
  283. some or all of the network to using a UDP transport. {\bf Supporting UDP
  284. traffic} will make Tor more suitable for protocols that require UDP, such
  285. as many VOIP protocols. {\bf Using a UDP transport} could greatly reduce
  286. resource limitations on servers, and make the network far less interruptible
  287. by lossy connections. Either of these protocol changes would require a great
  288. deal of design work, however. We hope to be able to enlist the aid of a few
  289. talented graduate students to assist with the initial design and
  290. specification, but the actual implementation will require significant testing
  291. of different reliable transport approaches.\plan{Maybe do a design in 2007 if
  292. we find an interested academic. Ian or Ben L might be good partners here.}
  293. \section{Blocking resistance}
  294. \subsection{Design for blocking resistance}
  295. We have written a design document explaining our general approach to blocking
  296. resistance. We should workshop it with other experts in the field to get
  297. their ideas about how we can improve Tor's efficacy as an anti-censorship
  298. tool.
  299. \subsection{Implementation: client-side and bridges-side}
  300. Bridges will want to be able to {\bf listen on multiple addresses and ports}
  301. if they can, to give the adversary more ports to block.
  302. \subsection{Research: anonymity implications from becoming a bridge}
  303. see arma's bridge proposal; e.g. should bridge users use a second layer of
  304. entry guards?
  305. \subsection{Implementation: bridge authority}
  306. we run some
  307. directory authorities with a slightly modified protocol that doesn't leak
  308. the entire list of bridges. Thus users can learn up-to-date information
  309. for bridges they already know about, but they can't learn about arbitrary
  310. new bridges.
  311. we need a design for distributing the bridge authority over more than one
  312. server
  313. \subsection{Normalizing the Tor protocol on the wire}
  314. Additionally, we should {\bf resist content-based filters}. Though an
  315. adversary can't see what users are saying, some aspects of our protocol are
  316. easy to fingerprint {\em as} Tor. We should correct this where possible.
  317. Look like Firefox; or look like nothing?
  318. Future research: investigate timing similarities with other protocols.
  319. \subsection{Research: scanning-resistance}
  320. \subsection{Research/Design/Impl: how users discover bridges}
  321. Our design anticipates an arms race between discovery methods and censors.
  322. We need to begin the infrastructure on our side quickly, preferably in a
  323. flexible language like Python, so we can adapt quickly to censorship.
  324. phase one: personal bridges
  325. phase two: families of personal bridges
  326. phase three: more structured social network
  327. phase four: bag of tricks
  328. Research: phase five...
  329. Integration with Psiphon, etc?
  330. \subsection{Document best practices for users}
  331. Document best practices for various activities common among
  332. blocked users (e.g. WordPress use).
  333. \subsection{Research: how to know if a bridge has been blocked?}
  334. \subsection{GeoIP maintenance, and "private" user statistics}
  335. How to know if the whole idea is working?
  336. \subsection{Research: hiding whether the user is reading or publishing?}
  337. \subsection{Research: how many bridges do you need to know to maintain
  338. reachability?}
  339. \subsection{Resisting censorship of the Tor website, docs, and mirrors}
  340. We should take some effort to consider {\bf initial distribution of Tor and
  341. related information} in countries where the Tor website and mirrors are
  342. censored. (Right now, most countries that block access to Tor block only the
  343. main website and leave mirrors and the network itself untouched.) Falling
  344. back on word-of-mouth is always a good last resort, but we should also take
  345. steps to make sure it's relatively easy for users to get ahold of a copy.
  346. \section{Security}
  347. \subsection{Security research projects}
  348. We should investigate approaches with some promise to help Tor resist
  349. end-to-end traffic correlation attacks. It's an open research question
  350. whether (and to what extent) {\bf mixed-latency} networks, {\bf low-volume
  351. long-distance padding}, or other approaches can resist these attacks, which
  352. are currently some of the most effective against careful Tor users. We
  353. should research these questions and perform simulations to identify
  354. opportunities for strengthening our design without dropping performance to
  355. unacceptable levels. %Cite something
  356. \plan{Start doing this in 2007; write a paper. 8-16 weeks.}
  357. We've got some preliminary results suggesting that {\bf a topology-aware
  358. routing algorithm}~\cite{feamster:wpes2004} could reduce Tor users'
  359. vulnerability against local or ISP-level adversaries, by ensuring that they
  360. are never in a position to watch both ends of a connection. We need to
  361. examine the effects of this approach in more detail and consider side-effects
  362. on anonymity against other kinds of adversaries. If the approach still looks
  363. promising, we should investigate ways for clients to implement it (or an
  364. approximation of it) without having to download routing tables for the whole
  365. Internet. \plan{Not in 2007 unless a graduate student wants to do it.}
  366. %\tmp{defenses against end-to-end correlation} We don't expect any to work
  367. %right now, but it would be useful to learn that one did. Alternatively,
  368. %proving that one didn't would free up researchers in the field to go work on
  369. %other things.
  370. %
  371. % See above; I think I got this.
  372. We should research the efficacy of {\bf website fingerprinting} attacks,
  373. wherein an adversary tries to match the distinctive traffic and timing
  374. pattern of the resources constituting a given website to the traffic pattern
  375. of a user's client. These attacks work great in simulations, but in
  376. practice we hear they don't work nearly as well. We should get some actual
  377. numbers to investigate the issue, and figure out what's going on. If we
  378. resist these attacks, or can improve our design to resist them, we should.
  379. % add cites
  380. \plan{Possibly part of end-to-end correlation paper. Otherwise, not in 2007
  381. unless a graduate student is interested.}
  382. \subsection{Implementation security}
  383. We should also {\bf mark RAM that holds key material as non-swappable} so
  384. that there is no risk of recovering key material from a hard disk
  385. compromise. This would require submitting patches upstream to OpenSSL, where
  386. support for marking memory as sensitive is currently in a very preliminary
  387. state.\plan{Nice to do, but not in immediate Tor scope.}
  388. There are numerous tools for identifying trouble spots in code (such as
  389. Coverity or even VS2005's code analysis tool) and we should convince somebody
  390. to run some of them against the Tor codebase. Ideally, we could figure out a
  391. way to get our code checked periodically rather than just once.\plan{Almost
  392. no time once we talk somebody into it.}
  393. We should try {\bf protocol fuzzing} to identify errors in our
  394. implementation.\plan{Not in 2007 unless we find a grad student or
  395. undergraduate who wants to try.}
  396. Our guard nodes help prevent an attacker from being able to become a chosen
  397. client's entry point by having each client choose a few favorite entry points
  398. as ``guards'' and stick to them. We should implement a {\bf directory
  399. guards} feature to keep adversaries from enumerating Tor users by acting as
  400. a directory cache.\plan{Do in 2007; 2 weeks.}
  401. \subsection{Detect corrupt exits and other servers}
  402. With the success of our network, we've attracted servers in many locations,
  403. operated by many kinds of people. Unfortunately, some of these locations
  404. have compromised or defective networks, and some of these people are
  405. untrustworthy or incompetent. Our current design relies on authority
  406. administrators to identify bad nodes and mark them as nonfunctioning. We
  407. should {\bf automate the process of identifying malfunctioning nodes} as
  408. follows:
  409. We should create a generic {\bf feedback mechanism for add-on tools} like
  410. Mike Perry's ``Snakes on a Tor'' to report failing nodes to authorities.
  411. \plan{Do in 2006; 1-2 weeks.}
  412. We should write tools to {\bf detect more kinds of innocent node failure},
  413. such as nodes whose network providers intercept SSL, nodes whose network
  414. providers censor popular websites, and so on. We should also try to detect
  415. {\bf routers that snoop traffic}; we could do this by launching connections
  416. to throwaway accounts, and seeing which accounts get used.\plan{Do in 2007;
  417. ask Mike Perry if he's interested. 4-6 weeks.}
  418. We should add {\bf an efficient way for authorities to mark a set of servers
  419. as probably collaborating} though not necessarily otherwise dishonest.
  420. This happens when an administrator starts multiple routers, but doesn't mark
  421. them as belonging to the same family.\plan{Do during v2.1 directory protocol
  422. redesign; 1-2 weeks to implement.}
  423. To avoid attacks where an adversary claims good performance in order to
  424. attract traffic, we should {\bf have authorities measure node performance}
  425. (including stability and bandwidth) themselves, and not simply believe what
  426. they're told. We also measure stability by tracking MTBF. Measuring
  427. bandwidth will be tricky, since it's hard to distinguish between a server with
  428. low capacity, and a high-capacity server with most of its capacity in
  429. use. See also Nikita's NDSS 2008 paper.\plan{Do it if we can interest
  430. a grad student.}
  431. {\bf Operating a directory authority should be easier.} We rely on authority
  432. operators to keep the network running well, but right now their job involves
  433. too much busywork and administrative overhead. A better interface for them
  434. to use could free their time to work on exception cases rather than on
  435. adding named nodes to the network.\plan{Do in 2007; 4-5 weeks.}
  436. \subsection{Protocol security}
  437. In addition to other protocol changes discussed above,
  438. % And should we move some of them down here? -NM
  439. we should add {\bf hooks for denial-of-service resistance}; we have some
  440. preliminary designs, but we shouldn't postpone them until we really need them.
  441. If somebody tries a DDoS attack against the Tor network, we won't want to
  442. wait for all the servers and clients to upgrade to a new
  443. version.\plan{Research project; do this in 2007 if funded.}
  444. \section{Development infrastructure}
  445. \subsection{Build farm}
  446. We've begun to deploy a cross-platform distributed build farm of hosts
  447. that build and test the Tor source every time it changes in our development
  448. repository.
  449. We need to {\bf get more participants}, so that we can test a larger variety
  450. of platforms. (Previously, we've only found out when our code had broken on
  451. obscure platforms when somebody got around to building it.)
  452. We need also to {\bf add our dependencies} to the build farm, so that we can
  453. ensure that libraries we need (especially libevent) do not stop working on
  454. any important platform between one release and the next.
  455. \plan{This is ongoing as more buildbots arrive.}
  456. \subsection{Improved testing harness}
  457. Currently, our {\bf unit tests} cover only about 20\% of the code base. This
  458. is uncomfortably low; we should write more and switch to a more flexible
  459. testing framework.\plan{Ongoing basis, time permitting.}
  460. We should also write flexible {\bf automated single-host deployment tests} so
  461. we can more easily verify that the current codebase works with the
  462. network.\plan{Worthwhile in 2007; would save lots of time. 2-4 weeks.}
  463. We should build automated {\bf stress testing} frameworks so we can see which
  464. realistic loads cause Tor to perform badly, and regularly profile Tor against
  465. these loads. This would give us {\it in vitro} performance values to
  466. supplement our deployment experience.\plan{Worthwhile in 2007; 2-6 weeks.}
  467. We should improve our memory profiling code.\plan{...}
  468. \subsection{Centralized build system}
  469. We currently rely on a separate packager to maintain the packaging system and
  470. to build Tor on each platform for which we distribute binaries. Separate
  471. package maintainers is sensible, but separate package builders has meant
  472. long turnaround times between source releases and package releases. We
  473. should create the necessary infrastructure for us to produce binaries for all
  474. major packages within an hour or so of source release.\plan{We should
  475. brainstorm this at least in 2007.}
  476. \subsection{Improved metrics}
  477. We need a way to {\bf measure the network's health, capacity, and degree of
  478. utilization}. Our current means for doing this are ad hoc and not
  479. completely accurate
  480. We need better ways to {\bf tell which countries are users are coming from,
  481. and how many there are}. A good perspective of the network helps us
  482. allocate resources and identify trouble spots, but our current approaches
  483. will work less and less well as we make it harder for adversaries to
  484. enumerate users. We'll probably want to shift to a smarter, statistical
  485. approach rather than our current ``count and extrapolate'' method.
  486. \plan{All of this in 2007 if funded; 4-8 weeks}
  487. % \tmp{We'd like to know how much of the network is getting used.}
  488. % I think this is covered above -NM
  489. \subsection{Controller library}
  490. We've done lots of design and development on our controller interface, which
  491. allows UI applications and other tools to interact with Tor. We could
  492. encourage the development of more such tools by releasing a {\bf
  493. general-purpose controller library}, ideally with API support for several
  494. popular programming languages.\plan{2006 or 2007; 1-2 weeks.}
  495. \section{User experience}
  496. \subsection{Get blocked less, get blocked less broadly}
  497. Right now, some services block connections from the Tor network because
  498. they don't have a better
  499. way to keep vandals from abusing them than blocking IP addresses associated
  500. with vandalism. Our approach so far has been to educate them about better
  501. solutions that currently exist, but we should also {\bf create better
  502. solutions for limiting vandalism by anonymous users} like credential and
  503. blind-signature based implementations, and encourage their use. Other
  504. promising starting points including writing a patch and explanation for
  505. Wikipedia, and helping Freenode to document, maintain, and expand its
  506. current Tor-friendly position.\plan{Do a writeup here in 2007; 1-2 weeks.}
  507. Those who do block Tor users also block overbroadly, sometimes blacklisting
  508. operators of Tor servers that do not permit exit to their services. We could
  509. obviate innocent reasons for doing so by designing a {\bf narrowly-targeted Tor
  510. RBL service} so that those who wanted to overblock Tor could no longer
  511. plead incompetence.\plan{Possibly in 2007 if we decide it's a good idea; 3
  512. weeks.}
  513. \subsection{All-in-one bundle}
  514. We need a well-tested, well-documented bundle of Tor and supporting
  515. applications configured to use it correctly. We have an initial
  516. implementation well under way, but it will need additional work in
  517. identifying requisite Firefox extensions, identifying security threats,
  518. improving user experience, and so on. This will need significantly more work
  519. before it's ready for a general public release.
  520. \subsection{LiveCD Tor}
  521. We need a nice bootable livecd containing a minimal OS and a few applications
  522. configured to use it correctly. The Anonym.OS project demonstrated that this
  523. is quite feasible, but their project is not currently maintained.
  524. \subsection{A Tor client in a VM}
  525. \tmp{a.k.a JanusVM} which is quite related to the firewall-level deployment
  526. section below. JanusVM is a Linux kernel running in VMWare. It gets an IP
  527. address from the network, and serves as a DHCP server for its host Windows
  528. machine. It intercepts all outgoing traffic and redirects it into Privoxy,
  529. Tor, etc. This Linux-in-Windows approach may help us with scalability in
  530. the short term, and it may also be a good long-term solution rather than
  531. accepting all security risks in Windows.
  532. %\subsection{Interface improvements}
  533. %\tmp{Allow controllers to manipulate server status.}
  534. % (Why is this in the User Experience section?) -RD
  535. % I think it's better left to a generic ``make controller iface better'' item.
  536. \subsection{Firewall-level deployment}
  537. Another useful deployment mode for some users is using {\bf Tor in a firewall
  538. configuration}, and directing all their traffic through Tor. This can be a
  539. little tricky to set up currently, but it's an effective way to make sure no
  540. traffic leaves the host un-anonymized. To achieve this, we need to {\bf
  541. improve and port our new TransPort} feature which allows Tor to be used
  542. without SOCKS support; to {\bf add an anonymizing DNS proxy} feature to Tor;
  543. and to {\bf construct a recommended set of firewall configurations} to redirect
  544. traffic to Tor.
  545. This is an area where {\bf deployment via a livecd}, or an installation
  546. targeted at specialized home routing hardware, could be useful.
  547. \subsection{Assess software and configurations for anonymity risks}
  548. Right now, users and packagers are more or less on their own when selecting
  549. Firefox extensions. We should {\bf assemble a recommended list of browser
  550. extensions} through experiment, and include this in the application bundles
  551. we distribute.
  552. We should also describe {\bf best practices for using Tor with each class of
  553. application}. For example, Ethan Zuckerman has written a detailed
  554. tutorial on how to use Tor, Firefox, GMail, and Wordpress to blog with
  555. improved safety. There are many other cases on the Internet where anonymity
  556. would be helpful, and there are a lot of ways to screw up using Tor.
  557. The Foxtor and Torbutton extensions serve similar purposes; we should pick a
  558. favorite, and merge in the useful features of the other.
  559. %\tmp{clean up our own bundled software:
  560. %E.g. Merge the good features of Foxtor into Torbutton}
  561. %
  562. % What else did you have in mind? -NM
  563. \subsection{Localization}
  564. Right now, most of our user-facing code is internationalized. We need to
  565. internationalize the last few hold-outs (like the Tor expert installer), and get
  566. more translations for the parts that are already internationalized.
  567. Also, we should look into a {\bf unified translator's solution}. Currently,
  568. since different tools have been internationalized using the
  569. framework-appropriate method, different tools require translators to localize
  570. them via different interfaces. Inasmuch as possible, we should make
  571. translators only need to use a single tool to translate the whole Tor suite.
  572. \section{Support}
  573. It would be nice to set up some {\bf user support infrastructure} and
  574. {\bf contributor support infrastructure}, especially focusing on server
  575. operators and on coordinating volunteers.
  576. This includes intuitive and easy ticket systems for bug reports and
  577. feature suggestions (not just mailing lists with a half dozen people
  578. and no clear roles for who answers what), but it also includes a more
  579. personalized and efficient framework for interaction so we keep the
  580. attention and interest of the contributors, and so we make them feel
  581. helpful and wanted.
  582. \section{Documentation}
  583. \subsection{Unified documentation scheme}
  584. We need to {\bf inventory our documentation.} Our documentation so far has
  585. been mostly produced on an {\it ad hoc} basis, in response to particular
  586. needs and requests. We should figure out what documentation we have, which of
  587. it (if any) should get priority, and whether we can't put it all into a
  588. single format.
  589. We could {\bf unify the docs} into a single book-like thing. This will also
  590. help us identify what sections of the ``book'' are missing.
  591. \subsection{Missing technical documentation}
  592. We should {\bf revise our design paper} to reflect the new decisions and
  593. research we've made since it was published in 2004. This will help other
  594. researchers evaluate and suggest improvements to Tor's current design.
  595. Other projects sometimes implement the client side of our protocol. We
  596. encourage this, but we should write {\bf a document about how to avoid
  597. excessive resource use}, so we don't need to worry that they will do so
  598. without regard to the effect of their choices on server resources.
  599. \subsection{Missing user documentation}
  600. Our documentation falls into two broad categories: some is `discoursive' and
  601. explains in detail why users should take certain actions, and other
  602. documentation is `comprehensive' and describes all of Tor's features. Right
  603. now, we have no document that is both deep, readable, and thorough. We
  604. should correct this by identifying missing spots in our design.
  605. \bibliographystyle{plain} \bibliography{tor-design}
  606. \end{document}