| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | Filename: 104-short-descriptors.txtTitle: Long and Short Router DescriptorsVersion: $Revision$Last-Modified: $Date$Author: Nick MathewsonCreated:Status: ClosedImplemented-In: 0.2.0.xOverview:  This document proposes moving unused-by-clients information from regular  router descriptors into a new "extra info" router descriptor.Proposal:  Some of the costliest fields in the current directory protocol are ones  that no client actually uses.  In particular, the "read-history" and  "write-history" fields are used only by the authorities for monitoring the  status of the network.  If we took them out, the size of a compressed list  of all the routers would fall by about 60%.  (No other disposable field  would save much more than 2%.)  We propose to remove these fields from descriptors, and and have them  uploaded as a part of a separate signed "extra info" to the authorities.  This document will be signed.  A hash of this document will be included in  the regular descriptors.  (We considered another design, where routers would generate and upload a  short-form and a long-form descriptor.  Only the short-form descriptor would  ever be used by anybody for routing.  The long-form descriptor would be  used only for analytics and other tools.   We decided against this because  well-behaved tools would need to download short-form descriptors too (as  these would be the only ones indexed), and hence get redundant info. Badly  behaved tools would download only long-form descriptors, and expose  themselves to partitioning attacks.)Other disposable fields:  Clients don't need these fields, but removing them doesn't help bandwidth  enough to be worthwhile.    contact (save about 1%)    fingerprint (save about 3%)  We could represent these fields more succinctly, but removing them would  only save 1%.  (!)    reject    accept  (Apparently, exit polices are highly compressible.)  [Does size-on-disk matter to anybody? Some clients and servers don't   have much disk, or have really slow disk (e.g. USB). And we don't   store caches compressed right now. -RD]Specification:  1. Extra Info Format.    An "extra info" descriptor contains the following fields:    "extra-info" Nickname Fingerprint        Identifies what router this is an extra info descriptor for.        Fingerprint is encoded in hex (using upper-case letters), with        no spaces.    "published" As currently documented in dir-spec.txt.  It MUST match the        "published" field of the descriptor published at the same time.    "read-history"    "write-history"        As currently documented in dir-spec.txt.  Optional.    "router-signature" NL Signature NL        A signature of the PKCS1-padded hash of the entire extra info        document, taken from the beginning of the "extra-info" line, through        the newline after the "router-signature" line.  An extra info        document is not valid unless the signature is performed with the        identity key whose digest matches FINGERPRINT.    The "extra-info" field is required and MUST appear first.  The    router-signature field is required and MUST appear last.  All others are    optional.  As for other documents, unrecognized fields must be ignored.  2. Existing formats     Implementations that use "read-history" and "write-history" SHOULD     continue accepting router descriptors that contain them.  (Prior to     0.2.0.x, this information was encoded in ordinary router descriptors;     in any case they have always been listed as opt, so they should be     accepted anyway.)     Add these fields to router descriptors:       "extra-info-digest" Digest          "Digest" is a hex-encoded digest (using upper-case characters)          of the router's extra-info document, as signed in the router's          extra-info.  (If this field is absent, no extra-info-digest          exists.)       "caches-extra-info"          Present if this router is a directory cache that provides          extra-info documents, or an authority that handles extra-info          documents.     (Since implementations before 0.1.2.5-alpha required that the "opt"     keyword precede any unrecognized entry, these keys MUST be preceded     with "opt" until 0.1.2.5-alpha is obsolete.)  3. New communications rules     Servers SHOULD generate and upload one extra-info document after each     descriptor they generate and upload; no more, no less.  Servers MUST     upload the new descriptor before they upload the new extra-info.     Authorities receiving an extra-info document SHOULD verify all of the     following:       * They have a router descriptor for some server with a matching         nickname and identity fingerprint.       * That server's identity key has been used to sign the extra-info         document.       * The extra-info-digest field in the router descriptor matches         the digest of the extra-info document.       * The published fields in the two documents match.     Authorities SHOULD drop extra-info documents that do not meet these     criteria.     Extra-info documents MAY be uploaded as part of the same HTTP post as     the router descriptor, or separately.  Authorities MUST accept both     methods.     Authorities SHOULD try to fetch extra-info documents from one another if     they do not have one matching the digest declared in a router     descriptor.     Caches that are running locally with a tool that needs to use extra-info     documents MAY download and store extra-info documents.  They should do     so when they notice that the recommended descriptor has an     extra-info-digest not matching any extra-info document they currently     have.  (Caches not running on a host that needs to use extra-info     documents SHOULD NOT download or cache them.)  4. New URLs     http://<hostname>/tor/extra/d/...     http://<hostname>/tor/extra/fp/...     http://<hostname>/tor/extra/all[.z]        (As for /tor/server/ URLs: supports fetching extra-info documents        by their digest, by the fingerprint of their servers, or all        at once. When serving by fingerprint, we serve the extra-info        that corresponds to the descriptor we would serve by that        fingerprint. Only directory authorities are guaranteed to support        these URLs.)     http://<hostname>/tor/extra/authority[.z]        (The extra-info document for this router.)     Extra-info documents are uploaded to the same URLs as regular     router descriptors.Migration:  For extra info approach:     * First:       * Authorities should accept extra info, and support serving it.       * Routers should upload extra info once authorities accept it.       * Caches should support an option to download and cache it, once         authorities serve it.       * Tools should be updated to use locally cached information.         These tools include:           lefkada's exit.py script.           tor26's noreply script and general directory cache.           https://nighteffect.us/tns/ for its graphs           and check with or-talk for the rest, once it's time.     * Set a cutoff time for including bandwidth in router descriptors, so       that tools that use bandwidth info know that they will need to fetch       extra info documents.     * Once tools that want bandwidth info support fetching extra info:       * Have routers stop including bandwidth info in their router         descriptors.
 |