|  | @@ -30,6 +30,9 @@ Change history:
 | 
	
		
			
				|  |  |                 abuse.
 | 
	
		
			
				|  |  |    01-Aug-2008  Use first part of Diffie-Hellman handshake for replay
 | 
	
		
			
				|  |  |                 protection instead of rendezvous cookie.
 | 
	
		
			
				|  |  | +  01-Aug-2008  Remove improved hidden service protocol without client
 | 
	
		
			
				|  |  | +               authorization (2.1). It might get implemented in proposal
 | 
	
		
			
				|  |  | +               142.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Overview:
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -459,73 +462,24 @@ Details:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    2. Specific authorization protocol instances
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  In the following we present three specific authorization protocols that
 | 
	
		
			
				|  |  | +  In the following we present two specific authorization protocols that
 | 
	
		
			
				|  |  |    make use of (parts of) the new authorization infrastructure:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    1. The first protocol does not really perform client authorization, but
 | 
	
		
			
				|  |  | -       requires clients to have downloaded a service descriptor before
 | 
	
		
			
				|  |  | -       establishing a connection in order to prevent introduction points
 | 
	
		
			
				|  |  | -       from accessing a service.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    2. The second protocol allows a service provider to restrict access
 | 
	
		
			
				|  |  | +    1. The first protocol allows a service provider to restrict access
 | 
	
		
			
				|  |  |         to clients with a previously received secret key only, but does not
 | 
	
		
			
				|  |  |         attempt to hide service activity from others.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    3. The third protocol, albeit being feasible for a limited set of about
 | 
	
		
			
				|  |  | +    2. The second protocol, albeit being feasible for a limited set of about
 | 
	
		
			
				|  |  |         16 clients, performs client authorization and hides service activity
 | 
	
		
			
				|  |  |         from everyone but the authorized clients.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  These three protocol instances together are intended to replace the
 | 
	
		
			
				|  |  | -  existing hidden service protocol versions 0 and 2 in the long run and
 | 
	
		
			
				|  |  | -  shall therefore be considered hidden service protocol version 3. All
 | 
	
		
			
				|  |  | -  changes in this version 3 are designed to be fully backward-compatible to
 | 
	
		
			
				|  |  | -  version 2 and can be run in parallel to version 0.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  2.1. Services without client authorization
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  Although hidden services without client authorization could be run as
 | 
	
		
			
				|  |  | -  before, this proposal allows us to add a new security property at almost
 | 
	
		
			
				|  |  | -  no costs: Denying the introduction points to access the hidden service.
 | 
	
		
			
				|  |  | -  While this constitutes a defense against rogue introduction points, it
 | 
	
		
			
				|  |  | -  also reduces responsibility of a Tor node operator for the doings of a
 | 
	
		
			
				|  |  | -  hidden service offering illegal or unethical contents.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  The original hidden service design used the service's permanent key to
 | 
	
		
			
				|  |  | -  establish introduction points. If an introduction point wanted to access
 | 
	
		
			
				|  |  | -  the service, it could easily download the service's descriptor using its
 | 
	
		
			
				|  |  | -  permanent key ID and establish a connection or generate an INTRODUCE2
 | 
	
		
			
				|  |  | -  cell itself and forward it directly to the service.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  Hidden service protocol version 2 made it more difficult for introduction
 | 
	
		
			
				|  |  | -  points to find out which service they are serving. Here, the hidden
 | 
	
		
			
				|  |  | -  service created a fresh introduction key for each introduction point
 | 
	
		
			
				|  |  | -  which 1) did not reveal the hidden service's identity and 2) did not
 | 
	
		
			
				|  |  | -  allow downloading the service's descriptor. However, the introduction
 | 
	
		
			
				|  |  | -  point could still generate an INTRODUCE2 cell itself and establish a
 | 
	
		
			
				|  |  | -  connection to the service to find out what it is serving.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  Beginning with this proposal can include a so-called "introduction
 | 
	
		
			
				|  |  | -  cookie" in v2 hidden service descriptors and v3 INTRODUCE2 cells. If
 | 
	
		
			
				|  |  | -  both, service and client implement this proposal, a service receiving a
 | 
	
		
			
				|  |  | -  v3 INTRODUCE2 cell with an introduction cookie in it can be sure that the
 | 
	
		
			
				|  |  | -  client has downloaded its descriptor before. As long as hidden services
 | 
	
		
			
				|  |  | -  also permit v2 INTRODUCE2 cells, introduction points can work around this
 | 
	
		
			
				|  |  | -  safeguard. But the earlier this protocol is introduced, the earlier the
 | 
	
		
			
				|  |  | -  services can stop supporting version 2 introductions.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  A hidden service generates a unique introduction cookie for each
 | 
	
		
			
				|  |  | -  established introduction point and puts it in the "intro-authentication"
 | 
	
		
			
				|  |  | -  field in its descriptor for auth-type "1". Further, the service sets the
 | 
	
		
			
				|  |  | -  "protocol-versions" field to "2,3" to announce that it understands both,
 | 
	
		
			
				|  |  | -  requests with and without introduction cookie. Clients that understand
 | 
	
		
			
				|  |  | -  protocol version 3 include the introduction cookie in the v3 INTRODUCE2
 | 
	
		
			
				|  |  | -  cell as auth-type "1" that they send to the service. (Clients that don't
 | 
	
		
			
				|  |  | -  understand the protocol v3 do not recognize the authorization data and
 | 
	
		
			
				|  |  | -  send a v2 INTRODUCE2 cell as usual.) The hidden service can compare a
 | 
	
		
			
				|  |  | -  received introduction cookie with the value that it expects and grant or
 | 
	
		
			
				|  |  | -  deny service correspondingly.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  2.2. Service with large-scale client authorization
 | 
	
		
			
				|  |  | +  These two protocol instances are intended to extend existing hidden
 | 
	
		
			
				|  |  | +  service protocol versions 0 and 2 and shall therefore be considered
 | 
	
		
			
				|  |  | +  hidden service protocol version 3. All changes in this version 3 are
 | 
	
		
			
				|  |  | +  designed to be fully backward-compatible to version 2 and can be run in
 | 
	
		
			
				|  |  | +  parallel to version 0.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  2.1. Service with large-scale client authorization
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    The first client authorization protocol aims at performing access control
 | 
	
		
			
				|  |  |    while consuming as little additional resources as possible. A service
 | 
	
	
		
			
				|  | @@ -545,7 +499,7 @@ Details:
 | 
	
		
			
				|  |  |    clients and distributes them outside of Tor. The suggested key size is
 | 
	
		
			
				|  |  |    128 bits, so that descriptor cookies can be encoded in 22 base64 chars
 | 
	
		
			
				|  |  |    (which can hold up to 22 * 5 = 132 bits, leaving 4 bits to encode the
 | 
	
		
			
				|  |  | -  authorization type "2" and allow a client to distinguish this
 | 
	
		
			
				|  |  | +  authorization type "1" and allow a client to distinguish this
 | 
	
		
			
				|  |  |    authorization protocol from others like the one proposed below).
 | 
	
		
			
				|  |  |    Typically, the contact information for a hidden service using this
 | 
	
		
			
				|  |  |    authorization protocol looks like this:
 | 
	
	
		
			
				|  | @@ -569,7 +523,7 @@ Details:
 | 
	
		
			
				|  |  |    ###
 | 
	
		
			
				|  |  |    ### Here comes the voodoo I've conceived:
 | 
	
		
			
				|  |  |    ###
 | 
	
		
			
				|  |  | -  ###   ATYPE  Authorization type: set to 2.                      [1 octet]
 | 
	
		
			
				|  |  | +  ###   ATYPE  Authorization type: set to 1.                      [1 octet]
 | 
	
		
			
				|  |  |    ###   ALEN   Number of authorized clients div 16                [1 octet]
 | 
	
		
			
				|  |  |    ### for each symmetric descriptor cookie:
 | 
	
		
			
				|  |  |    ###   ID     Client ID: H(descriptor cookie | IV)[:4]          [4 octets]
 | 
	
	
		
			
				|  | @@ -588,12 +542,12 @@ Details:
 | 
	
		
			
				|  |  |    IDs being equal a client tries to decrypt all of them.)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    Upon sending the introduction, the client includes her descriptor cookie
 | 
	
		
			
				|  |  | -  as auth type "2" in the INTRODUCE2 cell that she sends to the service.
 | 
	
		
			
				|  |  | +  as auth type "1" in the INTRODUCE2 cell that she sends to the service.
 | 
	
		
			
				|  |  |    The hidden service checks whether the included descriptor cookie is
 | 
	
		
			
				|  |  |    authorized to access the service and either responds to the introduction
 | 
	
		
			
				|  |  |    request, or not.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  2.3. Authorization for limited number of clients
 | 
	
		
			
				|  |  | +  2.2. Authorization for limited number of clients
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    A second, more sophisticated client authorization protocol goes the extra
 | 
	
		
			
				|  |  |    mile of hiding service activity from unauthorized clients. With all else
 | 
	
	
		
			
				|  | @@ -620,8 +574,8 @@ Details:
 | 
	
		
			
				|  |  |    created client key and descriptor cookie, he tells them to the client
 | 
	
		
			
				|  |  |    outside of Tor. The contact information string looks similar to the one
 | 
	
		
			
				|  |  |    used by the preceding authorization protocol (with the only difference
 | 
	
		
			
				|  |  | -  that it has "3" encoded as auth-type in the remaining 4 of 132 bits
 | 
	
		
			
				|  |  | -  instead of "2" as before).
 | 
	
		
			
				|  |  | +  that it has "2" encoded as auth-type in the remaining 4 of 132 bits
 | 
	
		
			
				|  |  | +  instead of "1" as before).
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    When creating a hidden service descriptor for an authorized client, the
 | 
	
		
			
				|  |  |    hidden service uses the client key and descriptor cookie to compute
 | 
	
	
		
			
				|  | @@ -634,7 +588,7 @@ Details:
 | 
	
		
			
				|  |  |    The hidden service also replaces permanent-key in the descriptor with
 | 
	
		
			
				|  |  |    client-key and encrypts introduction-points with the descriptor cookie.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -     ATYPE  Authorization type: set to 3.                         [1 octet]
 | 
	
		
			
				|  |  | +     ATYPE  Authorization type: set to 2.                         [1 octet]
 | 
	
		
			
				|  |  |       IV     AES initialization vector                           [16 octets]
 | 
	
		
			
				|  |  |       IPOS   Intro points, encr. with descriptor cookie   [remaining octets]
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -645,51 +599,45 @@ Details:
 | 
	
		
			
				|  |  |    When a client is requested to establish a connection to a hidden service
 | 
	
		
			
				|  |  |    it looks up whether it has any authorization data configured for that
 | 
	
		
			
				|  |  |    service. If the user has configured authorization data for authorization
 | 
	
		
			
				|  |  | -  protocol "3", the descriptor ID is determined as described in the last
 | 
	
		
			
				|  |  | +  protocol "2", the descriptor ID is determined as described in the last
 | 
	
		
			
				|  |  |    paragraph. Upon receiving a descriptor, the client decrypts the
 | 
	
		
			
				|  |  |    introduction-point part using its descriptor cookie. Further, the client
 | 
	
		
			
				|  |  | -  includes its descriptor cookie as auth-type "3" in INTRODUCE2 cells that
 | 
	
		
			
				|  |  | +  includes its descriptor cookie as auth-type "2" in INTRODUCE2 cells that
 | 
	
		
			
				|  |  |    it sends to the service.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  2.4. Hidden service configuration
 | 
	
		
			
				|  |  | +  2.3. Hidden service configuration
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    A hidden service that implements this proposal and that is meant to use
 | 
	
		
			
				|  |  | -  the new protocols (including the protocol without client authorization as
 | 
	
		
			
				|  |  | -  described in 2.1) adds version 3 to the list of supported hidden service
 | 
	
		
			
				|  |  | +  the new protocols adds version 3 to the list of supported hidden service
 | 
	
		
			
				|  |  |    protocols:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      HiddenServiceVersion version,version,... (Default: 0, 2, 3)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    If the service shall perform client authorization, another config option
 | 
	
		
			
				|  |  | -  is set to either "1" for the protocol described in 2.2 or "2" for the
 | 
	
		
			
				|  |  | -  protocol in 2.3 (auth type numbers differ from the internally used
 | 
	
		
			
				|  |  | -  numbers primarily to avoid user questions about the whereabouts of auth
 | 
	
		
			
				|  |  | -  type 1). This config option also includes a comma-separated list of
 | 
	
		
			
				|  |  | -  human-readable client names, so that Tor can create authorization data
 | 
	
		
			
				|  |  | +  is set to either "1" for the protocol described in 2.1 or "2" for the
 | 
	
		
			
				|  |  | +  protocol in 2.2. This config option also includes a comma-separated list
 | 
	
		
			
				|  |  | +  of human-readable client names, so that Tor can create authorization data
 | 
	
		
			
				|  |  |    for these clients:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      HiddenServiceAuthorizeClient auth-type client-name,client-name,...
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    If this option is configured, HiddenServiceVersion is automatically
 | 
	
		
			
				|  |  | -  reconfigured to contain only version numbers of 3 or higher. If this
 | 
	
		
			
				|  |  | -  config option is not set but the configured hidden service version
 | 
	
		
			
				|  |  | -  includes 3, the protocol without client authorization as described in 2.1
 | 
	
		
			
				|  |  | -  is offered to clients (possibly in parallel to versions 0 and 2).
 | 
	
		
			
				|  |  | +  reconfigured to contain only version numbers of 3 or higher.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    Tor stores all generated authorization data for the authorization
 | 
	
		
			
				|  |  | -  protocols described in Sections 2.2 and 2.3 in a new file using the
 | 
	
		
			
				|  |  | +  protocols described in Sections 2.1 and 2.2 in a new file using the
 | 
	
		
			
				|  |  |    following file format:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |       "client-name" human-readable client identifier NL
 | 
	
		
			
				|  |  |       "descriptor-cookie" 128-bit key ^= 22 base64 chars NL
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  If the authorization protocol of Section 2.3 is used, Tor also generates
 | 
	
		
			
				|  |  | +  If the authorization protocol of Section 2.2 is used, Tor also generates
 | 
	
		
			
				|  |  |    and stores the following data:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |       "service-address" client-specific-onion-address NL
 | 
	
		
			
				|  |  |       "client-key" NL a public key in PEM format
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  2.5. Client configuration
 | 
	
		
			
				|  |  | +  2.4. Client configuration
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    Clients need to make their authorization data known to Tor using another
 | 
	
		
			
				|  |  |    configuration option that contains a service name (mainly for the sake of
 |