aboutsummaryrefslogtreecommitdiff
path: root/proposals/110-avoid-infinite-circuits.txt
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-03-14 03:43:35 +0000
committerNick Mathewson <nickm@torproject.org>2007-03-14 03:43:35 +0000
commitafdd5a95278a526206c2a276b6ef080016a2b1b3 (patch)
tree627ba1ceb39b0baf2f5dd2c8ab9765bf759a3c0a /proposals/110-avoid-infinite-circuits.txt
parent55c7fcbdca7d7d4b420bc5498ff27206283cf8fd (diff)
downloadtorspec-afdd5a95278a526206c2a276b6ef080016a2b1b3.tar.gz
torspec-afdd5a95278a526206c2a276b6ef080016a2b1b3.zip
r12165@catbus: nickm | 2007-03-13 23:43:14 -0400
Add "Avoid infinite length circuits" as proposal 110. svn:r9814
Diffstat (limited to 'proposals/110-avoid-infinite-circuits.txt')
-rw-r--r--proposals/110-avoid-infinite-circuits.txt105
1 files changed, 105 insertions, 0 deletions
diff --git a/proposals/110-avoid-infinite-circuits.txt b/proposals/110-avoid-infinite-circuits.txt
new file mode 100644
index 0000000..dd189bb
--- /dev/null
+++ b/proposals/110-avoid-infinite-circuits.txt
@@ -0,0 +1,105 @@
+Hi folks,
+
+I figured I'd get up to speed on proposal writing with a rather simple
+one, rather than jump in over my head first. :) This design has been
+kicking around since Christian Grothoff and I came up with it at PET 2004.
+
+Filename: 1xx-avoid-infinite-circuits.txt
+Title: Avoiding infinite length circuits
+Version:
+Last-Modified:
+Author: Roger Dingledine
+Created:
+Status: Open
+
+Overview:
+
+ Right now, an attacker can add load to the Tor network by extending a
+ circuit an arbitrary number of times. Every cell that goes down the
+ circuit then adds N times that amount of load in overall bandwidth
+ use. This vulnerability arises because servers don't know their position
+ on the path, so they can't tell how many nodes there are before them
+ on the path.
+
+ We propose a new set of relay cells that are distinguishable by
+ intermediate hops as permitting extend cells. This approach will allow
+ us to put an upper bound on circuit length relative to the number of
+ colluding adversary nodes; but there are some downsides too.
+
+Motivation:
+
+ The above attack can be used to generally increase load all across the
+ network, or it can be used to target specific servers: by building a
+ circuit back and forth between two victim servers, even a low-bandwidth
+ attacker can soak up all the bandwidth offered by the fastest Tor
+ servers.
+
+ The general attacks could be used as a demonstration that Tor isn't
+ perfect (leading to yet more media articles about "breaking" Tor), and
+ the targetted attacks will come into play once we have a reputation
+ system -- it will be trivial to DoS a server so it can't pass its
+ reputation checks, in turn impacting security.
+
+Design:
+
+ We should split RELAY cells into two types: RELAY and RELAY_EXTEND.
+
+ Relay_extend cells can only be sent in the first K (say, 10) data
+ cells sent across a circuit, and only relay_extend cells are allowed
+ to contain extend requests. We still support obscuring the length of
+ the circuit (if more research shows us what to do), because Alice can
+ choose how many of the K to mark as relay_extend. Note that relay_extend
+ cells *can* contain any sort of data cell; so in effect it's actually
+ the relay type cells that are restricted.
+
+ Each intermediate server would pass on the same type of cell that it
+ received (either relay or relay_extend), and the cell's destination
+ 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
+ already seen k cells, or if it sees a relay cell that contains an
+ extend request, then it tears down the circuit (protocol violation).
+
+Security implications:
+
+ The upside is that this limits the bandwidth amplification factor to
+ K: for an individual circuit to become arbitrary-length, the attacker
+ would need an adversary-controlled node every K hops, and at that
+ point the attack is no worse than if the attacker creates N/K separate
+ K-hop circuits.
+
+ On the other hand, we want to pick a large enough value of K that we
+ don't mind the cap.
+
+ If we ever want to take steps to hide the number of hops in the circuit
+ or a node's position in the circuit, this design probably makes that
+ more complex.
+
+Migration:
+
+ Phase one: servers should recognize relay_extend cells and pass them
+ on just like relay cells. Don't do any enforcement of the protocol
+ yet. We could do this phase in the 0.2.0 timeline.
+
+ Phase two: once support in phase one is pervasive, clients could start
+ using relay_extend cells when all nodes currently in the circuit would
+ recognize them. We could conceivably do this phase during 0.2.0 too.
+
+ Phase three: once clients that don't use relay_extend cells are
+ obsolete, servers should start enforcing the protocol.
+
+ (Another migration plan would be to coordinate this with proposal
+ 105's new link versions. Would that be better/worse? Can somebody
+ sketch out what it might look like?)
+
+Spec:
+
+ [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.