dir-spec.txt 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. $Id$
  2. Tor directory protocol for 0.1.1.x series
  3. 0. Scope and preliminaries
  4. This document should eventually be merged into tor-spec.txt and replace
  5. the existing notes on directories.
  6. This is not a finalized version; what we actually wind up implementing
  7. may be very different from the system described here.
  8. 0.1. Goals
  9. There are several problems with the way Tor handles directories right
  10. now:
  11. 1. Directories are very large and use a lot of bandwidth.
  12. 2. Every directory server is a single point of failure.
  13. 3. Requiring every client to know every server won't scale.
  14. 4. Requiring every directory cache to know every server won't scale.
  15. 5. Our current "verified server" system is kind of nonsensical.
  16. 6. Getting more directory servers adds more points of failure and
  17. worsens possible partitioning attacks.
  18. This design tries to solve every problem except problems 3 and 4, and to
  19. be compatible with likely eventual solutions to problems 3 and 4.
  20. 1. Outline
  21. There is no longer any such thing as a "signed directory". Instead,
  22. directory servers sign a very compressed 'network status' object that
  23. lists the current descriptors and their status, and router descriptors
  24. continue to be self-signed by servers. Clients download network status
  25. listings periodically, and download router descriptors as needed. ORs
  26. upload descriptors relatively infrequently.
  27. There are multiple directory servers. Rather than doing anything
  28. complicated to coordinate themselves, clients simply rotate through them
  29. in order, and only use servers that most of the last several directory
  30. servers like.
  31. 2. Router descriptors
  32. Router descriptors are as described in the current tor-spec.txt
  33. document.
  34. ORs SHOULD generate a new router descriptor whenever any of the
  35. following events have occurred:
  36. - A period of time (24 hrs by default) has passed since the last
  37. time a descriptor was generated.
  38. - A descriptor field other than bandwidth or uptime has changed.
  39. - Bandwidth has changed by more than +/- 50% from the last time a
  40. descriptor was generated, and at least a given interval of time (1
  41. hr by default) has passed since then.
  42. - Uptime has been reset.
  43. After generating a descriptor, ORs upload it to every directory
  44. server they know.
  45. The router descriptor format is unchanged from tor-spec.txt.
  46. 3. Network status
  47. Directory servers generate, sign, and compress a network-status document
  48. as needed. As an optimization, they may rate-limit the number of such
  49. documents generated to once every few seconds. Directory servers should
  50. rate-limit at least to the point where these documents are generated no
  51. faster than once per second.
  52. The network status document contains a preamble, a set of router status
  53. entries, and a signature, in that order.
  54. We use the same meta-format as used for directories and router descriptors
  55. in "tor-spec.txt".
  56. The preamble contains:
  57. "network-status-version" -- A document format version. For this
  58. specification, the version is "2".
  59. "dir-source" -- The hostname, current IP address, and directory
  60. port of the directory server, separated by spaces.
  61. "fingerprint" -- A base16-encoded hash of the signing key's
  62. fingerprint, with no additional spaces added.
  63. "contact" -- An arbitrary string describing how to contact the
  64. directory server's administrator. Administrators should include at
  65. least an email address and a PGP fingerprint.
  66. "dir-signing-key" -- The directory server's public signing key.
  67. "client-versions" -- A comma-separated list of recommended client versions
  68. "server-versions" -- A comma-separated list of recommended server versions
  69. "published" -- The publication time for this network-status object.
  70. "dir-options" -- A set of flags separated by spaces:
  71. "Names" if this directory server performs name bindings
  72. The directory-options entry is optional; the others are required and must
  73. appear exactly once. The "network-status-version" entry must appear first;
  74. the others may appear in any order.
  75. For each router, the router entry contains: (This format is designed for
  76. conciseness.)
  77. "r" -- followed by the following elements, separated by spaces:
  78. - The OR's nickname,
  79. - A hash of its identity key, encoded in base64, with trailing =
  80. signs removed.
  81. - A hash of its most recent descriptor, encoded in base64, with
  82. trailing = signs removed.
  83. - The publication time of its most recent descriptor.
  84. - An IP
  85. - An OR port
  86. - A directory port (or "0" for none")
  87. "s" -- A series of space-separated status flags:
  88. "Exit" if the router is useful for building general-purpose exit
  89. circuits
  90. "Stable" if the router tends to stay up for a long time
  91. "Fast" if the router has high bandwidth
  92. "Running" if the router is currently usable
  93. "Named" if the router's identity-nickname mapping is canonical.
  94. "Valid" if the router has been 'validated'.
  95. The "r" entry for each router must appear first and is required. The
  96. 's" entry is optional. Unrecognized flags, or extra elements on the
  97. "r" line must be ignored.
  98. The signature section contains:
  99. "directory-signature". A signature of the rest of the document using
  100. the directory server's signing key.
  101. We compress the network status list with zlib before transmitting it.
  102. 4. Directory server operation
  103. By default, directory servers remember all non-expired, non-superseded OR
  104. descriptors that they have seen.
  105. For each OR, a directory server remembers whether the OR was running and
  106. functional the last time they tried to connect to it, and possibly other
  107. liveness information.
  108. Directory server administrators may label some servers or IPs as
  109. blacklisted, and elect not to include them in their network-status lists.
  110. Thus, the network-status list includes all non-blacklisted,
  111. non-expired, non-superseded descriptors for ORs that the directory has
  112. observed at least once to be running.
  113. Directory server administrators may decide to support name binding. If
  114. they do, then they must maintain a file of nickname-to-identity-key
  115. mappings, and try to keep this file consistent with other directory
  116. servers. If they don't, they act as clients, and report bindings made by
  117. other directory servers (name X is bound to identity Y if at least one
  118. binding directory lists it, and no directory binds X to some other Y'.)
  119. The authoritative network-status published by a host should be available at:
  120. http://<hostname>/tor/status/authority.z
  121. An authoritative network-status published by another host with fingerprint
  122. <F> should be available at:
  123. http://<hostname>/tor/status/fp/<F>.z
  124. An authoritative network-status published by other hosts with fingerprints
  125. <F1>,<F2>,<F3> should be available at:
  126. http://<hostname>/tor/status/fp/<F1>+<F2>+<F3>.z
  127. The most recent network-status documents from all known authoritative
  128. directories, concatenated, should be available at:
  129. http://<hostname>/tor/status/all.z
  130. The most recent descriptor for a server whose identity key has a
  131. fingerprint of <F> should be available at:
  132. http://<hostname>/tor/server/fp/<F>.z
  133. The most recent descriptors for servers have fingerprints <F1>,<F2>,<F3>
  134. should be available at:
  135. http://<hostname>/tor/server/fp/<F1>+<F2>+<F3>.z
  136. The most recent descriptor for this server should be at:
  137. http://<hostname>/tor/server/authority.z
  138. A concatenated set of the most recent descriptors for all known servers
  139. should be available at:
  140. http://<hostname>/tor/server/all.z
  141. For debugging, directories MAY expose non-compressed objects at URLs like
  142. the above, but without the final ".z".
  143. Clients MUST handle compressed concatenated information in two forms:
  144. - A concatenated list of zlib-compressed objects.
  145. - A zlib-compressed concatenated list of objects.
  146. Directory servers MAY generate either format: the former requires less
  147. CPU, but the latter requires less bandwidth.
  148. 4.1. Caching
  149. Directory caches (most ORs) regularly download network status documents,
  150. and republish them at a URL based on the directory server's identity key:
  151. http://<hostname>/tor/status/<identity fingerprint>.z
  152. A concatenated list of all network-status documents should be available at:
  153. http://<hostname>/tor/status/all.z
  154. 4.2. Compression
  155. 5. Client operation
  156. Every OP or OR, including directory servers, acts as a client to the
  157. directory protocol.
  158. Each client maintains a list of trusted directory servers. Periodically
  159. (currently every 20 minutes), the client downloads a new network status. It
  160. chooses the directory server from which its current information is most
  161. out-of-date, and retries on failure until it finds a running server.
  162. When choosing ORs to build circuits, clients proceed as follows:
  163. - A server is "listed" if it is listed by more than half of the "live"
  164. network status documents the clients have downloaded. (A network
  165. status is "live" if it is the most recently downloaded network status
  166. document for a given directory server, and the server is a directory
  167. server trusted by the client, and the network-status document is no
  168. more than D (say, 10) days old.)
  169. - A server is "valid" is it is listed as valid by more than half of the
  170. "live" downloaded" network-status document.
  171. - A server is "running" if it is listed as running by more than
  172. half of the "recent" downloaded network-status documents.
  173. (A network status is "recent" if it was published in the last
  174. 60 minutes. If there are fewer than 3 such documents, the most
  175. recently published 3 are "recent." If there are fewer than 3 in all,
  176. all are "recent.")
  177. Clients store network status documents so long as they are live.
  178. 5.1. Scheduling network status downloads
  179. This download scheduling algorithm implements the approach described above
  180. in a relatively low-state fashion. It reflects the current Tor
  181. implementation.
  182. Clients maintain a list of authorities; each client tries to keep the same
  183. list, in the same order.
  184. Periodically, on startup, and on HUP, clients check whether they need to
  185. download fresh network status documents. The approach is as follows:
  186. - If we have under X network status documents newer than OLD, we choose a
  187. member of the list at random and try download XX documents starting
  188. with that member's.
  189. - Otherwise, if we have no network status documents newer than NEW, we
  190. check to see which authority's document we retrieved most recently,
  191. and try to retrieve the next authority's document. If we can't, we
  192. try the next authority in sequence, and so on.
  193. 5.2. Managing naming
  194. In order to provide human-memorable names for individual server
  195. identities, some directory servers bind names to IDs. Clients handle
  196. names in two ways:
  197. If a client is encountering a name it has not mapped before:
  198. If all the "binding" networks-status documents the client has so far
  199. received same claim that the name binds to some identity X, and the
  200. client has received at least three network-status documents, the client
  201. maps the name to X.
  202. If a client is encountering a name it has mapped before:
  203. It uses the last-mapped identity value, unless all of the "binding"
  204. network status documents bind the name to some other identity.
  205. 6. Remaining issues
  206. Client-knowledge partitioning is worrisome. Most versions of this don't
  207. seem to be worse than the Danezis-Murdoch tracing attack, since an
  208. attacker can't do more than deduce probable exits from entries (or vice
  209. versa). But what about when the client connects to A and B but in a
  210. different order? How bad can it be partitioned based on its knowledge?
  211. ================================================================================
  212. Everything below this line is obsolete.
  213. --------------------------------------------------------------------------------
  214. Tor network discovery protocol
  215. 0. Scope
  216. This document proposes a way of doing more distributed network discovery
  217. while maintaining some amount of admission control. We don't recommend
  218. you implement this as-is; it needs more discussion.
  219. Terminology:
  220. - Client: The Tor component that chooses paths.
  221. - Server: A relay node that passes traffic along.
  222. 1. Goals.
  223. We want more decentralized discovery for network topology and status.
  224. In particular:
  225. 1a. We want to let clients learn about new servers from anywhere
  226. and build circuits through them if they wish. This means that
  227. Tor nodes need to be able to Extend to nodes they don't already
  228. know about.
  229. 1b. We want to let servers limit the addresses and ports they're
  230. willing to extend to. This is necessary e.g. for middleman nodes
  231. who have jerks trying to extend from them to badmafia.com:80 all
  232. day long and it's drawing attention.
  233. 1b'. While we're at it, we also want to handle servers that *can't*
  234. extend to some addresses/ports, e.g. because they're behind NAT or
  235. otherwise firewalled. (See section 5 below.)
  236. 1c. We want to provide a robust (available) and not-too-centralized
  237. mechanism for tracking network status (which nodes are up and working)
  238. and admission (which nodes are "recommended" for certain uses).
  239. 2. Assumptions.
  240. 2a. People get the code from us, and they trust us (or our gpg keys, or
  241. something down the trust chain that's equivalent).
  242. 2b. Even if the software allows humans to change the client configuration,
  243. most of them will use the default that's provided. so we should
  244. provide one that is the right balance of robust and safe. That is,
  245. we need to hard-code enough "first introduction" locations that new
  246. clients will always have an available way to get connected.
  247. 2c. Assume that the current "ask them to email us and see if it seems
  248. suspiciously related to previous emails" approach will not catch
  249. the strong Sybil attackers. Therefore, assume the Sybil attackers
  250. we do want to defend against can produce only a limited number of
  251. not-obviously-on-the-same-subnet nodes.
  252. 2d. Roger has only a limited amount of time for approving nodes; shouldn't
  253. be the time bottleneck anyway; and is doing a poor job at keeping
  254. out some adversaries.
  255. 2e. Some people would be willing to offer servers but will be put off
  256. by the need to send us mail and identify themselves.
  257. 2e'. Some evil people will avoid doing evil things based on the perception
  258. (however true or false) that there are humans monitoring the network
  259. and discouraging evil behavior.
  260. 2e''. Some people will trust the network, and the code, more if they
  261. have the perception that there are trustworthy humans guiding the
  262. deployed network.
  263. 2f. We can trust servers to accurately report their characteristics
  264. (uptime, capacity, exit policies, etc), as long as we have some
  265. mechanism for notifying clients when we notice that they're lying.
  266. 2g. There exists a "main" core Internet in which most locations can access
  267. most locations. We'll focus on it (first).
  268. 3. Some notes on how to achieve.
  269. Piece one: (required)
  270. We ship with N (e.g. 20) directory server locations and fingerprints.
  271. Directory servers serve signed network-status pages, listing their
  272. opinions of network status and which routers are good (see 4a below).
  273. Dirservers collect and provide server descriptors as well. These don't
  274. need to be signed by the dirservers, since they're self-certifying
  275. and timestamped.
  276. (In theory the dirservers don't need to be the ones serving the
  277. descriptors, but in practice the dirservers would need to point people
  278. at the place that does, so for simplicity let's assume that they do.)
  279. Clients then get network-status pages from a threshold of dirservers,
  280. fetch enough of the corresponding server descriptors to make them happy,
  281. and proceed as now.
  282. Piece two: (optional)
  283. We ship with S (e.g. 3) seed keys (trust anchors), and ship with
  284. signed timestamped certs for each dirserver. Dirservers also serve a
  285. list of certs, maybe including a "publish all certs since time foo"
  286. functionality. If at least two seeds agree about something, then it
  287. is so.
  288. Now dirservers can be added, and revoked, without requiring users to
  289. upgrade to a new version. If we only ship with dirserver locations
  290. and not fingerprints, it also means that dirservers can rotate their
  291. signing keys transparently.
  292. But, keeping track of the seed keys becomes a critical security issue.
  293. And rotating them in a backward-compatible way adds complexity. Also,
  294. dirserver locations must be at least somewhere static, since each lost
  295. dirserver degrades reachability for old clients. So as the dirserver
  296. list rolls over we have no choice but to put out new versions.
  297. Piece three: (optional)
  298. Notice that this doesn't preclude other approaches to discovering
  299. different concurrent Tor networks. For example, a Tor network inside
  300. China could ship Tor with a different torrc and poof, they're using
  301. a different set of dirservers. Some smarter clients could be made to
  302. learn about both networks, and be told which nodes bridge the networks.
  303. ...
  304. 4. Unresolved issues.
  305. 4a. How do the dirservers decide whether to recommend a server? We
  306. could have them do it based on contact from the human, but by
  307. assumptions 2c and 2d above, that's going to be less effective, and
  308. more of a hassle, as we scale up. Thus I propose that they simply
  309. do some basic automatic measuring themselves, starting with the
  310. current "are they connected to me" measurement, and that's all
  311. that is done.
  312. We could blacklist as we notice evil servers, but then we're in
  313. the same boat all the irc networks are in. We could whitelist as we
  314. notice new servers, and stop whitelisting (maybe rolling back a bit)
  315. once an attack is in progress. If we assume humans aren't particularly
  316. good at this anyway, we could just do automated delayed whitelisting,
  317. and have a "you're under attack" switch the human can enable for a
  318. while to start acting more conservatively.
  319. Once upon a time we collected contact info for servers, which was
  320. mainly used to remind people that their servers are down and could
  321. they please restart. Now that we have a critical mass of servers,
  322. I've stopped doing that reminding. So contact info is less important.
  323. 4b. What do we do about recommended-versions? Do we need a threshold of
  324. dirservers to claim that your version is obsolete before you believe
  325. them? Or do we make it have less effect -- e.g. print a warning but
  326. never actually quit? Coordinating all the humans to upgrade their
  327. recommended-version strings at once seems bad. Maybe if we have
  328. seeds, the seeds can sign a recommended-version and upload it to
  329. the dirservers.
  330. 4c. What does it mean to bind a nickname to a key? What if each dirserver
  331. does it differently, so one nickname corresponds to several keys?
  332. Maybe the solution is that nickname<=>key bindings should be
  333. individually configured by clients in their torrc (if they want to
  334. refer to nicknames in their torrc), and we stop thinking of nicknames
  335. as globally unique.
  336. 4d. What new features need to be added to server descriptors so they
  337. remain compact yet support new functionality? Section 5 is a start
  338. of discussion of one answer to this.
  339. 5. Regarding "Blossom: an unstructured overlay network for end-to-end
  340. connectivity."
  341. SECTION 5A: Blossom Architecture
  342. Define "transport domain" as a set of nodes who can all mutually name each
  343. other directly, using transport-layer (e.g. HOST:PORT) naming.
  344. Define "clique" as a set of nodes who can all mutually contact each other directly,
  345. using transport-layer (e.g. HOST:PORT) naming.
  346. Neither transport domains and cliques form a partition of the set of all nodes.
  347. Just as cliques may overlap in theoretical graphs, transport domains and
  348. cliques may overlap in the context of Blossom.
  349. In this section we address possible solutions to the problem of how to allow
  350. Tor routers in different transport domains to communicate.
  351. First, we presume that for every interface between transport domains A and B,
  352. one Tor router T_A exists in transport domain A, one Tor router T_B exists in
  353. transport domain B, and (without loss of generality) T_A can open a persistent
  354. connection to T_B. Any Tor traffic between the two routers will occur over
  355. this connection, which effectively renders the routers equal partners in
  356. bridging between the two transport domains. We refer to the established link
  357. between two transport domains as a "bridge" (we use this term because there is
  358. no serious possibility of confusion with the notion of a layer 2 bridge).
  359. Next, suppose that the universe consists of transport domains connected by
  360. persistent connections in this manner. An individual router can open multiple
  361. connections to routers within the same foreign transport domain, and it can
  362. establish separate connections to routers within multiple foreign transport
  363. domains.
  364. As in regular Tor, each Blossom router pushes its descriptor to directory
  365. servers. These directory servers can be within the same transport domain, but
  366. they need not be. The trick is that if a directory server is in another
  367. transport domain, then that directory server must know through which Tor
  368. routers to send messages destined for the Tor router in question.
  369. Blossom routers can advertise themselves to other transport domains in two
  370. ways:
  371. (1) Directly push the descriptor to a directory server in the other transport
  372. domain. This probably works particularly well if the other transport domain is
  373. "the Internet", or if there are hard-coded directory servers in "the Internet".
  374. The router has the responsibility to inform the directory server about which
  375. routers can be used to reach it.
  376. (2) Push the descriptor to a directory server in the same transport domain.
  377. This is the easiest solution for the router, but it relies upon the existence
  378. of a directory server in the same transport domain that is capable of
  379. communicating with directory servers in the remote transport domain. In order
  380. for this to work, some individual Tor routers must have published their
  381. descriptors in remote transport domains (i.e. followed the first option) in
  382. order to provide a link by which directory servers can communiate
  383. bidirectionally.
  384. If all directory servers are within the same transport domain, then approach
  385. (1) is sufficient: routers can exist within multiple transport domains, and as
  386. long as the network of transport domains is fully connected by bridges, any
  387. router will be able to access any other router in a foreign transport domain
  388. simply by extending along the path specified by the directory server. However,
  389. we want the system to be truly decentralized, which means not electing any
  390. particular transport domain to be the master domain in which entries are
  391. published.
  392. This is the explanation for (2): in order for a directory server to share
  393. information with a directory server in a foreign transport domain to which it
  394. cannot speak directly, it must use Tor, which means referring to the other
  395. directory server by using a router in the foreign transport domain. However,
  396. in order to use Tor, it must be able to reach that router, which means that a
  397. descriptor for that router must exist in its table, along with a means of
  398. reaching it. Therefore, in order for a mutual exchange of information between
  399. routers in transport domain A and those in transport domain B to be possible,
  400. when routers in transport domain A cannot establish direct connections with
  401. routers in transport domain B, then some router in transport domain B must have
  402. pushed its descriptor to a directory server in transport domain A, so that the
  403. directory server in transport domain A can use that router to reach the
  404. directory server in transport domain B.
  405. Descriptors for Blossom routers are read-only, as for regular Tor routers, so
  406. directory servers cannot modify them. However, Tor directory servers also
  407. publish a "network-status" page that provide information about which nodes are
  408. up and which are not. Directory servers could provide an additional field for
  409. Blossom nodes. For each Blossom node, the directory server specifies a set of
  410. paths (may be only one) through the overlay (i.e. an ordered list of router
  411. names/IDs) to a router in a foreign transport domain. (This field may be a set
  412. of paths rather than a single path.)
  413. A new router publishing to a directory server in a foreign transport should
  414. include a list of routers. This list should be either:
  415. a. ...a list of routers to which the router has persistent connections, or, if
  416. the new router does not have any persistent connections,
  417. b. ...a (not necessarily exhaustive) list of fellow routers that are in the
  418. same transport domain.
  419. The directory server will be able to use this information to derive a path to
  420. the new router, as follows. If the new router used approach (a), then the
  421. directory server will define the set of paths to the new router as union of the
  422. set of paths to the routers on the list with the name of the last hop appended
  423. to each path. If the new router used approach (b), then the directory server
  424. will define the paths to the new router as the union of the set of paths to the
  425. routers specified in the list. The directory server will then insert the newly
  426. defined path into the field in the network-status page from the router.
  427. When confronted with the choice of multiple different paths to reach the same
  428. router, the Blossom nodes may use a route selection protocol similar in design
  429. to that used by BGP (may be a simple distance-vector route selection procedure
  430. that only takes into account path length, or may be more complex to avoid
  431. loops, cache results, etc.) in order to choose the best one.
  432. If a .exit name is not provided, then a path will be chosen whose nodes are all
  433. among the set of nodes provided by the directory server that are believed to be
  434. in the same transport domain (i.e. no explicit path). Thus, there should be no
  435. surprises to the client. All routers should be careful to define their exit
  436. policies carefully, with the knowledge that clients from potentially any
  437. transport domain could access that which is not explicitly restricted.
  438. SECTION 5B: Tor+Blossom desiderata
  439. The interests of Blossom would be best served by implementing the following
  440. modifications to Tor:
  441. I. CLIENTS
  442. Objectives: Ultimately, we want Blossom requests to be indistinguishable in
  443. format from non-Blossom .exit requests, i.e. hostname.forwarder.exit.
  444. Proposal: Blossom is a process that manipulates Tor, so it should be
  445. implemented as a Tor Control, extending control-spec.txt. For each request,
  446. Tor uses the control protocol to ask the Blossom process whether it (the
  447. Blossom process) wants to build or assign a particular circuit to service the
  448. request. Blossom chooses one of the following responses:
  449. a. (Blossom exit node, circuit cached) "use this circuit" -- provides a circuit
  450. ID
  451. b. (Blossom exit node, circuit not cached) "I will build one" -- provides a
  452. list of routers, gets a circuit ID.
  453. c. (Regular (non-Blossom) exit node) "No, do it yourself" -- provides nothing.
  454. II. ROUTERS
  455. Objectives: Blossom routers are like regular Tor routers, except that Blossom
  456. routers need these features as well:
  457. a. the ability to open peresistent connections,
  458. b. the ability to know whwther they should use a persistent connection to reach
  459. another router,
  460. c. the ability to define a set of routers to which to establish persistent
  461. connections, as readable from a configuration file, and
  462. d. the ability to tell a directory server that (1) it is Blossom-enabled, and
  463. (2) it can be reached by some set of routers to which it explicitly establishes
  464. persistent connections.
  465. Proposal: Address the aforementioned points as follows.
  466. a. need the ability to open a specified number of persistent connections. This
  467. can be accomplished by implementing a generic should_i_close_this_conn() and
  468. which_conns_should_i_try_to_open_even_when_i_dont_need_them().
  469. b. The Tor design already supports this, but we must be sure to establish the
  470. persistent connections explicitly, re-establish them when they are lost, and
  471. not close them unnecessarily.
  472. c. We must modify Tor to add a new configuration option, allowing either (a)
  473. explicit specification of the set of routers to which to establish persistent
  474. connections, or (b) a random choice of some nodes to which to establish
  475. persistent connections, chosen from the set of nodes local to the transport
  476. domain of the specified directory server (for example).
  477. III. DIRSERVERS
  478. Objective: Blossom directory servers may provide extra
  479. fields in their network-status pages. Blossom directory servers may
  480. communicate with Blossom clients/routers in nonstandard ways in addition to
  481. standard ways.
  482. Proposal: Geoff should be able to implement a directory server according to the
  483. Tor specification (dir-spec.txt).