[tor-commits] [torspec/master] 264: Putting version numbers on the Tor subprotocols

nickm at torproject.org nickm at torproject.org
Wed Jan 6 23:13:47 UTC 2016


commit 10771f66534d7db55001bcd43fde8fc7b9d033ca
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Jan 6 15:13:41 2016 -0800

    264: Putting version numbers on the Tor subprotocols
---
 proposals/000-index.txt                |    2 +
 proposals/264-subprotocol-versions.txt |  510 ++++++++++++++++++++++++++++++++
 2 files changed, 512 insertions(+)

diff --git a/proposals/000-index.txt b/proposals/000-index.txt
index 8da27da..7979244 100644
--- a/proposals/000-index.txt
+++ b/proposals/000-index.txt
@@ -184,6 +184,7 @@ Proposals by number:
 261  AEZ for relay cryptography [OPEN]
 262  Re-keying live circuits with new cryptographic material [OPEN]
 263  Request to change key exchange protocol for handshake [OPEN]
+264  Putting version numbers on the Tor subprotocols [OPEN]
 
 
 Proposals by status:
@@ -240,6 +241,7 @@ Proposals by status:
    261  AEZ for relay cryptography
    262  Re-keying live circuits with new cryptographic material
    263  Request to change key exchange protocol for handshake
+   264  Putting version numbers on the Tor subprotocols
  ACCEPTED:
    140  Provide diffs between consensuses
    172  GETINFO controller option for circuit information
diff --git a/proposals/264-subprotocol-versions.txt b/proposals/264-subprotocol-versions.txt
new file mode 100644
index 0000000..d0626f0
--- /dev/null
+++ b/proposals/264-subprotocol-versions.txt
@@ -0,0 +1,510 @@
+Filename: 264-subprotocol-versions.txt
+Title: Putting version numbers on the Tor subprotocols
+Author: Nick Mathewson
+Created: 6 Jan 2016
+Status: Open
+
+
+1. Introduction
+
+   At various points in Tor's history, we've needed to migrate from one
+   protocol to another.  In the past, we've mostly done this by allowing
+   relays to advertise support for various features.  We've done this in
+   an ad-hoc way, though. In some cases, we've done it entirely based on
+   the relays' advertised Tor version.
+
+   That's a pattern we shouldn't continue.  We'd like to support more
+   live Tor relay implementations, and that means that tying "features"
+   to "tor version" won't work going forwards.
+
+   This proposal describes and alternative method that we can use to
+   simplify the advertisement and discovery of features, and the
+   transition from one set of features to another.
+
+1.1. History: "Protocols" vs version-based gating.
+
+   For ages, we've specified a "protocols" line in relay descriptors,
+   with a list of supported versions for "relay" and "link" protocols.
+   But we've never actually looked at it, and instead we've relied on
+   tor version numbers to determine which features we could rely upon.
+   We haven't kept the relay and link protocols listed there up-to-date
+   either.
+
+   Clients have used version checks for three purposes historically:
+   checking relays for bugs, checking relays for features, and
+   implementing bug-workarounds on their own state files.
+
+   In this design, feature checks are now performed directly with
+   subprotocol versions. We only need to keep using Tor versions
+   specifically for bug workarounds.
+
+2. Design: Advertising protocols.
+
+   We revive the "Protocols" design above, in a new form.
+
+   "proto" Entries NL
+
+     Entries =
+     Entries = Entry
+     Entries = Entry SP Entries
+
+     Entry = Keyword "=" Values
+
+     Values = Value
+     Values = Value "," Values
+
+     Value = Int
+     Value = Int "-" Int
+
+     Int = NON_ZERO_DIGIT
+     Int = Int DIGIT
+
+
+   Each 'Entry' in the "proto" line indicates that the Tor relay
+   supports one or more versions of the protocol in question.  Entries
+   must be sorted by keyword.  Values must be numerically ascending
+   within each entry.  (This implies that there are no overlapping
+   ranges.)  Ranges must be represented as compactly as possible. Ints
+   must be no more than 2^32 - 1.
+
+   The semantics for each keyword must be defined in a Tor
+   specification.  Extension keywords are allowed if they begin with
+   "x-" or "X-".  Keywords are case-sensitive.
+
+   During voting, authorities copy these lines immediately below the "v"
+   lines. When a descriptor does not contain a "proto" entry, the
+   authorities should reconstruct it using the approach described below
+   in section A.1.  They are included in the consensus using the same
+   rules as currently used for "v" lines, if a sufficiently late
+   consensus method is in use.
+
+2.1. An alternative: Moving 'v' lines into microdescriptors.
+
+   [[[[[
+   Here's an alternative: we could put "v" and "proto" lines into
+   microdescriptors.
+
+   When building microdescriptors, authorities could copy all valid
+   "proto" entries verbatim if a sufficiently late consensus method is
+   in use.  When a descriptor does not contain a "proto" entry, the
+   authorities should reconstruct it using the approach described below
+   in section A.1.
+
+   Tor clients that want to use "v" lines should prefer those in
+   microdescriptors if present, and ignore those in the consensus.
+
+   (Existing maintined client versions can be adapted to never look at
+   "v" lines at all; the only versions that they still check for are
+   ones not allowed on the network.  The "v" line can be dropped
+   from the consensus entirely when current clients have upgraded.)
+   ]]]]]
+
+   [I am rejecting this alternative for now, since proto lines should
+   compress very well, given that the proto line is completely
+   inferrable from the v line.  Removing all the v lines from the
+   current consensus would save only 1.7% after gzip compression.]
+
+3. Using "protos" and "v" lines
+
+   Whenever possible, clients and relays should use the list of
+   advertised protocols instead of version numbers.  Version numbers
+   should only be used when implementing bug-workarounds for specific
+   Tor versions.
+
+   Every new feature in tor-spec.txt, dir-spec.txt, and rend-spec.txt
+   should be gated on a particular protocol version.
+
+4. Required protocols
+
+   The consensus may contain three lines: RequiredRelayProtocols,
+   RecommendedClientProtocols, and RequiredClientProtocols.  Each has
+   the same format as the "protos" line.  To vote on these entries, a
+   protocol/version combination is included only if it is listed by a
+   majority of the voters.
+
+   When a relay lacks a protocol listed in RequiredRelayProtocols, it
+   must not attempt to join the network.
+
+   When a client lacks a protocol listed in RecommendedClientProtocols,
+   it should warn the user that the client is obsolete.
+
+   When a client lacks a protocol listed in RequiredClientProtocols, it
+   must not use the corresponding feature.  If the corresponding feature
+   is required to operate a Tor client, the client must must log an
+   error message and shut down without connecting to the network, even
+   if the cached consensus is out-of-date.  This implements a "safe
+   forward shutdown" mechanism for zombie clients.
+
+   The above features should be backported to 0.2.4 and later.
+
+5. Current protocols
+
+   (See "6. Maintaining the protocol list" below for information about
+   how I got these, and why version 0.2.4.19 comes up so often.)
+
+5.1. "Link"
+
+   The "link" protocols are those used by clients and relays to initiate
+   and receive OR connections and to handle cells on OR connections.
+   The "link" protocol versions correspond 1:1 to those versions.
+
+   Two Tor instances can make a connection to each other only if they
+   have at least one link protocol in common.
+
+   The current "link" versions are: "1" through "4"; see tor-spec.txt
+   for more information.  All current Tor versions support "1-3";
+   version from 0.2.4.11-alpha and on support "1-4".  Eventually we
+   will drop "1" and "2".
+
+5.2. "LinkAuth"
+
+   LinkAuth protocols correspond to varieties of Authenticate cells used
+   for the v3+ link protocools.
+
+   The currrent version is "1".
+
+5.3. "Relay"
+
+   The "relay" protocols are those used to handle CREATE cells, and
+   those that that handle the various RELAY cell types received after a
+   CREATE cell.  (Except, relay cells used to manage introduction and
+   rendezvous points are managed with the "HSMid" protocols.)
+
+      "1" -- supports the TAP key exchange, with all features in Tor
+         0.2.3.  Support for CREATE and CREATED and CREATE_FAST and
+         CREATED_FAST and EXTEND and EXTENDED.
+
+      "2" -- supports the ntor key exchange, and all features in Tor
+         0.2.4.19.  Includes support for CREATE2 and CREATED2 and
+         EXTEND2 and EXTENDED2.
+
+5.3. "HSMid"
+
+   The "HSMid" protocols are those that handle introduction points and
+   rendezvous points.
+
+      "1" -- supports all features in Tor 0.2.4.19
+
+5.4. "DirCache"
+
+   The "DirCache" protocols are the set of documents available for
+   download from a directory cache via BEGIN_DIR, and the set of URLs
+   available to fetch them.  (This excludes URLs for hidden service
+   objects.)
+
+      "1" -- supports all features in Tor 0.2.4.19.
+
+5.5. "HSDir"
+
+   The HSDir protocols are the set of hidden service document types
+   that can be uploaded to, understood by, and downloaded from a tor
+   relay, and the set of URLs available to fetch them.
+
+      "1" -- supports all features in Tor 0.2.4.19.
+
+5.6. "Desc"
+
+   Describes features present or absent in descriptors.
+
+   Most features in descriptors don't require a "Desc" update -- only
+   those that need to someday be required.  For example, someday clients
+   will need to understand ed25519 identities.
+
+      "1" -- supports all features in Tor 0.2.4.19.
+
+      "2" -- cross-signing with onion-keys, signing with ed25519
+             identities.
+
+5.7. "Microdesc"
+
+   Describes features present or absent in microdescriptors.
+
+   Most features in descriptors don't require a "MircoDesc" update --
+   only those that need to someday be required.
+   These correspond more or less with consensus methods.
+
+      "1" -- consensus methods 9 through 20.
+
+      "2" -- consensus method 21 (adds ed25519 keys to microdescs).
+
+5.8. "Cons"
+
+   Describes features present or absent in consensus documents.
+
+   Most features in consensus documents don't require a "Cons" update --
+   only those that need to someday be required.
+
+   These correspond more or less with consensus methods.
+
+      "1" -- consensus methods 9 through 20.
+
+      "2" -- consensus method 21 (adds ed25519 keys to microdescs).
+
+
+6. Maintaining the protocol lists
+
+   What makes a good fit for a "protocol" type?  Generally, it's a set
+   of communications functionality that tends to upgrade in tandem, and
+   in isolation from other parts of the Tor protocols.  It tends to be
+   functionality where it doesn't make sense to implement only part of
+   it -- though omitting the whole thing might make sense.
+
+   (Looking through our suite of protocols, you might make a case for
+   splitting DirCache into sub-protocols.)
+
+   We shouldn't add protocols for features where others can remain
+   oblivious to their presence or absence.  For example, if some
+   directory caches start supporting a new header, and clients can
+   safely send that header without knowing whether the directory cache
+   will understand it, then a new protocol version is not required.
+
+   Because all relays currently on the network are 0.2.4.19 or later, we
+   can require 0.2.4.19, and use 0.2.4.19 as the minimal version so we
+   we don't need to do code archeology to determine which number
+
+   Adding new protocol types is pretty cheap, given compression.
+
+A.1.  Inferring missing protos lines.
+
+   The directory authorities no longer allow versions of Tor before
+   0.2.4.8-alpha.  But right now, there is no version of Tor in the
+   consensus before 0.2.4.19.  Therefore, we should disallow versions of
+   Tor earlier than 0.2.4.19, so that we can have the protocol list for
+   all current Tor versions include:
+
+      DirCache=1 HSDir=1 HSMid=1 Link=1-4 LinkAuth=1 Relay=1-2
+
+   For Desc, Tor versions before 0.2.7.stable should be taken to have
+   Desc=1 and versions 0.2.7.stable or later should have Desc=1-2.
+
+   For Microdesc and Cons, Tor versions before 0.2.7.stable should be
+   taken to support version 1; 0.2.7.stable and later should have
+   1-2.
+
+A.2. Initial required protocols
+
+   For clients we will Recommend and Require:
+
+       DirCache=1 HSDir=1 Desc=1 Cons=ANYOF(9-20) Microdesc=ANYOF(9-20)
+       HSMid=1 Link=4 LinkAuth=1 Relay=2
+
+   For relays we will Require:
+
+       DirCache=1 HSDir=1 Desc=1 Cons=ANYOF(9-20) Microdesc=ANYOF(9-20)
+       HSMid=1 Link=3-4 LinkAuth=1 Relay=1-2
+
+A.3. Example integration with other open proposals
+
+   In this appendix, I try to show that this proposal is viable by
+   showing how it can integrate with other open proposals to avoid
+   version-gating.  I'm looking at open/draft/accepted proposals only.
+
+    140  Provide diffs between consensuses
+
+         This proposal doesn't affect interoperability, though we could
+         add a DirCache protocol version for it if we think we might
+         want to require it someday.
+
+    164  Reporting the status of server votes
+
+         Interoperability not affected; no new protocol.
+
+    165  Easy migration for voting authority sets
+
+         Authority-only; no new protocol.
+
+    168  Reduce default circuit window
+
+         Interoperability slightly affected; could be a new Relay
+         protocol.
+
+    172  GETINFO controller option for circuit information
+    173  GETINFO Option Expansion
+
+         Client/Relay interop not affected; no new protocol.
+
+    177  Abstaining from votes on individual flags
+
+         Authority-only; no new protocol.
+
+    182  Credit Bucket
+
+         No new protocol.
+
+    188  Bridge Guards and other anti-enumeration defenses
+
+         No new protocol.
+
+    189  AUTHORIZE and AUTHORIZED cells
+
+         This would be a new protocol, either a Link protocol or a new
+         LinkAuthz protocol.
+
+    191  Bridge Detection Resistance against MITM-capable Adversaries
+
+         No new protocol.
+
+    192  Automatically retrieve and store information about bridges
+
+         No new protocol.
+
+    195  TLS certificate normalization for Tor 0.2.4.x
+
+         Interop not affected; no new protocol.
+
+    201  Make bridges report statistics on daily v3 network status
+         requests
+
+         No new protocol.
+
+    202  Two improved relay encryption protocols for Tor cells
+
+         This would be a new Relay protocol.
+
+    203  Avoiding censorship by impersonating an HTTPS server
+
+         Bridge/PT only; no new protocol.
+
+    209  Tuning the Parameters for the Path Bias Defense
+
+         Client behavior only; no new protocol.
+
+    210  Faster Headless Consensus Bootstrapping
+
+         Client behavior only; no new protocol.
+
+    212  Increase Acceptable Consensus Age
+
+         Possibly add a new DirCache protocol version to describe the
+         "will hold older descriptors" property.
+
+    219  Support for full DNS and DNSSEC resolution in Tor
+
+         New relay protocol, or new protocol class (DNS=2?)
+
+    220  Migrate server identity keys to Ed25519
+
+         Once link authentication is supported, that's a new LinkAuth
+         protocol version.
+
+         No new protocol version is required for circuit extension,
+         since it's a backward-compatible change.
+
+    224  Next-Generation Hidden Services in Tor
+
+         Adds new HSDir and HSMid protocols.
+
+    226 "Scalability and Stability Improvements to BridgeDB: Switching
+         to a Distributed Database System and RDBMS"
+
+         No new protocol.
+
+    229  Further SOCKS5 extensions
+
+         Client-only; no new protocol.
+
+    233  Making Tor2Web mode faster
+
+         No new protocol.
+
+    234  Adding remittance field to directory specification
+
+         Could be a new protocol; or not.
+
+    237  All relays are directory servers
+
+         No new protocol.
+
+    239  Consensus Hash Chaining
+
+         No new protocol.
+
+    242  Better performance and usability for the MyFamily option
+
+         New Desc protocol.
+
+    244  Use RFC5705 Key Exporting in our AUTHENTICATE calls
+
+         Part of prop220.  Also adds another LinkAuth protocol version.
+
+    245  Deprecating and removing the TAP circuit extension protocol
+
+         Removes Linkauth protocol 1.
+
+         Removes a Desc protocol.
+
+    246  Merging Hidden Service Directories and Introduction Points
+
+         Possibly adds a new HSMid protocol.
+
+    247  Defending Against Guard Discovery Attacks using Vanguards
+
+         No new protocol.
+
+    248  Remove all RSA identity keys
+
+         Adds a new Desc protocol version and a new Cons protocol
+         version; eventually removes a version of each.
+
+    249  Allow CREATE cells with >505 bytes of handshake data
+
+         Adds a new Link protocol version for CREATE2V.
+
+         Adds a new Relay protocol version for new EXTEND2 semantics.
+
+    250  Random Number Generation  During Tor Voting
+
+         No new protocol.
+
+    251  Padding for netflow record resolution reduction
+
+         No new protocol.
+
+    252  Single Onion Services
+
+         No new protocol.
+
+    253  Out of Band Circuit HMACs
+
+         New Relay protocol.
+
+    254  Padding Negotiation
+
+         New Link protocol, new Relay protocol.
+
+    255  Controller features to allow for load-balancing hidden services
+
+         No new protocol.
+
+    256  Key revocation for relays and authorities
+
+         New Desc protocol.
+
+    257  Refactoring authorities and taking parts offline
+
+         No new protocol.
+
+    258  Denial-of-service resistance for directory authorities
+
+         No new protocol.
+
+    259  New Guard Selection Behaviour
+
+         No new protocol
+
+    260  Rendezvous Single Onion Services
+
+         No new protocol
+
+    261  AEZ for relay cryptography
+
+         New Relay protocol version.
+
+    262  Re-keying live circuits with new cryptographic material
+
+         New Relay protocol version
+
+    263  Request to change key exchange protocol for handshake
+
+         New Relay protocol version.
+



More information about the tor-commits mailing list