Correctly detect and exclude addresses outside of our virtual address range
[tor/rransom.git] / doc / roadmaps / roadmap-future.tex
blob4ab240f977761c4077dca7189ccaa925c6bfbe8b
1 \documentclass{article}
3 \usepackage{url}
4 \usepackage{fullpage}
6 \newenvironment{tightlist}{\begin{list}{$\bullet$}{
7 \setlength{\itemsep}{0mm}
8 \setlength{\parsep}{0mm}
9 % \setlength{\labelsep}{0mm}
10 % \setlength{\labelwidth}{0mm}
11 % \setlength{\topsep}{0mm}
12 }}{\end{list}}
13 \newcommand{\tmp}[1]{{\bf #1} [......] \\}
14 \newcommand{\plan}[1]{ {\bf (#1)}}
16 \begin{document}
18 \title{Tor Development Roadmap: Wishlist for 2008 and beyond}
19 \author{Roger Dingledine \and Nick Mathewson}
20 \date{}
22 \maketitle
23 \pagestyle{plain}
25 \section{Introduction}
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
29 years, we're probably going to grow even more in terms of users, developers,
30 and funding than before. This document attempts to lay out all the
31 well-understood next steps that Tor needs to take. We should periodically
32 reorganize it to reflect current and intended priorities.
34 \section{Everybody can be a relay}
36 We've made a lot of progress towards letting an ordinary Tor client also
37 serve as a Tor relay. But these issues remain.
39 \subsection{UPNP}
41 We should teach Vidalia how to speak UPNP to automatically open and
42 forward ports on common (e.g. Linksys) routers. There are some promising
43 Qt-based UPNP libs out there, and in any case there are others (e.g. in
44 Perl) that we can base it on.
46 \subsection{``ORPort auto'' to look for a reachable port}
48 Vidalia defaults to port 443 on Windows and port 8080 elsewhere. But if
49 that port is already in use, or the ISP filters incoming connections
50 on that port (some cablemodem providers filter 443 inbound), the user
51 needs to learn how to notice this, and then pick a new one and type it
52 into Vidalia.
54 We should add a new option ``auto'' that cycles through a set of preferred
55 ports, testing bindability and reachability for each of them, and only
56 complains to the user once it's given up on the common choices.
58 \subsection{Incentives design}
60 Roger has been working with researchers at Rice University to simulate
61 and analyze a new design where the directory authorities assign gold
62 stars to well-behaving relays, and then all the relays give priority
63 to traffic from gold-starred relays. The great feature of the design is
64 that not only does it provide the (explicit) incentive to run a relay,
65 but it also aims to grow the overall capacity of the network, so even
66 non-relays will benefit.
68 It needs more analysis, and perhaps more design work, before we try
69 deploying it.
71 \subsection{Windows libevent}
73 Tor relays still don't work well or reliably on Windows XP or Windows
74 Vista, because we don't use the Windows-native ``overlapped IO''
75 approach. Christian King made a good start at teaching libevent about
76 overlapped IO during Google Summer of Code 2007, and next steps are
77 to a) finish that, b) teach Tor to do openssl calls on buffers rather
78 than directly to the network, and c) teach Tor to use the new libevent
79 buffers approach.
81 \subsection{Network scaling}
83 If we attract many more relays, we will need to handle the growing pains
84 in terms of getting all the directory information to all the users.
86 The first piece of this issue is a practical question: since the
87 directory size scales linearly with more relays, at some point it
88 will no longer be practical for every client to learn about every
89 relay. We can try to reduce the amount of information each client needs
90 to fetch (e.g. based on fetching less information preemptively as in
91 Section~\ref{subsec:fewer-descriptor-fetches} below), but eventually
92 clients will need to learn about only a subset of the network, and we
93 will need to design good ways to divide up the network information.
95 The second piece is an anonymity question that arises from this
96 partitioning: if Tor's security comes from having all the clients
97 behaving in similar ways, yet we are now giving different clients
98 different directory information, how can we minimize the new anonymity
99 attacks we introduce?
101 \subsection{Using fewer sockets}
103 Since in the current network every Tor relay can reach every other Tor
104 relay, and we have many times more users than relays, pretty much every
105 possible link in the network is in use. That is, the current network
106 is a clique in practice.
108 And since each of these connections requires a TCP socket, it's going
109 to be hard for the network to grow much larger: many systems come with
110 a default of 1024 file descriptors allowed per process, and raising
111 that ulimit is hard for end users. Worse, many low-end gateway/firewall
112 routers can't handle this many connections in their routing table.
114 One approach is a restricted-route topology~\cite{danezis:pet2003}:
115 predefine which relays can reach which other relays, and communicate
116 these restrictions to the relays and the clients. We need to compute
117 which links are acceptable in a way that's decentralized yet scalable,
118 and in a way that achieves a small-worlds property; and we
119 need an efficient (compact) way to characterize the topology information
120 so all the users could keep up to date.
122 Another approach would be to switch to UDP-based transport between
123 relays, so we don't need to keep the TCP sockets open at all. Needs more
124 investigation too.
126 \subsection{Auto bandwidth detection and rate limiting, especially for
127 asymmetric connections.}
130 \subsection{Better algorithms for giving priority to local traffic}
132 Proposal 111 made a lot of progress at separating local traffic from
133 relayed traffic, so Tor users can rate limit the relayed traffic at a
134 stricter level. But since we want to pass both traffic classes over the
135 same TCP connection, we can't keep them entirely separate. The current
136 compromise is that we treat all bytes to/from a given connectin as
137 local traffic if any of the bytes within the past N seconds were local
138 bytes. But a) we could use some more intelligent heuristics, and b)
139 this leaks information to an active attacker about when local traffic
140 was sent/received.
142 \subsection{Tolerate absurdly wrong clocks, even for relays}
144 Many of our users are on Windows, running with a clock several days or
145 even several years off from reality. Some of them are even intentionally
146 in this state so they can run software that will only run in the past.
148 Before Tor 0.1.1.x, Tor clients would still function if their clock was
149 wildly off --- they simply got a copy of the directory and believed it.
150 Starting in Tor 0.1.1.x (and even moreso in Tor 0.2.0.x), the clients
151 only use networkstatus documents that they believe to be recent, so
152 clients with extremely wrong clocks no longer work. (This bug has been
153 an unending source of vague and confusing bug reports.)
155 The first step is for clients to recognize when all the directory material
156 they're fetching has roughly the same offset from their current time,
157 and then automatically correct for it.
159 Once that's working well, clients who opt to become bridge relays should
160 be able to use the same approach to serve accurate directory information
161 to their bridge users.
163 \subsection{Risks from being a relay}
165 Three different research
166 papers~\cite{back01,clog-the-queue,attack-tor-oak05} describe ways to
167 identify the nodes in a circuit by running traffic through candidate nodes
168 and looking for dips in the traffic while the circuit is active. These
169 clogging attacks are not that scary in the Tor context so long as relays
170 are never clients too. But if we're trying to encourage more clients to
171 turn on relay functionality too (whether as bridge relays or as normal
172 relays), then we need to understand this threat better and learn how to
173 mitigate it.
175 One promising research direction is to investigate the RelayBandwidthRate
176 feature that lets Tor rate limit relayed traffic differently from local
177 traffic. Since the attacker's ``clogging'' traffic is not in the same
178 bandwidth class as the traffic initiated by the user, it may be harder
179 to detect interference. Or it may not be.
181 \subsection{First a bridge, then a public relay?}
183 Once enough of the items in this section are done, I want all clients
184 to start out automatically detecting their reachability and opting
185 to be bridge relays.
187 Then if they realize they have enough consistency and bandwidth, they
188 should automatically upgrade to being non-exit relays.
190 What metrics should we use for deciding when we're fast enough
191 and stable enough to switch? Given that the list of bridge relays needs
192 to be kept secret, it doesn't make much sense to switch back.
194 \section{Tor on low resources / slow links}
195 \subsection{Reducing directory fetches further}
196 \label{subsec:fewer-descriptor-fetches}
197 \subsection{AvoidDiskWrites}
198 \subsection{Using less ram}
199 \subsection{Better DoS resistance for tor servers / authorities}
200 \section{Blocking resistance}
201 \subsection{Better bridge-address-distribution strategies}
202 \subsection{Get more volunteers running bridges}
203 \subsection{Handle multiple bridge authorities}
204 \subsection{Anonymity for bridge users: second layer of entry guards, etc?}
205 \subsection{More TLS normalization}
206 \subsection{Harder to block Tor software distribution}
207 \subsection{Integration with Psiphon}
208 \section{Packaging}
209 \subsection{Switch Privoxy out for Polipo}
210 - Make Vidalia able to launch more programs itself
211 \subsection{Continue Torbutton improvements}
212 especially better docs
213 \subsection{Vidalia and stability (especially wrt ongoing Windows problems)}
214 learn how to get useful crash reports (tracebacks) from Windows users
215 \subsection{Polipo support on Windows}
216 \subsection{Auto update for Tor, Vidalia, others}
217 \subsection{Tor browser bundle for USB and standalone use}
218 \subsection{LiveCD solution}
219 \subsection{VM-based solution}
220 \subsection{Tor-on-enclave-firewall configuration}
221 \subsection{General tutorials on what common applications are Tor-friendly}
222 \subsection{Controller libraries (torctl) plus documentation}
223 \subsection{Localization and translation (Vidalia, Torbutton, web pages)}
224 \section{Interacting better with Internet sites}
225 \subsection{Make tordnsel (tor exitlist) better and more well-known}
226 \subsection{Nymble}
227 \subsection{Work with Wikipedia, Slashdot, Google(, IRC networks)}
228 \subsection{IPv6 support for exit destinations}
229 \section{Network health}
230 \subsection{torflow / soat to detect bad relays}
231 \subsection{make authorities more automated}
232 \subsection{torstatus pages and better trend tracking}
233 \subsection{better metrics for assessing network health / growth}
234 - geoip usage-by-country reporting and aggregation
235 (Once that's working, switch to Directory guards)
236 \section{Performance research}
237 \subsection{Load balance better}
238 \subsection{Improve our congestion control algorithms}
239 \subsection{Two-hops vs Three-hops}
240 \subsection{Transport IP packets end-to-end}
241 \section{Outreach and user education}
242 \subsection{"Who uses Tor" use cases}
243 \subsection{Law enforcement contacts}
244 - "Was this IP address a Tor relay recently?" database
245 \subsection{Commercial/enterprise outreach. Help them use Tor well and
246 not fear it.}
247 \subsection{NGO outreach and training.}
248 - "How to be a safe blogger"
249 \subsection{More activist coordinators, more people to answer user questions}
250 \subsection{More people to hold hands of server operators}
251 \subsection{Teaching the media about Tor}
252 \subsection{The-dangers-of-plaintext awareness}
253 \subsection{check.torproject.org and other "privacy checkers"}
254 \subsection{Stronger legal FAQ for US}
255 \subsection{Legal FAQs for other countries}
256 \section{Anonymity research}
257 \subsection{estimate relay bandwidth more securely}
258 \subsection{website fingerprinting attacks}
259 \subsection{safer e2e defenses}
260 \subsection{Using Tor when you really need anonymity. Can you compose it
261 with other steps, like more trusted guards or separate proxies?}
262 \subsection{Topology-aware routing; routing-zones, steven's pet2007 paper.}
263 \subsection{Exactly what do guard nodes provide?}
265 Entry guards seem to defend against all sorts of attacks. Can we work
266 through all the benefits they provide? Papers like Nikita's CCS 2007
267 paper make me think their value is not well-understood by the research
268 community.
270 \section{Organizational growth and stability}
271 \subsection{A contingency plan if Roger gets hit by a bus}
272 - Get a new executive director
273 \subsection{More diversity of funding}
274 - Don't rely on any one funder as much
275 - Don't rely on any sector or funder category as much
276 \subsection{More Tor-funded people who are skilled at peripheral apps like
277 Vidalia, Torbutton, Polipo, etc}
278 \subsection{More coordinated media handling and strategy}
279 \subsection{Clearer and more predictable trademark behavior}
280 \subsection{More outside funding for internships, etc e.g. GSoC.}
281 \section{Hidden services}
282 \subsection{Scaling: how to handle many hidden services}
283 \subsection{Performance: how to rendezvous with them quickly}
284 \subsection{Authentication/authorization: how to tolerate DoS / load}
285 \section{Tor as a general overlay network}
286 \subsection{Choose paths / exit by country}
287 \subsection{Easier to run your own private servers and have Tor use them
288 anywhere in the path}
289 \subsection{Easier to run an independent Tor network}
290 \section{Code security/correctness}
291 \subsection{veracode}
292 \subsection{code audit}
293 \subsection{more fuzzing tools}
294 \subsection{build farm, better testing harness}
295 \subsection{Long-overdue code refactoring and cleanup}
296 \section{Protocol security}
297 \subsection{safer circuit handshake}
298 \subsection{protocol versioning for future compatibility}
299 \subsection{cell sizes}
300 \subsection{adapt to new key sizes, etc}
302 \bibliographystyle{plain} \bibliography{tor-design}
304 \end{document}
309 \section{Code and design infrastructure}
311 \subsection{Protocol revision}
312 To maintain backward compatibility, we've postponed major protocol
313 changes and redesigns for a long time. Because of this, there are a number
314 of sensible revisions we've been putting off until we could deploy several of
315 them at once. To do each of these, we first need to discuss design
316 alternatives with other cryptographers and outside collaborators to
317 make sure that our choices are secure.
319 First of all, our protocol needs better {\bf versioning support} so that we
320 can make backward-incompatible changes to our core protocol. There are
321 difficult anonymity issues here, since many naive designs would make it easy
322 to tell clients apart (and then track them) based on their supported versions.
324 With protocol versioning support would come the ability to {\bf future-proof
325 our ciphersuites}. For example, not only our OR protocol, but also our
326 directory protocol, is pretty firmly tied to the SHA-1 hash function, which
327 though not yet known to be insecure for our purposes, has begun to show
328 its age. We should
329 remove assumptions throughout our design based on the assumption that public
330 keys, secret keys, or digests will remain any particular size indefinitely.
332 Our OR {\bf authentication protocol}, though provably
333 secure\cite{tap:pet2006}, relies more on particular aspects of RSA and our
334 implementation thereof than we had initially believed. To future-proof
335 against changes, we should replace it with a less delicate approach.
337 \plan{For all the above: 2 person-months to specify, spread over several
338 months with time for interaction with external participants. One
339 person-month to implement. Start specifying in early 2007.}
341 We might design a {\bf stream migration} feature so that streams tunneled
342 over Tor could be more resilient to dropped connections and changed IPs.
343 \plan{Not in 2007.}
345 A new protocol could support {\bf multiple cell sizes}. Right now, all data
346 passes through the Tor network divided into 512-byte cells. This is
347 efficient for high-bandwidth protocols, but inefficient for protocols
348 like SSH or AIM that send information in small chunks. Of course, we need to
349 investigate the extent to which multiple sizes could make it easier for an
350 adversary to fingerprint a traffic pattern. \plan{Not in 2007.}
352 As a part of our design, we should investigate possible {\bf cipher modes}
353 other than counter mode. For example, a mode with built-in integrity
354 checking, error propagation, and random access could simplify our protocol
355 significantly. Sadly, many of these are patented and unavailable for us.
356 \plan{Not in 2007.}
358 \subsection{Scalability}
360 \subsubsection{Improved directory efficiency}
362 We should {\bf have routers upload their descriptors even less often}, so
363 that clients do not need to download replacements every 18 hours whether any
364 information has changed or not. (As of Tor 0.1.2.3-alpha, clients tolerate
365 routers that don't upload often, but routers still upload at least every 18
366 hours to support older clients.) \plan{Must do, but not until 0.1.1.x is
367 deprecated in mid 2007. 1 week.}
369 \subsubsection{Non-clique topology}
370 Our current network design achieves a certain amount of its anonymity by
371 making clients act like each other through the simple expedient of making
372 sure that all clients know all servers, and that any server can talk to any
373 other server. But as the number of servers increases to serve an
374 ever-greater number of clients, these assumptions become impractical.
376 At worst, if these scalability issues become troubling before a solution is
377 found, we can design and build a solution to {\bf split the network into
378 multiple slices} until a better solution comes along. This is not ideal,
379 since rather than looking like all other users from a point of view of path
380 selection, users would ``only'' look like 200,000--300,000 other
381 users.\plan{Not unless needed.}
383 We are in the process of designing {\bf improved schemes for network
384 scalability}. Some approaches focus on limiting what an adversary can know
385 about what a user knows; others focus on reducing the extent to which an
386 adversary can exploit this knowledge. These are currently in their infancy,
387 and will probably not be needed in 2007, but they must be designed in 2007 if
388 they are to be deployed in 2008.\plan{Design in 2007; unknown difficulty.
389 Write a paper.}
391 \subsubsection{Relay incentives}
392 To support more users on the network, we need to get more servers. So far,
393 we've relied on volunteerism to attract server operators, and so far it's
394 served us well. But in the long run, we need to {\bf design incentives for
395 users to run servers} and relay traffic for others. Most obviously, we
396 could try to build the network so that servers offered improved service for
397 other servers, but we would need to do so without weakening anonymity and
398 making it obvious which connections originate from users running servers. We
399 have some preliminary designs~\cite{incentives-txt,tor-challenges},
400 but need to perform
401 some more research to make sure they would be safe and effective.\plan{Write
402 a draft paper; 2 person-months.}
403 (XXX we did that)
405 \subsection{Portability}
406 Our {\bf Windows implementation}, though much improved, continues to lag
407 behind Unix and Mac OS X, especially when running as a server. We hope to
408 merge promising patches from Christian King to address this point, and bring
409 Windows performance on par with other platforms.\plan{Do in 2007; 1.5 months
410 to integrate not counting Mike's work.}
412 We should have {\bf better support for portable devices}, including modes of
413 operation that require less RAM, and that write to disk less frequently (to
414 avoid wearing out flash RAM).\plan{Optional; 2 weeks.}
416 \subsection{Performance: resource usage}
417 We've been working on {\bf using less RAM}, especially on servers. This has
418 paid off a lot for directory caches in the 0.1.2, which in some cases are
419 using 90\% less memory than they used to require. But we can do better,
420 especially in the area around our buffer management algorithms, by using an
421 approach more like the BSD and Linux kernels use instead of our current ring
422 buffer approach. (For OR connections, we can just use queues of cell-sized
423 chunks produced with a specialized allocator.) This could potentially save
424 around 25 to 50\% of the memory currently allocated for network buffers, and
425 make Tor a more attractive proposition for restricted-memory environments
426 like old computers, mobile devices, and the like.\plan{Do in 2007; 2-3 weeks
427 plus one week measurement.} (XXX We did this, but we need to do something
428 more/else.)
430 \subsection{Performance: network usage}
431 We know too little about how well our current path
432 selection algorithms actually spread traffic around the network in practice.
433 We should {\bf research the efficacy of our traffic allocation} and either
434 assure ourselves that it is close enough to optimal as to need no improvement
435 (unlikely) or {\bf identify ways to improve network usage}, and get more
436 users' traffic delivered faster. Performing this research will require
437 careful thought about anonymity implications.
439 We should also {\bf examine the efficacy of our congestion control
440 algorithm}, and see whether we can improve client performance in the
441 presence of a congested network through dynamic `sendme' window sizes or
442 other means. This will have anonymity implications too if we aren't careful.
444 \plan{For both of the above: research, design and write
445 a measurement tool in 2007: 1 month. See if we can interest a graduate
446 student.}
448 We should work on making Tor's cell-based protocol perform better on
449 networks with low bandwidth
450 and high packet loss.\plan{Do in 2007 if we're funded to do it; 4-6 weeks.}
452 \subsection{Performance scenario: one Tor client, many users}
453 We should {\bf improve Tor's performance when a single Tor handles many
454 clients}. Many organizations want to manage a single Tor client on their
455 firewall for many users, rather than having each user install a separate
456 Tor client. We haven't optimized for this scenario, and it is likely that
457 there are some code paths in the current implementation that become
458 inefficient when a single Tor is servicing hundreds or thousands of client
459 connections. (Additionally, it is likely that such clients have interesting
460 anonymity requirements the we should investigate.) We should profile Tor
461 under appropriate loads, identify bottlenecks, and fix them.\plan{Do in 2007
462 if we're funded to do it; 4-8 weeks.}
464 \subsection{Tor servers on asymmetric bandwidth}
466 Tor should work better on servers that have asymmetric connections like cable
467 or DSL. Because Tor has separate TCP connections between each
468 hop, if the incoming bytes are arriving just fine and the outgoing bytes are
469 all getting dropped on the floor, the TCP push-back mechanisms don't really
470 transmit this information back to the incoming streams.\plan{Do in 2007 since
471 related to bandwidth limiting. 3-4 weeks.}
473 \subsection{Running Tor as both client and server}
475 Many performance tradeoffs and balances that might need more attention.
476 We first need to track and fix whatever bottlenecks emerge; but we also
477 need to invent good algorithms for prioritizing the client's traffic
478 without starving the server's traffic too much.\plan{No idea; try
479 profiling and improving things in 2007.}
481 \subsection{Protocol redesign for UDP}
482 Tor has relayed only TCP traffic since its first versions, and has used
483 TLS-over-TCP to do so. This approach has proved reliable and flexible, but
484 in the long term we will need to allow UDP traffic on the network, and switch
485 some or all of the network to using a UDP transport. {\bf Supporting UDP
486 traffic} will make Tor more suitable for protocols that require UDP, such
487 as many VOIP protocols. {\bf Using a UDP transport} could greatly reduce
488 resource limitations on servers, and make the network far less interruptible
489 by lossy connections. Either of these protocol changes would require a great
490 deal of design work, however. We hope to be able to enlist the aid of a few
491 talented graduate students to assist with the initial design and
492 specification, but the actual implementation will require significant testing
493 of different reliable transport approaches.\plan{Maybe do a design in 2007 if
494 we find an interested academic. Ian or Ben L might be good partners here.}
496 \section{Blocking resistance}
498 \subsection{Design for blocking resistance}
499 We have written a design document explaining our general approach to blocking
500 resistance. We should workshop it with other experts in the field to get
501 their ideas about how we can improve Tor's efficacy as an anti-censorship
502 tool.
504 \subsection{Implementation: client-side and bridges-side}
506 Bridges will want to be able to {\bf listen on multiple addresses and ports}
507 if they can, to give the adversary more ports to block.
509 \subsection{Research: anonymity implications from becoming a bridge}
511 see arma's bridge proposal; e.g. should bridge users use a second layer of
512 entry guards?
514 \subsection{Implementation: bridge authority}
516 we run some
517 directory authorities with a slightly modified protocol that doesn't leak
518 the entire list of bridges. Thus users can learn up-to-date information
519 for bridges they already know about, but they can't learn about arbitrary
520 new bridges.
522 we need a design for distributing the bridge authority over more than one
523 server
525 \subsection{Normalizing the Tor protocol on the wire}
526 Additionally, we should {\bf resist content-based filters}. Though an
527 adversary can't see what users are saying, some aspects of our protocol are
528 easy to fingerprint {\em as} Tor. We should correct this where possible.
530 Look like Firefox; or look like nothing?
531 Future research: investigate timing similarities with other protocols.
533 \subsection{Research: scanning-resistance}
535 \subsection{Research/Design/Impl: how users discover bridges}
536 Our design anticipates an arms race between discovery methods and censors.
537 We need to begin the infrastructure on our side quickly, preferably in a
538 flexible language like Python, so we can adapt quickly to censorship.
540 phase one: personal bridges
541 phase two: families of personal bridges
542 phase three: more structured social network
543 phase four: bag of tricks
544 Research: phase five...
546 Integration with Psiphon, etc?
548 \subsection{Document best practices for users}
549 Document best practices for various activities common among
550 blocked users (e.g. WordPress use).
552 \subsection{Research: how to know if a bridge has been blocked?}
554 \subsection{GeoIP maintenance, and "private" user statistics}
555 How to know if the whole idea is working?
557 \subsection{Research: hiding whether the user is reading or publishing?}
559 \subsection{Research: how many bridges do you need to know to maintain
560 reachability?}
562 \subsection{Resisting censorship of the Tor website, docs, and mirrors}
564 We should take some effort to consider {\bf initial distribution of Tor and
565 related information} in countries where the Tor website and mirrors are
566 censored. (Right now, most countries that block access to Tor block only the
567 main website and leave mirrors and the network itself untouched.) Falling
568 back on word-of-mouth is always a good last resort, but we should also take
569 steps to make sure it's relatively easy for users to get ahold of a copy.
571 \section{Security}
573 \subsection{Security research projects}
575 We should investigate approaches with some promise to help Tor resist
576 end-to-end traffic correlation attacks. It's an open research question
577 whether (and to what extent) {\bf mixed-latency} networks, {\bf low-volume
578 long-distance padding}, or other approaches can resist these attacks, which
579 are currently some of the most effective against careful Tor users. We
580 should research these questions and perform simulations to identify
581 opportunities for strengthening our design without dropping performance to
582 unacceptable levels. %Cite something
583 \plan{Start doing this in 2007; write a paper. 8-16 weeks.}
585 We've got some preliminary results suggesting that {\bf a topology-aware
586 routing algorithm}~\cite{feamster:wpes2004} could reduce Tor users'
587 vulnerability against local or ISP-level adversaries, by ensuring that they
588 are never in a position to watch both ends of a connection. We need to
589 examine the effects of this approach in more detail and consider side-effects
590 on anonymity against other kinds of adversaries. If the approach still looks
591 promising, we should investigate ways for clients to implement it (or an
592 approximation of it) without having to download routing tables for the whole
593 Internet. \plan{Not in 2007 unless a graduate student wants to do it.}
595 %\tmp{defenses against end-to-end correlation} We don't expect any to work
596 %right now, but it would be useful to learn that one did. Alternatively,
597 %proving that one didn't would free up researchers in the field to go work on
598 %other things.
600 % See above; I think I got this.
602 We should research the efficacy of {\bf website fingerprinting} attacks,
603 wherein an adversary tries to match the distinctive traffic and timing
604 pattern of the resources constituting a given website to the traffic pattern
605 of a user's client. These attacks work great in simulations, but in
606 practice we hear they don't work nearly as well. We should get some actual
607 numbers to investigate the issue, and figure out what's going on. If we
608 resist these attacks, or can improve our design to resist them, we should.
609 % add cites
610 \plan{Possibly part of end-to-end correlation paper. Otherwise, not in 2007
611 unless a graduate student is interested.}
613 \subsection{Implementation security}
615 We should also {\bf mark RAM that holds key material as non-swappable} so
616 that there is no risk of recovering key material from a hard disk
617 compromise. This would require submitting patches upstream to OpenSSL, where
618 support for marking memory as sensitive is currently in a very preliminary
619 state.\plan{Nice to do, but not in immediate Tor scope.}
621 There are numerous tools for identifying trouble spots in code (such as
622 Coverity or even VS2005's code analysis tool) and we should convince somebody
623 to run some of them against the Tor codebase. Ideally, we could figure out a
624 way to get our code checked periodically rather than just once.\plan{Almost
625 no time once we talk somebody into it.}
627 We should try {\bf protocol fuzzing} to identify errors in our
628 implementation.\plan{Not in 2007 unless we find a grad student or
629 undergraduate who wants to try.}
631 Our guard nodes help prevent an attacker from being able to become a chosen
632 client's entry point by having each client choose a few favorite entry points
633 as ``guards'' and stick to them. We should implement a {\bf directory
634 guards} feature to keep adversaries from enumerating Tor users by acting as
635 a directory cache.\plan{Do in 2007; 2 weeks.}
637 \subsection{Detect corrupt exits and other servers}
638 With the success of our network, we've attracted servers in many locations,
639 operated by many kinds of people. Unfortunately, some of these locations
640 have compromised or defective networks, and some of these people are
641 untrustworthy or incompetent. Our current design relies on authority
642 administrators to identify bad nodes and mark them as nonfunctioning. We
643 should {\bf automate the process of identifying malfunctioning nodes} as
644 follows:
646 We should create a generic {\bf feedback mechanism for add-on tools} like
647 Mike Perry's ``Snakes on a Tor'' to report failing nodes to authorities.
648 \plan{Do in 2006; 1-2 weeks.}
650 We should write tools to {\bf detect more kinds of innocent node failure},
651 such as nodes whose network providers intercept SSL, nodes whose network
652 providers censor popular websites, and so on. We should also try to detect
653 {\bf routers that snoop traffic}; we could do this by launching connections
654 to throwaway accounts, and seeing which accounts get used.\plan{Do in 2007;
655 ask Mike Perry if he's interested. 4-6 weeks.}
657 We should add {\bf an efficient way for authorities to mark a set of servers
658 as probably collaborating} though not necessarily otherwise dishonest.
659 This happens when an administrator starts multiple routers, but doesn't mark
660 them as belonging to the same family.\plan{Do during v2.1 directory protocol
661 redesign; 1-2 weeks to implement.}
663 To avoid attacks where an adversary claims good performance in order to
664 attract traffic, we should {\bf have authorities measure node performance}
665 (including stability and bandwidth) themselves, and not simply believe what
666 they're told. We also measure stability by tracking MTBF. Measuring
667 bandwidth will be tricky, since it's hard to distinguish between a server with
668 low capacity, and a high-capacity server with most of its capacity in
669 use. See also Nikita's NDSS 2008 paper.\plan{Do it if we can interest
670 a grad student.}
672 {\bf Operating a directory authority should be easier.} We rely on authority
673 operators to keep the network running well, but right now their job involves
674 too much busywork and administrative overhead. A better interface for them
675 to use could free their time to work on exception cases rather than on
676 adding named nodes to the network.\plan{Do in 2007; 4-5 weeks.}
678 \subsection{Protocol security}
680 In addition to other protocol changes discussed above,
681 % And should we move some of them down here? -NM
682 we should add {\bf hooks for denial-of-service resistance}; we have some
683 preliminary designs, but we shouldn't postpone them until we really need them.
684 If somebody tries a DDoS attack against the Tor network, we won't want to
685 wait for all the servers and clients to upgrade to a new
686 version.\plan{Research project; do this in 2007 if funded.}
688 \section{Development infrastructure}
690 \subsection{Build farm}
691 We've begun to deploy a cross-platform distributed build farm of hosts
692 that build and test the Tor source every time it changes in our development
693 repository.
695 We need to {\bf get more participants}, so that we can test a larger variety
696 of platforms. (Previously, we've only found out when our code had broken on
697 obscure platforms when somebody got around to building it.)
699 We need also to {\bf add our dependencies} to the build farm, so that we can
700 ensure that libraries we need (especially libevent) do not stop working on
701 any important platform between one release and the next.
703 \plan{This is ongoing as more buildbots arrive.}
705 \subsection{Improved testing harness}
706 Currently, our {\bf unit tests} cover only about 20\% of the code base. This
707 is uncomfortably low; we should write more and switch to a more flexible
708 testing framework.\plan{Ongoing basis, time permitting.}
710 We should also write flexible {\bf automated single-host deployment tests} so
711 we can more easily verify that the current codebase works with the
712 network.\plan{Worthwhile in 2007; would save lots of time. 2-4 weeks.}
714 We should build automated {\bf stress testing} frameworks so we can see which
715 realistic loads cause Tor to perform badly, and regularly profile Tor against
716 these loads. This would give us {\it in vitro} performance values to
717 supplement our deployment experience.\plan{Worthwhile in 2007; 2-6 weeks.}
719 We should improve our memory profiling code.\plan{...}
722 \subsection{Centralized build system}
723 We currently rely on a separate packager to maintain the packaging system and
724 to build Tor on each platform for which we distribute binaries. Separate
725 package maintainers is sensible, but separate package builders has meant
726 long turnaround times between source releases and package releases. We
727 should create the necessary infrastructure for us to produce binaries for all
728 major packages within an hour or so of source release.\plan{We should
729 brainstorm this at least in 2007.}
731 \subsection{Improved metrics}
732 We need a way to {\bf measure the network's health, capacity, and degree of
733 utilization}. Our current means for doing this are ad hoc and not
734 completely accurate
736 We need better ways to {\bf tell which countries are users are coming from,
737 and how many there are}. A good perspective of the network helps us
738 allocate resources and identify trouble spots, but our current approaches
739 will work less and less well as we make it harder for adversaries to
740 enumerate users. We'll probably want to shift to a smarter, statistical
741 approach rather than our current ``count and extrapolate'' method.
743 \plan{All of this in 2007 if funded; 4-8 weeks}
745 % \tmp{We'd like to know how much of the network is getting used.}
746 % I think this is covered above -NM
748 \subsection{Controller library}
749 We've done lots of design and development on our controller interface, which
750 allows UI applications and other tools to interact with Tor. We could
751 encourage the development of more such tools by releasing a {\bf
752 general-purpose controller library}, ideally with API support for several
753 popular programming languages.\plan{2006 or 2007; 1-2 weeks.}
755 \section{User experience}
757 \subsection{Get blocked less, get blocked less broadly}
758 Right now, some services block connections from the Tor network because
759 they don't have a better
760 way to keep vandals from abusing them than blocking IP addresses associated
761 with vandalism. Our approach so far has been to educate them about better
762 solutions that currently exist, but we should also {\bf create better
763 solutions for limiting vandalism by anonymous users} like credential and
764 blind-signature based implementations, and encourage their use. Other
765 promising starting points including writing a patch and explanation for
766 Wikipedia, and helping Freenode to document, maintain, and expand its
767 current Tor-friendly position.\plan{Do a writeup here in 2007; 1-2 weeks.}
769 Those who do block Tor users also block overbroadly, sometimes blacklisting
770 operators of Tor servers that do not permit exit to their services. We could
771 obviate innocent reasons for doing so by designing a {\bf narrowly-targeted Tor
772 RBL service} so that those who wanted to overblock Tor could no longer
773 plead incompetence.\plan{Possibly in 2007 if we decide it's a good idea; 3
774 weeks.}
776 \subsection{All-in-one bundle}
777 We need a well-tested, well-documented bundle of Tor and supporting
778 applications configured to use it correctly. We have an initial
779 implementation well under way, but it will need additional work in
780 identifying requisite Firefox extensions, identifying security threats,
781 improving user experience, and so on. This will need significantly more work
782 before it's ready for a general public release.
784 \subsection{LiveCD Tor}
785 We need a nice bootable livecd containing a minimal OS and a few applications
786 configured to use it correctly. The Anonym.OS project demonstrated that this
787 is quite feasible, but their project is not currently maintained.
789 \subsection{A Tor client in a VM}
790 \tmp{a.k.a JanusVM} which is quite related to the firewall-level deployment
791 section below. JanusVM is a Linux kernel running in VMWare. It gets an IP
792 address from the network, and serves as a DHCP server for its host Windows
793 machine. It intercepts all outgoing traffic and redirects it into Privoxy,
794 Tor, etc. This Linux-in-Windows approach may help us with scalability in
795 the short term, and it may also be a good long-term solution rather than
796 accepting all security risks in Windows.
798 %\subsection{Interface improvements}
799 %\tmp{Allow controllers to manipulate server status.}
800 % (Why is this in the User Experience section?) -RD
801 % I think it's better left to a generic ``make controller iface better'' item.
803 \subsection{Firewall-level deployment}
804 Another useful deployment mode for some users is using {\bf Tor in a firewall
805 configuration}, and directing all their traffic through Tor. This can be a
806 little tricky to set up currently, but it's an effective way to make sure no
807 traffic leaves the host un-anonymized. To achieve this, we need to {\bf
808 improve and port our new TransPort} feature which allows Tor to be used
809 without SOCKS support; to {\bf add an anonymizing DNS proxy} feature to Tor;
810 and to {\bf construct a recommended set of firewall configurations} to redirect
811 traffic to Tor.
813 This is an area where {\bf deployment via a livecd}, or an installation
814 targeted at specialized home routing hardware, could be useful.
816 \subsection{Assess software and configurations for anonymity risks}
817 Right now, users and packagers are more or less on their own when selecting
818 Firefox extensions. We should {\bf assemble a recommended list of browser
819 extensions} through experiment, and include this in the application bundles
820 we distribute.
822 We should also describe {\bf best practices for using Tor with each class of
823 application}. For example, Ethan Zuckerman has written a detailed
824 tutorial on how to use Tor, Firefox, GMail, and Wordpress to blog with
825 improved safety. There are many other cases on the Internet where anonymity
826 would be helpful, and there are a lot of ways to screw up using Tor.
828 The Foxtor and Torbutton extensions serve similar purposes; we should pick a
829 favorite, and merge in the useful features of the other.
831 %\tmp{clean up our own bundled software:
832 %E.g. Merge the good features of Foxtor into Torbutton}
834 % What else did you have in mind? -NM
836 \subsection{Localization}
837 Right now, most of our user-facing code is internationalized. We need to
838 internationalize the last few hold-outs (like the Tor expert installer), and get
839 more translations for the parts that are already internationalized.
841 Also, we should look into a {\bf unified translator's solution}. Currently,
842 since different tools have been internationalized using the
843 framework-appropriate method, different tools require translators to localize
844 them via different interfaces. Inasmuch as possible, we should make
845 translators only need to use a single tool to translate the whole Tor suite.
847 \section{Support}
849 It would be nice to set up some {\bf user support infrastructure} and
850 {\bf contributor support infrastructure}, especially focusing on server
851 operators and on coordinating volunteers.
853 This includes intuitive and easy ticket systems for bug reports and
854 feature suggestions (not just mailing lists with a half dozen people
855 and no clear roles for who answers what), but it also includes a more
856 personalized and efficient framework for interaction so we keep the
857 attention and interest of the contributors, and so we make them feel
858 helpful and wanted.
860 \section{Documentation}
862 \subsection{Unified documentation scheme}
864 We need to {\bf inventory our documentation.} Our documentation so far has
865 been mostly produced on an {\it ad hoc} basis, in response to particular
866 needs and requests. We should figure out what documentation we have, which of
867 it (if any) should get priority, and whether we can't put it all into a
868 single format.
870 We could {\bf unify the docs} into a single book-like thing. This will also
871 help us identify what sections of the ``book'' are missing.
873 \subsection{Missing technical documentation}
875 We should {\bf revise our design paper} to reflect the new decisions and
876 research we've made since it was published in 2004. This will help other
877 researchers evaluate and suggest improvements to Tor's current design.
879 Other projects sometimes implement the client side of our protocol. We
880 encourage this, but we should write {\bf a document about how to avoid
881 excessive resource use}, so we don't need to worry that they will do so
882 without regard to the effect of their choices on server resources.
884 \subsection{Missing user documentation}
886 Our documentation falls into two broad categories: some is `discoursive' and
887 explains in detail why users should take certain actions, and other
888 documentation is `comprehensive' and describes all of Tor's features. Right
889 now, we have no document that is both deep, readable, and thorough. We
890 should correct this by identifying missing spots in our design.
892 \bibliographystyle{plain} \bibliography{tor-design}
894 \end{document}