mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
cut clean tighten tweak
svn:r1884
This commit is contained in:
parent
a782b83c28
commit
fd09a4080b
1
doc/TODO
1
doc/TODO
@ -11,7 +11,6 @@ ARMA - arma claims
|
|||||||
D Deferred
|
D Deferred
|
||||||
X Abandoned
|
X Abandoned
|
||||||
|
|
||||||
|
|
||||||
For September:
|
For September:
|
||||||
. Windows port
|
. Windows port
|
||||||
o works as client
|
o works as client
|
||||||
|
@ -65,7 +65,7 @@ Paul Syverson \\ Naval Research Lab \\ syverson@itd.nrl.navy.mil}
|
|||||||
\begin{abstract}
|
\begin{abstract}
|
||||||
We present Tor, a circuit-based low-latency anonymous communication
|
We present Tor, a circuit-based low-latency anonymous communication
|
||||||
service. This second-generation Onion Routing system addresses limitations
|
service. This second-generation Onion Routing system addresses limitations
|
||||||
in the original design. Tor adds perfect forward secrecy, congestion
|
in the original design by adding perfect forward secrecy, congestion
|
||||||
control, directory servers, integrity checking, configurable exit policies,
|
control, directory servers, integrity checking, configurable exit policies,
|
||||||
and a practical design for location-hidden services via rendezvous
|
and a practical design for location-hidden services via rendezvous
|
||||||
points. Tor works on the real-world
|
points. Tor works on the real-world
|
||||||
@ -102,7 +102,7 @@ proof-of-concept that ran on a single machine. Even this simple deployment
|
|||||||
processed connections from over sixty thousand distinct IP addresses from
|
processed connections from over sixty thousand distinct IP addresses from
|
||||||
all over the world at a rate of about fifty thousand per day.
|
all over the world at a rate of about fifty thousand per day.
|
||||||
But many critical design and deployment issues were never
|
But many critical design and deployment issues were never
|
||||||
resolved, and the design has not been updated in several years. Here
|
resolved, and the design has not been updated in years. Here
|
||||||
we describe Tor, a protocol for asynchronous, loosely federated onion
|
we describe Tor, a protocol for asynchronous, loosely federated onion
|
||||||
routers that provides the following improvements over the old Onion
|
routers that provides the following improvements over the old Onion
|
||||||
Routing design:
|
Routing design:
|
||||||
@ -351,30 +351,30 @@ in stages, extending them one hop at a time.
|
|||||||
Section~\ref{subsubsec:constructing-a-circuit} describes how this
|
Section~\ref{subsubsec:constructing-a-circuit} describes how this
|
||||||
approach enables perfect forward secrecy.
|
approach enables perfect forward secrecy.
|
||||||
|
|
||||||
Circuit-based anonymity designs must choose which protocol layer
|
Circuit-based designs must choose which protocol layer
|
||||||
to anonymize. They may choose to intercept IP packets directly, and
|
to anonymize. They may intercept IP packets directly, and
|
||||||
relay them whole (stripping the source address) along the
|
relay them whole (stripping the source address) along the
|
||||||
circuit~\cite{freedom2-arch,tarzan:ccs02}. Alternatively, like
|
circuit~\cite{freedom2-arch,tarzan:ccs02}. Like
|
||||||
Tor, they may accept TCP streams and relay the data in those streams
|
Tor, they may accept TCP streams and relay the data in those streams,
|
||||||
along the circuit, ignoring the breakdown of that data into TCP
|
ignoring the breakdown of that data into TCP
|
||||||
segments~\cite{morphmix:fc04,anonnet}. Finally, they may accept
|
segments~\cite{morphmix:fc04,anonnet}. Finally, like Crowds, they may accept
|
||||||
application-level protocols (such as HTTP) and relay the application
|
application-level protocols such as HTTP and relay the application
|
||||||
requests themselves along the circuit.
|
requests themselves.
|
||||||
Making this protocol-layer decision requires a compromise between flexibility
|
Making this protocol-layer decision requires a compromise between flexibility
|
||||||
and anonymity. For example, a system that understands HTTP, such as Crowds,
|
and anonymity. For example, a system that understands HTTP
|
||||||
can strip
|
can strip
|
||||||
identifying information from those requests, can take advantage of caching
|
identifying information from requests, can take advantage of caching
|
||||||
to limit the number of requests that leave the network, and can batch
|
to limit the number of requests that leave the network, and can batch
|
||||||
or encode those requests to minimize the number of connections.
|
or encode requests to minimize the number of connections.
|
||||||
On the other hand, an IP-level anonymizer can handle nearly any protocol,
|
On the other hand, an IP-level anonymizer can handle nearly any protocol,
|
||||||
even ones unforeseen by its designers (though these systems require
|
even ones unforeseen by its designers (though these systems require
|
||||||
kernel-level modifications to some operating systems, and so are more
|
kernel-level modifications to some operating systems, and so are more
|
||||||
complex and less portable). TCP-level anonymity networks like Tor present
|
complex and less portable). TCP-level anonymity networks like Tor present
|
||||||
a middle approach: they are fairly application neutral (so long as the
|
a middle approach: they are application neutral (so long as the
|
||||||
application supports, or can be tunneled across, TCP), but by treating
|
application supports, or can be tunneled across, TCP), but by treating
|
||||||
application connections as data streams rather than raw TCP packets,
|
application connections as data streams rather than raw TCP packets,
|
||||||
they avoid the well-known inefficiencies of tunneling TCP over
|
they avoid the inefficiencies of tunneling TCP over
|
||||||
TCP~\cite{tcp-over-tcp-is-bad}.
|
TCP.
|
||||||
|
|
||||||
Distributed-trust anonymizing systems need to prevent attackers from
|
Distributed-trust anonymizing systems need to prevent attackers from
|
||||||
adding too many servers and thus compromising user paths.
|
adding too many servers and thus compromising user paths.
|
||||||
@ -428,8 +428,8 @@ delays;
|
|||||||
and should require as few configuration decisions
|
and should require as few configuration decisions
|
||||||
as possible. Finally, Tor should be easily implementable on all common
|
as possible. Finally, Tor should be easily implementable on all common
|
||||||
platforms; we cannot require users to change their operating system
|
platforms; we cannot require users to change their operating system
|
||||||
to be anonymous. (The current Tor implementation runs on Windows and
|
to be anonymous. (Tor currently runs on Win32, Linux,
|
||||||
assorted Unix clones including Linux, FreeBSD, and MacOS X.)
|
Solaris, BSD-style Unix, MacOS X, and probably others.)
|
||||||
|
|
||||||
\textbf{Flexibility:} The protocol must be flexible and well-specified,
|
\textbf{Flexibility:} The protocol must be flexible and well-specified,
|
||||||
so Tor can serve as a test-bed for future research.
|
so Tor can serve as a test-bed for future research.
|
||||||
@ -461,7 +461,7 @@ is appealing, but still has many open
|
|||||||
problems~\cite{tarzan:ccs02,morphmix:fc04}.
|
problems~\cite{tarzan:ccs02,morphmix:fc04}.
|
||||||
|
|
||||||
\textbf{Not secure against end-to-end attacks:} Tor does not claim
|
\textbf{Not secure against end-to-end attacks:} Tor does not claim
|
||||||
to provide a definitive solution to end-to-end timing or intersection
|
to completely solve end-to-end timing or intersection
|
||||||
attacks. Some approaches, such as having users run their own onion routers,
|
attacks. Some approaches, such as having users run their own onion routers,
|
||||||
may help;
|
may help;
|
||||||
see Section~\ref{sec:maintaining-anonymity} for more discussion.
|
see Section~\ref{sec:maintaining-anonymity} for more discussion.
|
||||||
@ -618,12 +618,17 @@ We give a visual overview of cell structure plus the details of relay
|
|||||||
cell structure, and then describe each of these cell types and commands
|
cell structure, and then describe each of these cell types and commands
|
||||||
in more detail below.
|
in more detail below.
|
||||||
|
|
||||||
|
%\begin{figure}[h]
|
||||||
|
%\unitlength=1cm
|
||||||
|
%\centering
|
||||||
|
%\begin{picture}(8.0,1.5)
|
||||||
|
%\put(4,.5){\makebox(0,0)[c]{\epsfig{file=cell-struct,width=7cm}}}
|
||||||
|
%\end{picture}
|
||||||
|
%\end{figure}
|
||||||
|
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\unitlength=1cm
|
|
||||||
\centering
|
\centering
|
||||||
\begin{picture}(8.0,1.5)
|
\mbox{\epsfig{figure=cell-struct,width=7cm}}
|
||||||
\put(4,.5){\makebox(0,0)[c]{\epsfig{file=cell-struct,width=7cm}}}
|
|
||||||
\end{picture}
|
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\subsection{Circuits and streams}
|
\subsection{Circuits and streams}
|
||||||
@ -645,7 +650,7 @@ even heavy users spend negligible time
|
|||||||
building circuits, but a limited number of requests can be linked
|
building circuits, but a limited number of requests can be linked
|
||||||
to each other through a given exit node. Also, because circuits are built
|
to each other through a given exit node. Also, because circuits are built
|
||||||
in the background, OPs can recover from failed circuit creation
|
in the background, OPs can recover from failed circuit creation
|
||||||
without delaying streams and thereby harming user experience.\\
|
without harming user experience.\\
|
||||||
|
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\centering
|
\centering
|
||||||
@ -665,8 +670,8 @@ circID $C_{AB}$ not currently used on the connection from her to Bob.)
|
|||||||
The \emph{create} cell's
|
The \emph{create} cell's
|
||||||
payload contains the first half of the Diffie-Hellman handshake
|
payload contains the first half of the Diffie-Hellman handshake
|
||||||
($g^x$), encrypted to the onion key of the OR (call him Bob). Bob
|
($g^x$), encrypted to the onion key of the OR (call him Bob). Bob
|
||||||
responds with a \emph{created} cell containing the second half of the
|
responds with a \emph{created} cell containing $g^y$
|
||||||
DH handshake, along with a hash of the negotiated key $K=g^{xy}$.
|
along with a hash of the negotiated key $K=g^{xy}$.
|
||||||
|
|
||||||
Once the circuit has been established, Alice and Bob can send one
|
Once the circuit has been established, Alice and Bob can send one
|
||||||
another relay cells encrypted with the negotiated
|
another relay cells encrypted with the negotiated
|
||||||
@ -694,7 +699,7 @@ extend one hop further.
|
|||||||
This circuit-level handshake protocol achieves unilateral entity
|
This circuit-level handshake protocol achieves unilateral entity
|
||||||
authentication (Alice knows she's handshaking with the OR, but
|
authentication (Alice knows she's handshaking with the OR, but
|
||||||
the OR doesn't care who is opening the circuit---Alice uses no public key
|
the OR doesn't care who is opening the circuit---Alice uses no public key
|
||||||
and is trying to remain anonymous) and unilateral key authentication
|
and remains anonymous) and unilateral key authentication
|
||||||
(Alice and the OR agree on a key, and Alice knows only the OR learns
|
(Alice and the OR agree on a key, and Alice knows only the OR learns
|
||||||
it). It also achieves forward
|
it). It also achieves forward
|
||||||
secrecy and key freshness. More formally, the protocol is as follows
|
secrecy and key freshness. More formally, the protocol is as follows
|
||||||
@ -729,8 +734,8 @@ cell, an OR looks up the corresponding circuit, and decrypts the relay
|
|||||||
header and payload with the session key for that circuit.
|
header and payload with the session key for that circuit.
|
||||||
If the cell is headed away from Alice the OR then checks whether the
|
If the cell is headed away from Alice the OR then checks whether the
|
||||||
decrypted cell has a valid digest (as an optimization, the first
|
decrypted cell has a valid digest (as an optimization, the first
|
||||||
two bytes of the integrity check are zero, so we only need to compute
|
two bytes of the integrity check are zero, so in most cases we can avoid
|
||||||
the hash if the first two bytes are zero).
|
computing the hash).
|
||||||
%is recognized---either because it
|
%is recognized---either because it
|
||||||
%corresponds to an open stream at this OR for the given circuit, or because
|
%corresponds to an open stream at this OR for the given circuit, or because
|
||||||
%it is the control streamID (zero).
|
%it is the control streamID (zero).
|
||||||
@ -793,12 +798,11 @@ attack~\cite{freedom21-security} is weakened.
|
|||||||
When Alice's application wants a TCP connection to a given
|
When Alice's application wants a TCP connection to a given
|
||||||
address and port, it asks the OP (via SOCKS) to make the
|
address and port, it asks the OP (via SOCKS) to make the
|
||||||
connection. The OP chooses the newest open circuit (or creates one if
|
connection. The OP chooses the newest open circuit (or creates one if
|
||||||
none is available), and chooses a suitable OR on that circuit to be the
|
needed), and chooses a suitable OR on that circuit to be the
|
||||||
exit node (usually the last node, but maybe others due to exit policy
|
exit node (usually the last node, but maybe others due to exit policy
|
||||||
conflicts; see Section~\ref{subsec:exitpolicies}.) The OP then opens
|
conflicts; see Section~\ref{subsec:exitpolicies}.) The OP then opens
|
||||||
the stream by sending a \emph{relay begin} cell to the exit node,
|
the stream by sending a \emph{relay begin} cell to the exit node,
|
||||||
using a new random streamID, with the destination address and port in
|
using a new random streamID. Once the
|
||||||
the relay payload. Once the
|
|
||||||
exit node connects to the remote host, it responds
|
exit node connects to the remote host, it responds
|
||||||
with a \emph{relay connected} cell. Upon receipt, the OP sends a
|
with a \emph{relay connected} cell. Upon receipt, the OP sends a
|
||||||
SOCKS reply to notify the application of its success. The OP
|
SOCKS reply to notify the application of its success. The OP
|
||||||
@ -821,7 +825,7 @@ But a portable general solution, such as is needed for
|
|||||||
SSH, is
|
SSH, is
|
||||||
an open problem. Modifying or replacing the local nameserver
|
an open problem. Modifying or replacing the local nameserver
|
||||||
can be invasive, brittle, and unportable. Forcing the resolver
|
can be invasive, brittle, and unportable. Forcing the resolver
|
||||||
library to do resolution via TCP rather than UDP is hard, and also has
|
library to prefer TCP rather than UDP is hard, and also has
|
||||||
portability problems. Dynamically intercepting system calls to the
|
portability problems. Dynamically intercepting system calls to the
|
||||||
resolver library seems a promising direction. We could also provide
|
resolver library seems a promising direction. We could also provide
|
||||||
a tool similar to \emph{dig} to perform a private lookup through the
|
a tool similar to \emph{dig} to perform a private lookup through the
|
||||||
@ -832,8 +836,8 @@ Closing a Tor stream is analogous to closing a TCP stream: it uses a
|
|||||||
two-step handshake for normal operation, or a one-step handshake for
|
two-step handshake for normal operation, or a one-step handshake for
|
||||||
errors. If the stream closes abnormally, the adjacent node simply sends a
|
errors. If the stream closes abnormally, the adjacent node simply sends a
|
||||||
\emph{relay teardown} cell. If the stream closes normally, the node sends
|
\emph{relay teardown} cell. If the stream closes normally, the node sends
|
||||||
a \emph{relay end} cell down the circuit. When the other side has sent
|
a \emph{relay end} cell down the circuit, and the other side responds with
|
||||||
back its own \emph{relay end} cell, the stream can be torn down. Because
|
its own \emph{relay end} cell. Because
|
||||||
all relay cells use layered encryption, only the destination OR knows
|
all relay cells use layered encryption, only the destination OR knows
|
||||||
that a given relay cell is a request to close a stream. This two-step
|
that a given relay cell is a request to close a stream. This two-step
|
||||||
handshake allows Tor to support TCP-based applications that use half-closed
|
handshake allows Tor to support TCP-based applications that use half-closed
|
||||||
@ -857,9 +861,8 @@ adversary's webserver; or change an FTP command from
|
|||||||
adversary could do this, because the link encryption similarly used a
|
adversary could do this, because the link encryption similarly used a
|
||||||
stream cipher.)
|
stream cipher.)
|
||||||
|
|
||||||
Tor uses TLS on its links---the integrity checking in TLS
|
Because Tor uses TLS on its links, external adversaries cannot modify
|
||||||
protects data from modification by external adversaries.
|
data. Addressing the insider malleability attack, however, is
|
||||||
Addressing the insider malleability attack, however, is
|
|
||||||
more complex.
|
more complex.
|
||||||
|
|
||||||
We could do integrity checking of the relay cells at each hop, either
|
We could do integrity checking of the relay cells at each hop, either
|
||||||
@ -874,13 +877,13 @@ other ORs' session keys. Third, we have already accepted that our design
|
|||||||
is vulnerable to end-to-end timing attacks; so tagging attacks performed
|
is vulnerable to end-to-end timing attacks; so tagging attacks performed
|
||||||
within the circuit provide no additional information to the attacker.
|
within the circuit provide no additional information to the attacker.
|
||||||
|
|
||||||
Thus, we check integrity only at the edges of each stream (remember that
|
Thus, we check integrity only at the edges of each stream. (Remember that
|
||||||
we use a leaky-pipe circuit topology, so a stream's edge could be any hop
|
in our leaky-pipe circuit topology, a stream's edge could be any hop
|
||||||
in the circuit). When Alice
|
in the circuit.) When Alice
|
||||||
negotiates a key with a new hop, they each initialize a SHA-1
|
negotiates a key with a new hop, they each initialize a SHA-1
|
||||||
digest with a derivative of that key,
|
digest with a derivative of that key,
|
||||||
thus beginning with randomness that only the two of them know. From
|
thus beginning with randomness that only the two of them know.
|
||||||
then on they each incrementally add to the SHA-1 digest the contents of
|
Then they each incrementally add to the SHA-1 digest the contents of
|
||||||
all relay cells they create, and include with each relay cell the
|
all relay cells they create, and include with each relay cell the
|
||||||
first four bytes of the current digest. Each also keeps a SHA-1
|
first four bytes of the current digest. Each also keeps a SHA-1
|
||||||
digest of data received, to verify that the received hashes are correct.
|
digest of data received, to verify that the received hashes are correct.
|
||||||
@ -918,14 +921,13 @@ permitting short-term bursts above the allowed bandwidth.
|
|||||||
%this procedure until the number of tokens in the bucket is under some
|
%this procedure until the number of tokens in the bucket is under some
|
||||||
%threshold (currently 10KB), at which point we greedily read from connections.
|
%threshold (currently 10KB), at which point we greedily read from connections.
|
||||||
|
|
||||||
Because the Tor protocol generates roughly the same number of outgoing
|
Because the Tor protocol outputs about the same number of bytes as it
|
||||||
bytes as incoming bytes, it is sufficient in practice to limit only
|
takes in, it is sufficient in practice to limit only incoming bytes.
|
||||||
incoming bytes.
|
|
||||||
With TCP streams, however, the correspondence is not one-to-one:
|
With TCP streams, however, the correspondence is not one-to-one:
|
||||||
relaying a single incoming byte can require an entire 512-byte cell.
|
relaying a single incoming byte can require an entire 512-byte cell.
|
||||||
(We can't just wait for more bytes, because the local application may
|
(We can't just wait for more bytes, because the local application may
|
||||||
be waiting for a reply.) Therefore, we treat this case as if the entire
|
be awaiting a reply.) Therefore, we treat this case as if the entire
|
||||||
cell size had been read, regardless of the fullness of the cell.
|
cell size had been read, regardless of the cell's fullness.
|
||||||
|
|
||||||
Further, inspired by Rennhard et al's design in~\cite{anonnet}, a
|
Further, inspired by Rennhard et al's design in~\cite{anonnet}, a
|
||||||
circuit's edges can heuristically distinguish interactive streams from bulk
|
circuit's edges can heuristically distinguish interactive streams from bulk
|
||||||
@ -1028,7 +1030,7 @@ We provide location-hiding for Bob by allowing him to advertise
|
|||||||
several onion routers (his \emph{introduction points}) as contact
|
several onion routers (his \emph{introduction points}) as contact
|
||||||
points. He may do this on any robust efficient
|
points. He may do this on any robust efficient
|
||||||
key-value lookup system with authenticated updates, such as a
|
key-value lookup system with authenticated updates, such as a
|
||||||
distributed hash table (DHT) like CFS~\cite{cfs:sosp01}\footnote{
|
distributed hash table (DHT) like CFS~\cite{cfs:sosp01}.\footnote{
|
||||||
Rather than rely on an external infrastructure, the Onion Routing network
|
Rather than rely on an external infrastructure, the Onion Routing network
|
||||||
can run the lookup service itself. Our current implementation provides a
|
can run the lookup service itself. Our current implementation provides a
|
||||||
simple lookup system on the
|
simple lookup system on the
|
||||||
@ -1053,7 +1055,7 @@ application integration is described more fully below.
|
|||||||
\begin{tightlist}
|
\begin{tightlist}
|
||||||
\item Bob generates a long-term public key pair to identify his service.
|
\item Bob generates a long-term public key pair to identify his service.
|
||||||
\item Bob chooses some introduction points, and advertises them on
|
\item Bob chooses some introduction points, and advertises them on
|
||||||
the lookup service, singing the advertisement with his public key. He
|
the lookup service, signing the advertisement with his public key. He
|
||||||
can add more later.
|
can add more later.
|
||||||
\item Bob builds a circuit to each of his introduction points, and tells
|
\item Bob builds a circuit to each of his introduction points, and tells
|
||||||
them to wait for requests.
|
them to wait for requests.
|
||||||
@ -1086,9 +1088,9 @@ application integration is described more fully below.
|
|||||||
\end{tightlist}
|
\end{tightlist}
|
||||||
|
|
||||||
When establishing an introduction point, Bob provides the onion router
|
When establishing an introduction point, Bob provides the onion router
|
||||||
with the public key identifying his service. Since Bob signs his
|
with the public key identifying his service. Bob signs his
|
||||||
messages, this prevents anybody else from usurping Bob's introduction point
|
messages, so others cannot usurp his introduction point
|
||||||
in the future. Bob uses the same public key to establish the other
|
in the future. He uses the same public key to establish the other
|
||||||
introduction points for his service, and periodically refreshes his
|
introduction points for his service, and periodically refreshes his
|
||||||
entry in the lookup service.
|
entry in the lookup service.
|
||||||
|
|
||||||
@ -1126,7 +1128,7 @@ some selected users collude in the DoS\@.
|
|||||||
|
|
||||||
Bob configures his onion proxy to know the local IP address and port of his
|
Bob configures his onion proxy to know the local IP address and port of his
|
||||||
service, a strategy for authorizing clients, and his public key. The onion
|
service, a strategy for authorizing clients, and his public key. The onion
|
||||||
proxy anonymously publishes a signed statment of Bob's
|
proxy anonymously publishes a signed statement of Bob's
|
||||||
public key, an expiration time, and
|
public key, an expiration time, and
|
||||||
the current introduction points for his service onto the lookup service,
|
the current introduction points for his service onto the lookup service,
|
||||||
indexed
|
indexed
|
||||||
@ -1135,7 +1137,7 @@ and doesn't even know that it's hidden behind the Tor network.
|
|||||||
|
|
||||||
Alice's applications also work unchanged---her client interface
|
Alice's applications also work unchanged---her client interface
|
||||||
remains a SOCKS proxy. We encode all of the necessary information
|
remains a SOCKS proxy. We encode all of the necessary information
|
||||||
into the fully qualified domain name Alice uses when establishing her
|
into the fully qualified domain name (FQDN) Alice uses when establishing her
|
||||||
connection. Location-hidden services use a virtual top level domain
|
connection. Location-hidden services use a virtual top level domain
|
||||||
called {\tt .onion}: thus hostnames take the form {\tt x.y.onion} where
|
called {\tt .onion}: thus hostnames take the form {\tt x.y.onion} where
|
||||||
{\tt x} is the authorization cookie and {\tt y} encodes the hash of
|
{\tt x} is the authorization cookie and {\tt y} encodes the hash of
|
||||||
@ -1173,7 +1175,7 @@ acknowledge his existence.
|
|||||||
\section{Other design decisions}
|
\section{Other design decisions}
|
||||||
\label{sec:other-design}
|
\label{sec:other-design}
|
||||||
|
|
||||||
\subsection{Resource management and denial-of-service}
|
\subsection{Denial of service}
|
||||||
\label{subsec:dos}
|
\label{subsec:dos}
|
||||||
|
|
||||||
Providing Tor as a public service creates many opportunities for
|
Providing Tor as a public service creates many opportunities for
|
||||||
@ -1217,7 +1219,7 @@ when a router crashes or its operator restarts it. The current
|
|||||||
Tor design treats such attacks as intermittent network failures, and
|
Tor design treats such attacks as intermittent network failures, and
|
||||||
depends on users and applications to respond or recover as appropriate. A
|
depends on users and applications to respond or recover as appropriate. A
|
||||||
future design could use an end-to-end TCP-like acknowledgment protocol,
|
future design could use an end-to-end TCP-like acknowledgment protocol,
|
||||||
so that no streams are lost unless the entry or exit point itself is
|
so no streams are lost unless the entry or exit point is
|
||||||
disrupted. This solution would require more buffering at the network
|
disrupted. This solution would require more buffering at the network
|
||||||
edges, however, and the performance and anonymity implications from this
|
edges, however, and the performance and anonymity implications from this
|
||||||
extra complexity still require investigation.
|
extra complexity still require investigation.
|
||||||
@ -1250,21 +1252,21 @@ and the volunteers who run them may not want to deal with the hassle of
|
|||||||
explaining anonymity networks to irate administrators, we must block or limit
|
explaining anonymity networks to irate administrators, we must block or limit
|
||||||
abuse through the Tor network.
|
abuse through the Tor network.
|
||||||
|
|
||||||
To mitigate abuse issues, in Tor, each onion router's \emph{exit policy}
|
To mitigate abuse issues, each onion router's \emph{exit policy}
|
||||||
describes to which external addresses and ports the router will
|
describes to which external addresses and ports the router will
|
||||||
connect. On one end of the spectrum are \emph{open exit}
|
connect. On one end of the spectrum are \emph{open exit}
|
||||||
nodes that will connect anywhere. On the other end are \emph{middleman}
|
nodes that will connect anywhere. On the other end are \emph{middleman}
|
||||||
nodes that only relay traffic to other Tor nodes, and \emph{private exit}
|
nodes that only relay traffic to other Tor nodes, and \emph{private exit}
|
||||||
nodes that only connect to a local host or network. Using a private
|
nodes that only connect to a local host or network. A private
|
||||||
exit (if one exists) is a more secure way for a client to connect to a
|
exit can allow a client to connect to a given host or
|
||||||
given host or network---an external adversary cannot eavesdrop traffic
|
network more securely---an external adversary cannot eavesdrop traffic
|
||||||
between the private exit and the final destination, and so is less sure of
|
between the private exit and the final destination, and so is less sure of
|
||||||
Alice's destination and activities. Most onion routers in the current
|
Alice's destination and activities. Most onion routers in the current
|
||||||
network function as
|
network function as
|
||||||
\emph{restricted exits} that permit connections to the world at large,
|
\emph{restricted exits} that permit connections to the world at large,
|
||||||
but prevent access to certain abuse-prone addresses and services such
|
but prevent access to certain abuse-prone addresses and services such
|
||||||
as SMTP.
|
as SMTP.
|
||||||
Additionally, in some cases the OR can authenticate clients to
|
The OR might also be able to authenticate clients to
|
||||||
prevent exit abuse without harming anonymity~\cite{or-discex00}.
|
prevent exit abuse without harming anonymity~\cite{or-discex00}.
|
||||||
|
|
||||||
%The abuse issues on closed (e.g. military) networks are different
|
%The abuse issues on closed (e.g. military) networks are different
|
||||||
@ -1351,9 +1353,9 @@ to bootstrap each client's view of the network.
|
|||||||
|
|
||||||
When a directory server receives a signed statement for an OR, it
|
When a directory server receives a signed statement for an OR, it
|
||||||
checks whether the OR's identity key is recognized. Directory
|
checks whether the OR's identity key is recognized. Directory
|
||||||
servers do not automatically advertise unrecognized ORs. (If they did,
|
servers do not advertise unrecognized ORs---if they did,
|
||||||
an adversary could take over the network by creating many
|
an adversary could take over the network by creating many
|
||||||
servers~\cite{sybil}.) Instead, new nodes must be approved by the
|
servers~\cite{sybil}. Instead, new nodes must be approved by the
|
||||||
directory
|
directory
|
||||||
server administrator before they are included. Mechanisms for automated
|
server administrator before they are included. Mechanisms for automated
|
||||||
node approval are an area of active research, and are discussed more
|
node approval are an area of active research, and are discussed more
|
||||||
@ -1421,7 +1423,7 @@ directories can be cached by other
|
|||||||
onion routers,
|
onion routers,
|
||||||
so directory servers are not a performance
|
so directory servers are not a performance
|
||||||
bottleneck when we have many users, and do not aid traffic analysis by
|
bottleneck when we have many users, and do not aid traffic analysis by
|
||||||
forcing clients to periodically announce their existence to any
|
forcing clients to announce their existence to any
|
||||||
central point.
|
central point.
|
||||||
|
|
||||||
\section{Attacks and Defenses}
|
\section{Attacks and Defenses}
|
||||||
@ -1558,10 +1560,10 @@ run multiple ORs, and can persuade the directory servers
|
|||||||
that those ORs are trustworthy and independent, then occasionally
|
that those ORs are trustworthy and independent, then occasionally
|
||||||
some user will choose one of those ORs for the start and another
|
some user will choose one of those ORs for the start and another
|
||||||
as the end of a circuit. If an adversary
|
as the end of a circuit. If an adversary
|
||||||
controls $m>1$ out of $N$ nodes, he can correlate at most
|
controls $m>1$ of $N$ nodes, he can correlate at most
|
||||||
$\left(\frac{m}{N}\right)^2$ of the traffic in this way---although an
|
$\left(\frac{m}{N}\right)^2$ of the traffic---although an
|
||||||
adversary
|
adversary
|
||||||
could possibly attract a disproportionately large amount of traffic
|
could still attract a disproportionately large amount of traffic
|
||||||
by running an OR with a permissive exit policy, or by
|
by running an OR with a permissive exit policy, or by
|
||||||
degrading the reliability of other routers.
|
degrading the reliability of other routers.
|
||||||
|
|
||||||
@ -1686,8 +1688,8 @@ with a session key shared by Alice and Bob.
|
|||||||
|
|
||||||
As of mid-May 2004, the Tor network consists of 32 nodes
|
As of mid-May 2004, the Tor network consists of 32 nodes
|
||||||
(24 in the US, 8 in Europe), and more are joining each week as the code
|
(24 in the US, 8 in Europe), and more are joining each week as the code
|
||||||
matures.\footnote{For comparison, the current remailer network
|
matures. (For comparison, the current remailer network
|
||||||
has about 30 reliable nodes.} % We haven't asked PlanetLab to provide
|
has about 40 nodes.) % We haven't asked PlanetLab to provide
|
||||||
%Tor nodes, since their AUP wouldn't allow exit nodes (see
|
%Tor nodes, since their AUP wouldn't allow exit nodes (see
|
||||||
%also~\cite{darkside}) and because we aim to build a long-term community of
|
%also~\cite{darkside}) and because we aim to build a long-term community of
|
||||||
%node operators and developers.}
|
%node operators and developers.}
|
||||||
@ -1697,7 +1699,10 @@ tell for sure), but we sometimes have several hundred users---administrators at
|
|||||||
several companies have begun sending their entire departments' web
|
several companies have begun sending their entire departments' web
|
||||||
traffic through Tor, to block other divisions of
|
traffic through Tor, to block other divisions of
|
||||||
their company from reading their traffic. Tor users have reported using
|
their company from reading their traffic. Tor users have reported using
|
||||||
the network for web browsing, FTP, IRC, AIM, Kazaa, and SSH.
|
the network for web browsing, FTP, IRC, AIM, Kazaa, SSH, and
|
||||||
|
recipient-anonymous email via rendezvous points. One user has anonymously
|
||||||
|
set up a Wiki as a hidden service, where other users anonymously publish
|
||||||
|
the addresses of their hidden services.
|
||||||
|
|
||||||
Each Tor node currently processes roughly 800,000 relay
|
Each Tor node currently processes roughly 800,000 relay
|
||||||
cells (a bit under half a gigabyte) per week. On average, about 80\%
|
cells (a bit under half a gigabyte) per week. On average, about 80\%
|
||||||
@ -1750,15 +1755,15 @@ proceed with development. %\footnote{For example, we have just begun pushing
|
|||||||
|
|
||||||
%With the current network's topology and load, users can typically get 1-2
|
%With the current network's topology and load, users can typically get 1-2
|
||||||
%megabits sustained transfer rate, which is good enough for now.
|
%megabits sustained transfer rate, which is good enough for now.
|
||||||
Indeed, the Tor
|
%Indeed, the Tor
|
||||||
design aims foremost to provide a security research platform; performance
|
%design aims foremost to provide a security research platform; performance
|
||||||
only needs to be sufficient to retain users~\cite{econymics,back01}.
|
%only needs to be sufficient to retain users~\cite{econymics,back01}.
|
||||||
We can tweak the congestion control
|
%We can tweak the congestion control
|
||||||
parameters to provide faster throughput at the cost of
|
%parameters to provide faster throughput at the cost of
|
||||||
larger buffers at each node; adding the heuristics mentioned in
|
%larger buffers at each node; adding the heuristics mentioned in
|
||||||
Section~\ref{subsec:rate-limit} to favor low-volume
|
%Section~\ref{subsec:rate-limit} to favor low-volume
|
||||||
streams may also help. More research remains to find the
|
%streams may also help. More research remains to find the
|
||||||
right balance.
|
%right balance.
|
||||||
% We should say _HOW MUCH_ latency there is in these cases. -NM
|
% We should say _HOW MUCH_ latency there is in these cases. -NM
|
||||||
|
|
||||||
%performs badly on lossy networks. may need airhook or something else as
|
%performs badly on lossy networks. may need airhook or something else as
|
||||||
@ -1774,7 +1779,7 @@ topology will help us choose among alternatives when the time comes.
|
|||||||
\label{sec:maintaining-anonymity}
|
\label{sec:maintaining-anonymity}
|
||||||
|
|
||||||
In addition to the non-goals in
|
In addition to the non-goals in
|
||||||
Section~\ref{subsec:non-goals}, many other questions must be solved
|
Section~\ref{subsec:non-goals}, many questions must be solved
|
||||||
before we can be confident of Tor's security.
|
before we can be confident of Tor's security.
|
||||||
|
|
||||||
Many of these open issues are questions of balance. For example,
|
Many of these open issues are questions of balance. For example,
|
||||||
@ -1795,7 +1800,7 @@ needed to determine the proper tradeoff.
|
|||||||
%decentralized yet practical ways to distribute up-to-date snapshots of
|
%decentralized yet practical ways to distribute up-to-date snapshots of
|
||||||
%network status without introducing new attacks.
|
%network status without introducing new attacks.
|
||||||
|
|
||||||
How should we choose path lengths? If Alice only ever uses two hops,
|
How should we choose path lengths? If Alice always uses two hops,
|
||||||
then both ORs can be certain that by colluding they will learn about
|
then both ORs can be certain that by colluding they will learn about
|
||||||
Alice and Bob. In our current approach, Alice always chooses at least
|
Alice and Bob. In our current approach, Alice always chooses at least
|
||||||
three nodes unrelated to herself and her destination.
|
three nodes unrelated to herself and her destination.
|
||||||
@ -1806,10 +1811,10 @@ three nodes unrelated to herself and her destination.
|
|||||||
%Thus normally she chooses
|
%Thus normally she chooses
|
||||||
%three nodes, but if she is running an OR and her destination is on an OR,
|
%three nodes, but if she is running an OR and her destination is on an OR,
|
||||||
%she uses five.
|
%she uses five.
|
||||||
Should Alice choose a random path length (say,
|
Should Alice choose a random path length (e.g.~from a geometric
|
||||||
increasing it from a geometric distribution) to foil an attacker who
|
distribution) to foil an attacker who
|
||||||
uses timing to learn that he is the fifth hop and thus concludes that
|
uses timing to learn that he is the fifth hop and thus concludes that
|
||||||
both Alice and the responder are on ORs?
|
both Alice and the responder are running ORs?
|
||||||
|
|
||||||
Throughout this paper, we have assumed that end-to-end traffic
|
Throughout this paper, we have assumed that end-to-end traffic
|
||||||
confirmation will immediately and automatically defeat a low-latency
|
confirmation will immediately and automatically defeat a low-latency
|
||||||
|
Loading…
Reference in New Issue
Block a user