aboutsummaryrefslogtreecommitdiff
path: root/doc/rendezvous.txt
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2003-06-13 12:44:43 +0000
committerRoger Dingledine <arma@torproject.org>2003-06-13 12:44:43 +0000
commit33eeccd0a42ce5cd2ce492bc717d74e5e5ee916e (patch)
treee6417979c388ef3f69c49567aca8f60fa4d35bc2 /doc/rendezvous.txt
parentcbe7be1f7841541bf7210eb78f272379cb1b36cb (diff)
downloadtor-33eeccd0a42ce5cd2ce492bc717d74e5e5ee916e.tar
tor-33eeccd0a42ce5cd2ce492bc717d74e5e5ee916e.tar.gz
another revision of the rendezvous spec
this time the application-side behavior is more plausible svn:r317
Diffstat (limited to 'doc/rendezvous.txt')
-rw-r--r--doc/rendezvous.txt174
1 files changed, 100 insertions, 74 deletions
diff --git a/doc/rendezvous.txt b/doc/rendezvous.txt
index b1ef97b56..ab0239167 100644
--- a/doc/rendezvous.txt
+++ b/doc/rendezvous.txt
@@ -1,80 +1,79 @@
How to make rendezvous points work
1-11Jun2003
-1. Overview
-
- This document provides a design overview for rendezvous points, as
- discussed by Nick and Roger after Discex.
+0. Overview
Rendezvous points are an implementation of server anonymity /
location-hidden servers in the onion routing network. There are
three components needed for rendezvous points:
A) A means for the client ("Alice") to tell a server ("Bob") where
- to contact her in order to establish a connection. (Notification)
+ to contact her in order to establish a connection. (Introduction)
B) A means for Bob to contact Alice to actually establish the
connection, and for them to communicate later. (Meeting)
C) Necessary glue code so that Alice can view webpages on a
location-hidden webserver, and Bob can run a location-hidden
server with minimal invasive changes. (Application)
- We'll tackle these in order. In all cases, I'll assume that both
- Alice and Bob have local OPs.
+ We'll tackle these in order. In all cases, we'll assume that both
+ Alice and Bob run local OPs.
-2. Notification service
+1. Introduction service
Bob wants to learn about client requests for communication, but
wants to avoid responding unnecessarily to unauthorized clients.
Bob's proxy opens a circuit, and tells some onion router on that
circuit to expect incoming connections, and notify Bob of them.
- When establishing such a notification point, Bob provides the onion
- router with a public "notification" key. The hash of this public
+ When establishing such an introduction point, Bob provides the onion
+ router with a public "introduction" key. The hash of this public
key uniquely identifies Bob, and prevents anybody else from
- usurping Bob's notification point in the future. Additionally, Bob
- can use the same public key to establish a notification point on
+ usurping Bob's introduction point in the future. Additionally, Bob
+ can use the same public key to establish an introduction point on
another OR, and Alice can still be confident that Bob is the same
server.
-
- (The set-up-a-notification-point command should come via a
- RELAY_BIND_NOTIFICATION cell. This cell creates a new stream on the
- circuit from Bob to the notification point.)
- ORs that support notification run a notification service on a
+ (The set-up-an-introduction-point command should come via a
+ RELAY_BIND_INTRODUCTION cell. This cell creates a new stream on the
+ circuit from Bob to the introduction point.)
+
+ ORs that support introduction run an introduction service on a
separate port. When Alice wants to notify Bob of a meeting point,
- she connects (directly or via Tor) to the notification port, and
+ she connects (directly or via Tor) to the introduction port, and
sends the following:
-
+
MEETING REQUEST
- Encrypted with server's public key:
- Hash of Bob's public key (identifies which Bob to notify)
- Initial authentication [optional]
- Encrypted with Bob's public key:
- Meeting point
- Meeting cookie
- End-to-end forward key
- End-to-end backward key
- End-to-end authentication [optional]
-
- [Add a Nonce or some kind of replay prevention mechanism? -NM]
- [Should this use DH instead? -NM]
+ RSA-OAEP encrypted with server's public key:
+[20 bytes] Hash of Bob's public key (identifies which Bob to notify)
+[ 0 bytes] Initial authentication [optional]
+ RSA encrypted with Bob's public key:
+[16 bytes] Symmetric key for encrypting blob past RSA
+[ 6 bytes] Meeting point (IP/port)
+[ 8 bytes] Meeting cookie
+[ 0 bytes] End-to-end authentication [optional]
+[98 bytes] g^x part 1 (inside the RSA)
+[30 bytes] g^x part 2 (symmetrically encrypted)
+
The meeting point and meeting cookie allow Bob to contact Alice and
prove his identity; the end-to-end authentication enables Bob to
decide whether to talk to Alice; the initial authentication enables
- the meeting point to pre-screen notification requests before
+ the meeting point to pre-screen introduction requests before
sending them to Bob. (See 3 for a discussion of meeting points;
see 2.1 for a proposed authentication mechanism.)
- When the notification point receives a valid meeting request, it
- sends the portion encrypted with Bob's public key along the stream
- created by Bob's RELAY_BIND_NOTIFICATION. Bob then, at his
+ The authentication steps are the appropriate places for the
+ introduction server or Bob to do replay prevention, if desired.
+
+ When the introduction point receives a valid meeting request, it
+ sends the portion intended for Bob along the stream
+ created by Bob's RELAY_BIND_INTRODUCTION. Bob then, at his
discretion, connects to Alice's meeting point.
-2.1. Proposed authentication for notification services
+1.1. An example authentication scheme for introduction services
Bob makes two short-term secrets SB and SN, and tells the
- notification point about SN. Bob gives Alice a cookie consisting
+ introduction point about SN. Bob gives Alice a cookie consisting
of A,B,C such that H(A|SB)=B and H(A|SN)=C. Alice's initial
authentication is <A,C>; Alice's end-to-end authentication is <A,B>.
@@ -83,25 +82,24 @@
[Maybe] Each 'A' has an expiration time built in to it.
-3. Meeting points
+2. Meeting points
For Bob to actually reply to Alice, Alice first establishes a
circuit to an onion router R, and sends a RELAY_BIND_MEETING cell
- to that onion router. The RELAY_BIND_MEETING cell contains a
+ to that onion router. The RELAY_BIND_MEETING cell contains a
'Meeting cookie' (MC) that Bob can use to authenticate to R. R
remembers the cookie and associates it with Alice.
- Later, Bob also routes to R and sends R a RELAY_JOIN_MEETING cell
- with the meeting cookie MC. After this point, R routes all traffic
- from Bob's circuit or Alice's circuit as if the two circuits were
- joined: any RELAY cells that are not for a recognized topic are
- passed down Alice or Bob's circuit.
-
- To prevent R from reading their traffic, Alice and Bob use the two
- end-to-end keys in Alice's original notification to Bob: Bob uses
- the 'forward' key and Alice the 'backward' key. (These keys are
- used in addition to the series of encryption keys already in use on
- Alice and Bob's circuits.)
+ Later, Bob also routes to R and sends R a RELAY_JOIN_MEETING cell with
+ the meeting cookie MC. After this point, R routes all traffic from
+ Bob's circuit or Alice's circuit as if the two circuits were joined:
+ any RELAY cells that are not for a recognized topic are passed down
+ Alice or Bob's circuit. Bob's first cell to Alice contains g^y.
+
+ To prevent R from reading their traffic, Alice and Bob derive two
+ end-to-end keys from g^{xy}, and they each treat R as just another
+ hop on the circuit. (These keys are used in addition to the series
+ of encryption keys already in use on Alice and Bob's circuits.)
Bob's OP accepts RELAY_BEGIN, RELAY_DATA, RELAY_END, and
RELAY_SENDME cells from Alice. Alice's OP accepts RELAY_DATA,
@@ -111,28 +109,56 @@
Alice and Bob's OPs disallow CREATE or RELAY_EXTEND cells as usual.
-4. Application interface
-
-4.1. Application interface: client side
-
- Because we require that the client interface remain a SOCKS proxy,
- we can't have clients explicitly connect to Bob. Instead, we have
- the OP map DNS addresses used by the client to the
- <Notification point, Bob's PK, Authentication>
- tuples needed to establish a connection to Bob.
-
- [We had earlier hoped encode this information into the DNS address,
- but that won't work. The data needed will be at least ~1024 bits
- long (for Bob's public key). You'd need over 197 characters to
- encode a blob that long, and you'd wind up triggering pathological
- cases in a lot of client code. -NM]
-
- I propose that the client OP receive this mapping information
- outside of the Tor protocol: either from true out-of-band entry, or
- from protocol-specific transmission.
-
- (For example of protocol-specific, an HTTP server could include
- notification information in reply headers, or cookies, or
- something.)
-
+3. Application interface
+
+3.1. Application interface: server side
+
+ Bob has a service that he wants to offer to the world but keep its
+ location hidden. He configures his local OP to know about this
+ service, including the following data:
+
+ Local IP and port of the service
+ Strategy for choosing introduction points
+ (for now, just randomly pick among the ORs offering it)
+ Strategy for user authentication
+ (for now, just accept all users)
+ Public (RSA) key (one for each service Bob offers)
+
+ Bob chooses a set of N Introduction servers on which to advertise
+ his service.
+
+ We assume the existence of a robust decentralized efficient lookup
+ system (call it "DHT"). Bob publishes
+ * Bob's Public Key for that service
+ * Timestamp
+ * Introduction server 0 ... Introduction server N
+ (All signed by Bob's Public Key)
+ into DHT, indexed by the hash of Bob's Public Key. Bob should
+ periodically republish his introduction information with a new
+ timestamp (and possibly with new/different introduction servers if
+ he wants), so Alice can trust that DHT is giving her an up-to-date
+ version.
+
+3.2. Application interface: client side
+
+ We require that the client interface remain a SOCKS proxy, and we
+ require that Alice shouldn't have to modify her applications. Thus
+ we encode all of the necessary information into the hostname that
+ Alice uses (eg when clicking on a url in her browser, etc).
+
+ To establish a connection to Bob, Alice needs to know an Introduction
+ point, Bob's PK, and some authentication cookie. Because encoding this
+ information into the hostname will be too long for a typical hostname,
+ we instead use a layer of indirection. We encode a hash of Bob's PK
+ (10 bytes is sufficient since we're not worrying about collisions),
+ and also the authentication token (empty for now). Thus at a bit more
+ than 6 bits encoded per character (assuming only alphanumeric and
+ hyphen), we transform the hostname "moria.mit.edu" into the hostname
+ "moria.mit.edu.onion5gfmjsda-ckd5" (adding 13 characters plus the
+ separator).
+
+ Alice's onion proxy examines hostnames and recognizes when they're
+ destined for a hidden server. If so, it decodes the PK, looks it up in
+ the DHT, chooses and connects to a meeting place, chooses and connects
+ to one of Bob's introduction servers, and then waits to hear from Bob.