| 
					
				 | 
			
			
				@@ -574,12 +574,110 @@ for all transactions (and how to know that the pages you get have not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 been modified by the local attacker) to how to learn about a working 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bridge relay. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The following section describes ways to bootstrap knowledge of your first 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bridge relay, and ways to maintain connectivity once you know a few 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bridge relays. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+There's another catch though. We need to make sure that simply connecting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+to a bridge relay doesn't set off red flags. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+%The following section describes ways to bootstrap knowledge of your first 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+%bridge relay, and ways to maintain connectivity once you know a few 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+%bridge relays. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 % (See Section~\ref{subsec:first-bridge} for a discussion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 %of exactly what information is sufficient to characterize a bridge relay.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\section{Hiding Tor's network signatures} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\label{sec:network-signature} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\label{subsec:enclave-dirs} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Currently, Tor uses two protocols for its network communications. The 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+main protocol uses TLS for encrypted and authenticated communication 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+between Tor instances. The second protocol is standard HTTP, used for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fetching directory information. All Tor servers listen on their ``ORPort'' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+for TLS connections, and some of them opt to listen on their ``DirPort'' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+as well, to serve directory information. Tor servers choose whatever port 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+numbers they like; the server descriptor they publish to the directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+tells users where to connect. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+One format for communicating address information about a bridge relay is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+its IP address and DirPort. From there, the user can ask the bridge's 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+directory cache for an up-to-date copy of its server descriptor, and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+learn its current circuit keys, its ORPort, and so on. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+However, connecting directly to the directory cache involves a plaintext 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+HTTP request. A censor could create a network signature for the request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+and/or its response, thus preventing these connections. To resolve this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+vulnerability, we've modified the Tor protocol so that users can connect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+to the directory cache via the main Tor port --- they establish a TLS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+connection with the bridge as normal, and then send a special ``begindir'' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+relay command to establish an internal connection to its directory cache. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Therefore a better way to summarize a bridge's address is by its IP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+address and ORPort, so all communications between the client and the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bridge will the ordinary TLS. But there are other details that need 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+more investigation. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+What port should bridges pick for their ORPort? We currently recommend 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+that they listen on port 443 (the default HTTPS port) if they want to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+be most useful, because clients behind standard firewalls will have 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the best chance to reach them. Is this the best choice in all cases, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+or should we encourage some fraction of them pick random ports, or other 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ports commonly permitted on firewalls like 53 (DNS) or 110 (POP)? We need 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+more research on our potential users, and their current and anticipated 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+firewall restrictions. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Furthermore, we need to look at the specifics of Tor's TLS handshake. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Right now Tor uses some predictable strings in its TLS handshakes. For 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+example, it sets the X.509 organizationName field to "Tor", and it puts 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the Tor server's nickname in the certificate's commonName field. We 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+should tweak the handshake protocol so it doesn't rely on any details 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+in the certificate headers, yet it remains secure. Should we replace 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+it with blank entries for each field, or should we research the common 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+values that Firefox and Internet Explorer use and try to imitate those? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Lastly, Tor's TLS handshake involves sending two certificates in each 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+direction: one certificate contains the self-signed identity key for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the router, and the second contains the current link key, signed by the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+identity key. We use these to authenticate that we're talking to the right 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+router, and also to establish perfect forward secrecy for that link. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+How much will these extra certificates make Tor's TLS handshake stand 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+out? We have to work on normalizing our appearance not just in terms 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+of the fields used in each certificate, but also in the number of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+certificates we present for each side. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+% Nick, I need help with the above paragraph. What are the two certs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+% for really, and how much work would it be to start acting like a normal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+% browser? -RD 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\subsection{Identity keys as part of addressing information} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+We have described a way for the blocked user to bootstrap into the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+network once he knows the IP address and ORPort of a bridge. What about 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+local spoofing attacks? That is, since we never learned an identity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+key fingerprint for the bridge, a local attacker could intercept our 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+connection and pretend to be the bridge we had in mind. It turns out 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+that giving false information isn't that bad --- since the Tor client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ships with trusted keys for the bridge directory authority and the Tor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+network directory authorities, the user can learn whether he's being 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+given a real connection to the bridge authorities or not. (After all, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if the adversary intercepts every connection the user makes and gives 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+him a bad connection each time, there's nothing we can do.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+What about anonymity-breaking attacks from observing traffic, if the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+blocked user doesn't start out knowing the identity key of his intended 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bridge? The vulnerabilities aren't so bad in this case either --- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the adversary could do the same attacks just by monitoring the network 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+traffic. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Once the Tor client has fetched the bridge's server descriptor, it should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+remember the identity key fingerprint for that bridge relay. Thus if 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the bridge relay moves to a new IP address, the client can query the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bridge directory authority to look up a fresh server descriptor using 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+this fingerprint. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+So we've shown that it's \emph{possible} to bootstrap into the network 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+just by learning the IP address and ORPort of a bridge, but are there 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+situations where it's more convenient or more secure to learn the bridge's 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+identity fingerprint as well as instead, while bootstrapping? We keep 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+that question in mind as we next investigate bootstrapping and discovery. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \section{Discovering and maintaining working bridge relays} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \label{sec:discovery} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -797,70 +895,6 @@ solution though. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \section{Security considerations} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \label{sec:security} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\subsection{Hiding Tor's network signatures} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\label{subsec:enclave-dirs} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-A short paragraph about Tor's current network appearance. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The simplest format for communicating information about a bridge relay 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-is as an IP address and port for its directory cache. From there, the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-user can ask the directory cache for an up-to-date copy of that bridge 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-relay's server descriptor, to learn its current circuit keys, the port 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-it uses for Tor connections, and so on. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-However, connecting directly to the directory cache involves a plaintext 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-HTTP request. A censor could create a network signature for the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-request and/or its response, thus preventing these connections. Therefore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-we've modified the Tor protocol so that users can connect to the directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-cache via the main Tor port --- they establish a TLS connection with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-the bridge as normal, and then send a Tor "begindir" relay cell to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-establish a connection to its directory cache. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Predictable SSL ports: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-We should encourage most servers to listen on port 443, which is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-where SSL normally listens. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Is that all it will take, or should we set things up so some fraction 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-of them pick random ports? I can see that both helping and hurting. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Predictable TLS handshakes: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Right now Tor has some predictable strings in its TLS handshakes. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-These can be removed; but should they be replaced with nothing, or 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-should we try to emulate some popular browser? In any case our 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-protocol demands a pair of certs on both sides --- how much will this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-make Tor handshakes stand out? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\subsection{Minimum info required to describe a bridge} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-In the previous subsection, we described a way for the bridge user 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-to bootstrap into the network just by knowing the IP address and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Tor port of a bridge. What about local spoofing attacks? That is, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-since we never learned an identity key fingerprint for the bridge, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-a local attacker could intercept our connection and pretend to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-the bridge we had in mind. It turns out that giving false information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-isn't that bad --- since the Tor client ships with trusted keys for the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bridge directory authority and the Tor network directory authorities, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-the user can learn whether he's being given a real connection to the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bridge authorities or not. (If the adversary intercepts every connection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-the user makes and gives him a bad connection each time, there's nothing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-we can do.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-What about anonymity-breaking attacks from observing traffic? Not so bad 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-either, since the adversary could do the same attacks just by monitoring 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-the network traffic. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Once the Tor client has fetched the bridge's server descriptor at least 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-once, he should remember the identity key fingerprint for that bridge 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-relay. Thus if the bridge relay moves to a new IP address, the client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-can then query the bridge directory authority to look up a fresh server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-descriptor using this fingerprint. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-So we've shown that it's \emph{possible} to bootstrap into the network 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-just by learning the IP address and port of a bridge, but are there 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-situations where it's more convenient or more secure to learn its 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-identity fingerprint at the beginning too? We discuss that question 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-more in Section~\ref{sec:bootstrapping}, but first we introduce more 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-security topics. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection{Observers can tell who is publishing and who is reading} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \label{subsec:upload-padding} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |