|
@@ -4,7 +4,13 @@ Version: $Revision$
|
|
Last-Modified: $Date$
|
|
Last-Modified: $Date$
|
|
Author: Roger Dingledine
|
|
Author: Roger Dingledine
|
|
Created: 13-Mar-2007
|
|
Created: 13-Mar-2007
|
|
-Status: Needs-Revision
|
|
+Status: Accepted
|
|
|
|
+
|
|
|
|
+History:
|
|
|
|
+
|
|
|
|
+ Revised 3 July 2008 by nickm: rename from relay_extend to
|
|
|
|
+ relay_early. Revise to current migration plan. Allow K cells
|
|
|
|
+ over circuit lifetime, not just at start.
|
|
|
|
|
|
Overview:
|
|
Overview:
|
|
|
|
|
|
@@ -36,25 +42,25 @@ Motivation:
|
|
|
|
|
|
Design:
|
|
Design:
|
|
|
|
|
|
- We should split RELAY cells into two types: RELAY and RELAY_EXTEND.
|
|
+ We should split RELAY cells into two types: RELAY and RELAY_EARLY.
|
|
|
|
|
|
- Relay_extend cells can only be sent in the first K (say, 10) data
|
|
+ Only K (say, 10) Relay_early cells can be sent across a circuit, and
|
|
- cells sent across a circuit, and only relay_extend cells are allowed
|
|
+ only relay_early cells are allowed to contain extend requests. We
|
|
- to contain extend requests. We still support obscuring the length of
|
|
+ still support obscuring the length of the circuit (if more research
|
|
- the circuit (if more research shows us what to do), because Alice can
|
|
+ shows us what to do), because Alice can choose how many of the K to
|
|
- choose how many of the K to mark as relay_extend. Note that relay_extend
|
|
+ mark as relay_early. Note that relay_early cells *can* contain any
|
|
- cells *can* contain any sort of data cell; so in effect it's actually
|
|
+ sort of data cell; so in effect it's actually the relay type cells
|
|
- the relay type cells that are restricted. By default, she would just
|
|
+ that are restricted. By default, she would just send the first K
|
|
- send the first K data cells over the stream as relay_extend cells,
|
|
+ data cells over the stream as relay_early cells, regardless of their
|
|
- regardless of their actual type.
|
|
+ actual type.
|
|
|
|
|
|
Each intermediate server would pass on the same type of cell that it
|
|
Each intermediate server would pass on the same type of cell that it
|
|
- received (either relay or relay_extend), and the cell's destination
|
|
+ received (either relay or relay_early), and the cell's destination
|
|
will be able to learn whether it's allowed to contain an Extend request.
|
|
will be able to learn whether it's allowed to contain an Extend request.
|
|
|
|
|
|
- If an intermediate server receives a relay_extend cell after it has
|
|
+ If an intermediate server receives more than K relay_early cells, or
|
|
- already seen k data cells, or if it sees a relay cell that contains an
|
|
+ if it sees a relay cell that contains an extend request, then it
|
|
- extend request, then it tears down the circuit (protocol violation).
|
|
+ tears down the circuit (protocol violation).
|
|
|
|
|
|
Security implications:
|
|
Security implications:
|
|
|
|
|
|
@@ -73,33 +79,26 @@ Security implications:
|
|
|
|
|
|
Migration:
|
|
Migration:
|
|
|
|
|
|
- Phase one: servers should recognize relay_extend cells and pass them
|
|
+ In 0.2.0, servers speaking v2 or later of the link protocol accept
|
|
- on just like relay cells. Don't do any enforcement of the protocol
|
|
+ RELAY_EARLY cells, and pass them on. If the next OR in the circuit
|
|
- yet. We could do this phase in the 0.2.0 timeline.
|
|
+ is not speaking the v2 link protocol, the server relays the cell as
|
|
|
|
+ a RELAY cell.
|
|
|
|
|
|
- Phase two: once support in phase one is pervasive, clients could start
|
|
+ In 0.2.1.x, clients begin using RELAY_EARLY cells on v2 connections.
|
|
- using relay_extend cells when all nodes currently in the circuit would
|
|
+ This functionality can be safely backported to 0.2.0.x. Clients
|
|
- recognize them. We could conceivably do this phase during 0.2.0 too.
|
|
+ should pick a random number betweeen (say) 8 and 10 to send.
|
|
|
|
|
|
- Phase three: once clients that don't use relay_extend cells are
|
|
+ In 0.2.1.x, servers close any circuit in which more than K
|
|
- obsolete, servers should start enforcing the protocol.
|
|
+ relay_early cells are sent.
|
|
|
|
|
|
- (Another migration plan would be to coordinate this with proposal
|
|
+ Once all versions the do not send RELAY_EARLY cells are obsolete,
|
|
- 105's new link versions. Would that be better/worse? Can somebody
|
|
+ servers can begin to reject any EXTEND requests not sent in a
|
|
- sketch out what it might look like?)
|
|
+ RELAY_EARLY cell.
|
|
|
|
|
|
Spec:
|
|
Spec:
|
|
|
|
|
|
[We can formalize this part once we think the design is a good one.]
|
|
[We can formalize this part once we think the design is a good one.]
|
|
|
|
|
|
-Additional complexity:
|
|
|
|
-
|
|
|
|
- Rather than limiting the relay_extend cells to being in the first K
|
|
|
|
- data cells seen, we could instead permit up to K relay_extend cells
|
|
|
|
- in the lifetime of the circuit. This would let us extend the circuit
|
|
|
|
- later on in its life if we decided it was worth doing, though we would
|
|
|
|
- reveal our intent to each node in the circuit when we do.
|
|
|
|
-
|
|
|
|
Acknowledgements:
|
|
Acknowledgements:
|
|
|
|
|
|
This design has been kicking around since Christian Grothoff and I came
|
|
This design has been kicking around since Christian Grothoff and I came
|