TODO 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. improve how it behaves when i remove a line from the approved-routers files
  2. - Rotate tls-level connections -- make new ones, expire old ones.
  3. Nick, can you remember why we wanted to do this?
  4. on hup, retry_all_connections (plus binding? and closing i guess. hm.)
  5. Legend:
  6. SPEC!! - Not specified
  7. SPEC - Spec not finalized
  8. NICK - nick claims
  9. ARMA - arma claims
  10. - Not done
  11. * Top priority
  12. . Partially done
  13. o Done
  14. D Deferred
  15. X Abandoned
  16. For 0.0.2pre15:
  17. - don't pick exit nodes which will certainly reject all things.
  18. - don't pick nodes that the directory says are down
  19. - choose randomly from running dirservers, not just first one
  20. For 0.0.2pre14:
  21. o More flexible exit policies (18.*, 18.0.0.0/8)
  22. o Work to succeed in the precense of exit policy violation
  23. o Replace desired_path_len with opaque path-selection specifier
  24. o Client-side DNS caching
  25. o Add entries to client DNS cache based on END cells
  26. o Remove port from END_REASON_EXITPOLICY cells
  27. o Start building new circuits when we get an exit-policy
  28. failure. (Defer exiting from the middle of existing
  29. circuits or extending existing circuits for later.)
  30. o Implement function to check whether a routerinfo_t
  31. supports a given exit addr.
  32. o Choose the exit node of an in-progress circuit based on
  33. pending AP connections.
  34. o Choose the exit node _first_, then beginning, then
  35. middle nodes.
  36. Short-term:
  37. - Make tls connections tls_close intentionally
  38. o Rename ACI to circID
  39. . integrate rep_ok functions, see what breaks
  40. - update tor faq
  41. o obey SocksBindAddress, ORBindAddress
  42. - warn if we're running as root
  43. o make connection_flush_buf() more obviously obsolete
  44. o let hup reread the config file, eg so we can get new exit
  45. policies without restarting
  46. o Put recommended_versions in a config entry
  47. - use times(2) rather than gettimeofday to measure how long it
  48. takes to process a cell
  49. o Separate trying to rebuild a circuit because you have none from trying
  50. to rebuild a circuit because the current one is stale
  51. X Continue reading from socks port even while waiting for connect.
  52. . Exit policies
  53. o Spec how to write the exit policies
  54. . Path selection algorithms
  55. o Choose path more incrementally
  56. - Let user request first/last node
  57. - And disallow certain nodes
  58. D Choose path by jurisdiction, etc?
  59. o Make relay end cells have failure status and payload attached
  60. X let non-approved routers handshake.
  61. - Dirserver shouldn't put you in running-routers list if you haven't
  62. uploaded a descriptor recently
  63. . migrate to using nickname rather than addr:port for routers
  64. o decide_aci_type
  65. - generate onion skins
  66. - circuit_send_next_onion_skin
  67. - circuit_extend
  68. - onion_generate_cpath
  69. - get_unique_aci_by_addr_port
  70. - circ->n_addr and circ->n_port
  71. - circuit_enumerate_by_naddr_nport
  72. - cpath layers
  73. - connection_or_connect
  74. - connection_exact_get_by_addr_port
  75. - connection_twin_get_by_addr_port
  76. - router_get_by_addr_port
  77. - connection_or_init_conn_from_router
  78. - tag_pack, tag_unpack, connection_cpu_process_inbuf
  79. - directory_initiate_command
  80. . Move from onions to ephemeral DH
  81. o incremental path building
  82. o transition circuit-level sendmes to hop-level sendmes
  83. o implement truncate, truncated
  84. o move from 192byte DH to 128byte DH, so it isn't so damn slow
  85. - exiting from not-last hop
  86. - OP logic to decide to extend/truncate a path
  87. - make sure exiting from the not-last hop works
  88. - logic to find last *open* hop, not last hop, in cpath
  89. o Remember address and port when beginning.
  90. - Extend by nickname/hostname/something, not by IP.
  91. - Need a relay teardown cell, separate from one-way ends.
  92. On-going
  93. . Better comments for functions!
  94. . Go through log messages, reduce confusing error messages.
  95. . make the logs include more info (fd, etc)
  96. . Unit tests
  97. Mid-term:
  98. - Are there anonymity issues with sequential streamIDs? Sequential
  99. circIDs? Eg an attacker can learn how many there have been.
  100. The fix is to initialize them randomly rather than at 1.
  101. - Look at having smallcells and largecells
  102. . Redo scheduler
  103. o fix SSL_read bug for buffered records
  104. - make round-robining more fair
  105. - What happens when a circuit's length is 1? What breaks?
  106. . streams / circuits
  107. o Implement streams
  108. o Rotate circuits after N minutes?
  109. X Circuits should expire when circuit->expire triggers
  110. NICK . Handle half-open connections
  111. o openssh is an application that uses half-open connections
  112. o Figure out what causes connections to close, standardize
  113. when we mark a connection vs when we tear it down
  114. o Look at what ssl does to keep from mutating data streams
  115. ARMA - Reduce streamid footprint from 7 bytes to 2 bytes
  116. - Check for collisions in streamid (now possible with
  117. just 2 bytes), and back up & replace with padding if so
  118. - Use the 3 saved bytes to put pseudorandomness in each relay cell
  119. - Use the 4 reserved bytes in each cell header to keep 1/5
  120. of a sha1 of the relay payload (move into stream header)
  121. - Move length into the stream header too
  122. - Spec the stream_id stuff. Clarify that nobody on the backward
  123. stream should look at stream_id.
  124. . Put CPU workers in separate processes
  125. o Handle multiple cpu workers (one for each cpu, plus one)
  126. o Queue for pending tasks if all workers full
  127. o Support the 'process this onion' task
  128. D Merge dnsworkers and cpuworkers to some extent
  129. - Handle cpuworkers dying
  130. . Scrubbing proxies
  131. - Find an smtp proxy?
  132. - Check the old smtp proxy code
  133. o Find an ftp proxy? wget --passive
  134. D Wait until there are packet redirectors for Linux
  135. . Get socks4a support into Mozilla
  136. . Develop rendezvous points
  137. SPEC!! - Handle socks commands other than connect, eg, bind?
  138. o Design
  139. - Spec
  140. - Implement
  141. - Tests
  142. o Testing harness/infrastructure
  143. D System tests (how?)
  144. - Performance tests, so we know when we've improved
  145. . webload infrastructure (Bruce)
  146. . httperf infrastructure (easy to set up)
  147. . oprofile (installed in RH >8.0)
  148. NICK . Daemonize and package
  149. o Teach it to fork and background
  150. - Red Hat spec file
  151. - Debian spec file equivalent
  152. . Portability
  153. . Which .h files are we actually using?
  154. . Port to:
  155. o Linux
  156. o BSD
  157. . Solaris
  158. o Cygwin
  159. . Win32
  160. o OS X
  161. - deal with pollhup / reached_eof on all platforms
  162. o openssl randomness
  163. o inet_ntoa
  164. . stdint.h
  165. - Make a script to set up a local network on your machine
  166. - More flexibility in node addressing
  167. D Support IPv6 rather than just 4
  168. - Handle multihomed servers (config variable to set IP)
  169. In the distant future:
  170. D Load balancing between router twins
  171. D Keep track of load over links/nodes, to
  172. know who's hosed
  173. SPEC!! D Non-clique topologies
  174. D Implement our own memory management, at least for common structs
  175. (Not ever necessary?)
  176. D Advanced directory servers
  177. D Automated reputation management
  178. SPEC!! D Figure out how to do threshold directory servers
  179. D jurisdiction info in dirserver entries? other info?
  180. Older (done) todo stuff:
  181. o Get tor to act like a socks server
  182. o socks4, socks4a
  183. o socks5
  184. o routers have identity key, link key, onion key.
  185. o link key certs are
  186. D signed by identity key
  187. D not in descriptor
  188. o not in config
  189. D not on disk
  190. o identity and onion keys are in descriptor (and disk)
  191. o upon boot, if it doesn't find identity key, generate it and write it.
  192. o also write a file with the identity key fingerprint in it
  193. o router generates descriptor: flesh out router_get_my_descriptor()
  194. o Routers sign descriptors with identity key
  195. o routers put version number in descriptor
  196. o routers should maybe have `uname -a` in descriptor?
  197. o Give nicknames to routers
  198. o in config
  199. o in descriptors
  200. o router posts descriptor
  201. o when it boots
  202. o every DirFetchPostPeriod seconds
  203. D when it changes
  204. o change tls stuff so certs don't get written to disk, or read from disk
  205. o make directory.c 'thread'safe
  206. o dirserver parses descriptor
  207. o dirserver checks signature
  208. D client checks signature?
  209. o dirserver writes directory to file
  210. o reads that file upon boot
  211. o directory includes all routers, up and down
  212. o add "up" line to directory, listing nicknames
  213. o instruments ORs to report stats
  214. o average cell fullness
  215. o average bandwidth used
  216. o configure log files. separate log file, separate severities.
  217. o what assumptions break if we fclose(0) when we daemonize?
  218. o make buffer struct elements opaque outside buffers.c
  219. o add log convention to the HACKING file
  220. o make 'make install' do the right thing
  221. o change binary name to tor
  222. o change config files so you look at commandline, else look in
  223. /etc/torrc. no cascading.
  224. o have an absolute datadir with fixed names for files, and fixed-name
  225. keydir under that with fixed names
  226. o Move (most of) the router/directory code out of main.c
  227. o Simple directory servers
  228. o Include key in source; sign directories
  229. o Signed directory backend
  230. o Document
  231. o Integrate
  232. o Add versions to code
  233. o Have directories list recommended-versions
  234. o Include line in directories
  235. o Check for presence of line.
  236. o Quit if running the wrong version
  237. o Command-line option to override quit
  238. o Add more information to directory server entries
  239. o Exit policies
  240. o Clearer bandwidth management
  241. o Do we want to remove bandwidth from OR handshakes?
  242. o What about OP handshakes?
  243. X Move away from openssl
  244. o Abstract out crypto calls
  245. X Look at nss, others? Just include code?
  246. o Use a stronger cipher
  247. o aes now, by including the code ourselves
  248. X On the fly compression of each stream
  249. o Clean up the event loop (optimize and sanitize)
  250. o Remove that awful concept of 'roles'
  251. o Terminology
  252. o Circuits, topics, cells stay named that
  253. o 'Connection' gets divided, or renamed, or something?
  254. o DNS farm
  255. o Distribute queries onto the farm, get answers
  256. o Preemptively grow a new worker before he's needed
  257. o Prune workers when too many are idle
  258. o DNS cache
  259. o Clear DNS cache over time
  260. D Honor DNS TTL info (how??)
  261. o Have strategy when all workers are busy
  262. o Keep track of which connections are in dns_wait
  263. o Need to cache positives/negatives on the tor side
  264. o Keep track of which queries have been asked
  265. o Better error handling when
  266. o An address doesn't resolve
  267. o We have max workers running
  268. o Consider taking the master out of the loop?
  269. X Implement reply onions
  270. o Total rate limiting
  271. o Look at OR handshake in more detail
  272. o Spec it
  273. o Merge OR and OP handshakes
  274. o rearrange connection_or so it doesn't suck so much to read
  275. D Periodic link key rotation. Spec?
  276. o wrap malloc with something that explodes when it fails
  277. o Clean up the number of places that get to look at prkey