tor/doc/TODO

359 lines
16 KiB
Plaintext
Raw Normal View History

$Id$
Legend:
SPEC!! - Not specified
SPEC - Spec not finalized
N - nick claims
R - arma claims
P - phobos claims
- Not done
* Top priority
. Partially done
o Done
D Deferred
X Abandoned
2006-02-11 09:25:40 +01:00
. <nickm> "Let's try to find a way to make it run and make the version
match, but if not, let's just make it run."
- <arma> "should we detect if we have a --with-ssl-dir and try the -R
by default, if it works?"
Important bugfixes in 0.1.2.x:
- When we've been idle a long time, we stop fetching server
descriptors. When we then get a socks request, we build circuits
immediately using whatever descriptors we have, rather than waiting
until we've fetched correct ones.
- If the client's clock is too far in the past, it will drop (or
just not try to get) descriptors, so it'll never build circuits.
2006-05-30 22:41:22 +02:00
Items for 0.1.2.x:
- when we start, remove any entryguards that are listed in excludenodes.
2006-08-14 08:29:40 +02:00
. start calling dev releases 0.1.2.1-alpha-dev, not -cvs. Do we need
to change the code in any way for this?
2006-08-12 02:30:07 +02:00
- enumerate events of important things that occur in tor, so vidalia can
react.
2006-07-17 21:42:22 +02:00
- We should ship with a list of stable dir mirrors -- they're not
trusted like the authorities, but they'll provide more robustness
and diversity for bootstrapping clients.
2006-05-30 22:41:22 +02:00
- Servers are easy to setup and run: being a relay is about as easy as
being a client.
- Reduce resource load
- look into "uncounting" bytes spent on local connections. so
we can bandwidthrate but still have fast downloads.
- Write limiting; separate token bucket for write
o dir answers include a your-ip-address-is header, so we can
2006-05-30 22:41:22 +02:00
break our dependency on dyndns.
2006-08-12 02:30:07 +02:00
- Come up with good 'nicknames' automatically, or make no-nickname
routers workable.
- tolerate clock skew on bridge relays.
- a way to export server descriptors to controllers, and/or to
non-standard dir authorities.
- a way to pick entries based wholly on extend_info equivalent;
a way to export extend_info equivalent.
- option to dl directory info via tor
- is the __AllDirActionsPrivate config option sufficient?
D Count TLS bandwidth more accurately
- Write-limit directory responses (need to research)
N . Improve memory usage on tight-memory machines.
. Directory-related fixes.
. Mmap cache files where possible.
o Mmap cached-routers file; when building it, go oldest-to-newest.
- More unit tests and asserts for cached-routers file: ensure digest
for the right router. Verify dl by digest, fp, etc.
o Make sure cached-routers values and offsets are correct in the
presence of windows FS insanity.
D Save and mmap v1 directories, and networkstatus docs; store them
zipped, not uncompressed.
D Switch cached_router_t to use mmap.
D What to do about reference counts on windows?
(On Unix, this is easy: unlink works fine. (Right?) On
Windows, I have doubts. Do we need to keep multiple files?)
D What do we do about the fact that people can't read zlib-
compressed files manually?
- Look into pulling serverdescs off buffers as they arrive.
2006-05-30 22:41:22 +02:00
- "bandwidth classes", for incoming vs initiated-here conns.
o Asynchronous DNS
o And test it
. Make it work on windows.
o Implement
. Enable
- Test
- Make the Nameservers option documented, and make it work right on
reload.
o Fail when we have no configured nameservers!
o Make it the default on platforms where it works.
- Add ipv6 support; make API closer to getaddrinfo(). (i.e., allow a
single AAAA/A query, return cname as well)
- Teach it to be able to listen for A and PTR requests to be processed.
Interface should be set_request_listener(sock, cb); [ cb(request) ]
send_reply(request, answer);.
- Refactor exit side of resolve: do we need a connection_t?
- Refactor entry side of resolve: do we need a connection_t?
2006-05-30 22:41:22 +02:00
- Security improvements
- Directory guards
- remember the last time we saw one of our entry guards labelled with
2006-05-30 22:41:22 +02:00
the GUARD flag. If it's been too long, it is not suitable for use.
If it's been really too long, remove it from the list.
. Figure out avoiding duplicate /24 lines
o automatically add /16 servers to family
- do it in an efficient way. keep a list of something somewhere?
- make the "16" part configurable, so people who run their own
tor network can set it to 32.
2006-04-23 23:36:52 +02:00
2006-05-30 22:41:22 +02:00
- Make reverse DNS work.
2006-08-09 02:58:27 +02:00
- Specify
X Implement with dnsworkers
(There's no point doing this, since we will throw away dnsworkers once
eventdns is confirmed to work everywhere.)
o Implement in eventdns
2006-08-09 02:58:27 +02:00
- Connect to resolve cells, server-side.
- Add client-side interface
2006-04-23 23:36:52 +02:00
2006-05-30 22:41:22 +02:00
- Performance improvements
- Better estimates in the directory of whether servers have good uptime
(high expected time to failure) or good guard qualities (high
fractional uptime).
- AKA Track uptime as %-of-time-up, as well as time-since-last-down.
- Clients should prefer to avoid exit nodes for non-exit path positions.
(bug 200)
- Have a "Faster" status flag that means it. Fast2, Fast4, Fast8?
- A more efficient dir protocol.
N - Clients stop dumping old descriptors if the network-statuses
claim they're still valid.
- Later, servers will stop generating new descriptors simply
because 18 hours have passed.
- Authorities should fetch the network-statuses amongst each
other, consensus them, and advertise a communal network-status.
This is not so much for safety/complexity as it is to reduce
bandwidth requirements for Alice.
- How does this interact with our goal of being able to choose
your own dir authorities? I guess we're now assuming that all
dir authorities know all the other authorities in their "group"?
- Should we also look into a "delta since last network-status
checkpoint" scheme, to reduce overhead further?
D Extend the "r" line in network-status to give a set of buckets (say,
comma-separated) for that router.
- Buckets are deterministic based on IP address.
- Then clients can choose a bucket (or set of buckets) to
download and use.
2006-08-08 08:21:52 +02:00
- Critical but minor bugs, backport candidates.
- Failed rend desc fetches sometimes don't get retried. True/false?
2006-07-23 07:19:31 +02:00
. If we fail to connect via an exit enclave, (warn and) try again
2006-05-30 22:41:22 +02:00
without demanding that exit node.
2006-07-23 07:19:31 +02:00
- And recognize when extending to the enclave node is failing,
so we can abandon then too.
- non-v1 authorities should not accept rend descs.
2006-05-30 22:41:22 +02:00
- We need a separate list of "hidserv authorities" if we want to
retire moria1 from the main list.
- support dir 503s better
o clients don't log as loudly when they receive them
- they don't count toward the 3-strikes rule
- should there be some threshold of 503's after which we give up?
- think about how to split "router is down" from "dirport shouldn't
be tried for a while"?
- authorities should *never* 503 a cache, but *should* 503 clients
when they feel like it.
- update dir-spec with what we decided for each of these
- provide no-cache no-index headers from the dirport?
- Windows server usability
- Solve the ENOBUFS problem.
- make tor's use of openssl operate on buffers rather than sockets,
so we can make use of libevent's buffer paradigm once it has one.
- make tor's use of libevent tolerate either the socket or the
buffer paradigm; includes unifying the functions in connect.c.
- We need a getrlimit equivalent on Windows so we can reserve some
file descriptors for saving files, etc. Otherwise we'll trigger
asserts when we're out of file descriptors and crash.
M - rewrite how libevent does select() on win32 so it's not so very slow.
- Add overlapped IO
N - When we connect to a Tor server, it sends back a cell listing
the IP it believes it is using. Use this to block dvorak's attack.
Also, this is a fine time to say what time you think it is.
2006-04-23 23:36:52 +02:00
o Verify that a new cell type is okay with deployed codebase
2006-07-17 21:42:22 +02:00
. Specify HELLO cells
. Figure out v0 compatibility.
- Implement
2006-05-30 22:41:22 +02:00
N - Exitlist should avoid outputting the same IP address twice.
2006-04-23 23:36:52 +02:00
2006-05-30 22:41:22 +02:00
N - Write path-spec.txt
- Packaging
- Tell people about OSX Uninstaller
- Quietly document NT Service options
2006-04-23 23:40:15 +02:00
2006-05-30 22:41:22 +02:00
- Docs
- More prominently, we should have a recommended apps list.
- recommend gaim.
- unrecommend IE because of ftp:// bug.
- torrc.complete.in needs attention?
2006-04-23 23:36:52 +02:00
Topics to think about during 0.1.2.x development:
2006-05-30 22:41:22 +02:00
* Figure out incentives.
- (How can we make this tolerant of a bad v0?)
* Figure out non-clique.
* Figure out China.
2006-04-23 23:36:52 +02:00
- Figure out partial network knowledge.
- Figure out hidden services.
Minor items for 0.1.2.x as time permits.
2006-08-08 08:21:52 +02:00
- Tor should bind its ports before dropping privs, so users don't
have to do the ipchains dance.
- Make --verify-config return a useful error code.
- Rate limit exit connections to a given destination -- this helps
us play nice with websites when Tor users want to crawl them; it
also introduces DoS opportunities.
- The bw_accounting file should get merged into the state file.
2006-05-30 22:41:22 +02:00
- Streamline how we define a guard node as 'up'.
2006-04-23 23:36:52 +02:00
- Better installers and build processes.
- Commit edmanm's win32 makefile to tor contrib, or write a new one.
2006-05-30 22:41:22 +02:00
- Christian Grothoff's attack of infinite-length circuit.
2006-04-23 23:36:52 +02:00
the solution is to have a separate 'extend-data' cell type
which is used for the first N data cells, and only
extend-data cells can be extend requests.
- Specify, including thought about anonymity implications.
2006-05-30 22:41:22 +02:00
- Display the reasons in 'destroy' and 'truncated' cells under some
2006-02-13 08:36:15 +01:00
circumstances?
2006-05-30 22:41:22 +02:00
- We need a way for the authorities to declare that nodes are
in a family. Also, it kinda sucks that family declarations use O(N^2)
space in the descriptors.
- If the server is spewing complaints about raising your ulimit -n,
we should add a note about this to the server descriptor so other
people can notice too.
- rate limit the number of exit connections to a given destination, to
help with DoS/crawling issues.
2005-06-07 22:48:47 +02:00
- cpu fixes:
- see if we should make use of truncate to retry
2006-05-30 22:41:22 +02:00
- kill dns workers more slowly
. Directory changes
2005-09-20 21:30:48 +02:00
. Some back-out mechanism for auto-approval
2005-06-08 23:22:36 +02:00
- a way of rolling back approvals to before a timestamp
- Consider minion-like fingerprint file/log combination.
2005-06-07 22:48:47 +02:00
- packaging and ui stuff:
. multiple sample torrc files
. figure out how to make nt service stuff work?
. Document it.
2006-05-30 22:41:22 +02:00
- Vet all pending installer patches
- Win32 installer plus privoxy, sockscap/freecap, etc.
- Vet win32 systray helper code
2006-05-30 22:41:22 +02:00
- Improve controller
- change circuit status events to give more details, like purpose,
whether they're internal, when they become dirty, when they become
too dirty for further circuits, etc.
- What do we want here, exactly?
- Specify and implement it.
- Change stream status events analogously.
- What do we want here, exactly?
- Specify and implement it.
- Make other events "better".
- Change stream status events analogously.
- What do we want here, exactly?
- Specify and implement it.
- Make other events "better" analogously
- What do we want here, exactly?
- Specify and implement it.
. Expose more information via getinfo:
- import and export rendezvous descriptors
- Review all static fields for additional candidates
- Allow EXTENDCIRCUIT to unknown server.
- We need some way to adjust server status, and to tell tor not to
download directories/network-status, and a way to force a download.
- It would be nice to request address lookups from the controller
without using SOCKS.
- Make everything work with hidden services
2006-07-17 21:42:22 +02:00
- Directory system improvements
- config option to publish what ports you listen on, beyond
ORPort/DirPort. It should support ranges and bit prefixes (?) too.
- Parse this.
- Relay this in networkstatus.
Future version:
2006-08-08 08:21:52 +02:00
- Tor should have a "DNS port" so we don't need to ship with (and
write) a clean portable dns proxy.
. Update the hidden service stuff for the new dir approach.
- switch to an ascii format, maybe sexpr?
- authdirservers publish blobs of them.
- other authdirservers fetch these blobs.
- hidserv people have the option of not uploading their blobs.
- you can insert a blob via the controller.
- and there's some amount of backwards compatibility.
- teach clients, intro points, and hidservs about auth mechanisms.
- come up with a few more auth mechanisms.
- auth mechanisms to let hidden service midpoint and responder filter
connection requests.
- Bind to random port when making outgoing connections to Tor servers,
to reduce remote sniping attacks.
- Have new people be in limbo and need to demonstrate usefulness
before we approve them.
- Clients should estimate their skew as median of skew from servers
over last N seconds.
2006-05-30 22:41:22 +02:00
- Make router_is_general_exit() a bit smarter once we're sure what it's for.
- Audit everything to make sure rend and intro points are just as likely to
be us as not.
- Do something to prevent spurious EXTEND cells from making middleman
nodes connect all over. Rate-limit failed connections, perhaps?
2006-05-30 22:41:22 +02:00
- Automatically determine what ports are reachable and start using
those, if circuits aren't working and it's a pattern we recognize
("port 443 worked once and port 9001 keeps not working").
- Limit to 2 dir, 2 OR, N SOCKS connections per IP.
- Handle full buffers without totally borking
- Rate-limit OR and directory connections overall and per-IP and
maybe per subnet.
- Hold-open-until-flushed now works by accident; it should work by
design.
- DoS protection: TLS puzzles, public key ops, bandwidth exhaustion.
- Specify?
- tor-resolve script should use socks5 to get better error messages.
2005-02-23 22:59:09 +01:00
- hidserv offerers shouldn't need to define a SocksPort
* figure out what breaks for this, and do it.
- tor should be able to have a pool of outgoing IP addresses
that it is able to rotate through. (maybe)
- let each hidden service (or other thing) specify its own
OutboundBindAddress?
- Have a mode that doesn't write to disk much, so we can run Tor on
flash memory (e.g. Linksys routers).
Blue-sky:
- Patch privoxy and socks protocol to pass strings to the browser.
- Standby/hotswap/redundant hidden services.
- Robust decentralized storage for hidden service descriptors.
- The "China problem"
- Allow small cells and large cells on the same network?
- Cell buffering and resending. This will allow us to handle broken
circuits as long as the endpoints don't break, plus will allow
connection (tls session key) rotation.
- Implement Morphmix, so we can compare its behavior, complexity, etc.
- Other transport. HTTP, udp, rdp, airhook, etc. May have to do our own
link crypto, unless we can bully openssl into it.
- Need a relay teardown cell, separate from one-way ends.
(Pending a user who needs this)
- Handle half-open connections: right now we don't support all TCP
streams, at least according to the protocol. But we handle all that
we've seen in the wild.
(Pending a user who needs this)
Non-Coding:
- Mark up spec; note unclear points about servers
- Mention controller libs someplace.
P - flesh out the rest of the section 6 of the faq
. more pictures from ren. he wants to describe the tor handshake
NR- write a spec appendix for 'being nice with tor'
- tor-in-the-media page
- Remove need for HACKING file.
- Figure out licenses for website material.
Website:
- and remove home and make the "Tor" picture be the link to home.
- put the logo on the website, in source form, so people can put it on
stickers directly, etc.
R - make a page with the hidden service diagrams.
- ask Jan to be the translation coordinator? add to volunteer page.