Update TBB design doc with suggestions from Georg Koppen, pde, and Sid.
Mike Perry

Mike Perry commited on 2011-10-05 07:48:34
Zeige 2 geänderte Dateien mit 230 Einfügungen und 160 Löschungen.

... ...
@@ -1,18 +1,19 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:erinn_torproject\org">erinn_torproject\org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:sjmurdoch#torproject\org">sjmurdoch#torproject\org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">Sep 29 2011</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#id2974058">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary">1.1. Adversary Model</a></span></dt></dl></dd><dt><span class="sect1"><a href="#DesignRequirements">2. Design Requirements and Philosophy</a></span></dt><dd><dl><dt><span class="sect2"><a href="#security">2.1. Security Requirements</a></span></dt><dt><span class="sect2"><a href="#privacy">2.2. Privacy Requirements</a></span></dt><dt><span class="sect2"><a href="#philosophy">2.3. Philosophy</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">3. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">3.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">3.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">3.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">3.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">3.5. Cross-Domain Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">3.6. Cross-Domain Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">3.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#click-to-play">3.8. Click-to-play for plugins and invasive content</a></span></dt><dt><span class="sect2"><a href="#firefox-patches">3.9. Description of Firefox Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Packaging">4. Packaging</a></span></dt><dd><dl><dt><span class="sect2"><a href="#build-security">4.1. Build Process Security</a></span></dt><dt><span class="sect2"><a href="#addons">4.2. External Addons</a></span></dt><dt><span class="sect2"><a href="#prefs">4.3. Pref Changes</a></span></dt><dt><span class="sect2"><a href="#update-mechanism">4.4. Update Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Testing">5. Testing</a></span></dt><dd><dl><dt><span class="sect2"><a href="#SingleStateTesting">5.1. Single state testing</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2974058"></a>1. Introduction</h2></div></div></div><p>
3
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">Oct 4 2011</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#id2748505">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary">1.1. Adversary Model</a></span></dt></dl></dd><dt><span class="sect1"><a href="#DesignRequirements">2. Design Requirements and Philosophy</a></span></dt><dd><dl><dt><span class="sect2"><a href="#security">2.1. Security Requirements</a></span></dt><dt><span class="sect2"><a href="#privacy">2.2. Privacy Requirements</a></span></dt><dt><span class="sect2"><a href="#philosophy">2.3. Philosophy</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">3. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">3.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">3.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">3.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">3.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">3.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">3.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">3.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#click-to-play">3.8. Click-to-play for plugins and invasive content</a></span></dt><dt><span class="sect2"><a href="#firefox-patches">3.9. Description of Firefox Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Packaging">4. Packaging</a></span></dt><dd><dl><dt><span class="sect2"><a href="#build-security">4.1. Build Process Security</a></span></dt><dt><span class="sect2"><a href="#addons">4.2. External Addons</a></span></dt><dt><span class="sect2"><a href="#prefs">4.3. Pref Changes</a></span></dt><dt><span class="sect2"><a href="#update-mechanism">4.4. Update Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Testing">5. Testing</a></span></dt><dd><dl><dt><span class="sect2"><a href="#SingleStateTesting">5.1. Single state testing</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2748505"></a>1. Introduction</h2></div></div></div><p>
4 4
 
5 5
 This document describes the <a class="link" href="#adversary" title="1.1. Adversary Model">adversary model</a>,
6 6
 <a class="link" href="#DesignRequirements" title="2. Design Requirements and Philosophy">design requirements</a>,
7 7
 <a class="link" href="#Implementation" title="3. Implementation">implementation</a>, <a class="link" href="#Packaging" title="4. Packaging">packaging</a> and <a class="link" href="#Testing" title="5. Testing">testing
8 8
 procedures</a> of the Tor Browser. It is
9
-current as of Tor Browser 2.2.32-4.
9
+current as of Tor Browser 2.2.33-3.
10 10
 
11 11
   </p><p>
12 12
 
13 13
 This document is also meant to serve as a set of design requirements and to
14 14
 describe a reference implementation of a Private Browsing Mode that defends
15
-against both local and network adversaries.
15
+against active network adversaries, in addition to the passive forensic local
16
+adversary currently addressed by the major browsers.
16 17
 
17 18
   </p><div class="sect2" title="1.1. Adversary Model"><div class="titlepage"><div><div><h3 class="title"><a id="adversary"></a>1.1. Adversary Model</h3></div></div></div><p>
18 19
 
... ...
@@ -83,82 +84,95 @@ CSS elements, and plugins. Others are performed by adservers seeking to
83 84
 correlate users' activity across different IP addresses, and still others are
84 85
 performed by malicious agents on the Tor network and at national firewalls.
85 86
 
86
-    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Inserting Javascript</strong></span><p>
87
-If not properly disabled, Javascript event handlers and timers
88
-can cause the browser to perform network activity after Tor has been disabled,
89
-thus allowing the adversary to correlate Tor and Non-Tor activity and reveal
90
-a user's non-Tor IP address. Javascript
91
-also allows the adversary to execute <a class="ulink" href="http://whattheinternetknowsaboutyou.com/" target="_top">history disclosure attacks</a>:
92
-to query the history via the different attributes of 'visited' links to search
93
-for particular Google queries, sites, or even to <a class="ulink" href="http://www.mikeonads.com/2008/07/13/using-your-browser-url-history-estimate-gender/" target="_top">profile
94
-users based on gender and other classifications</a>. Finally,
95
-Javascript can be used to query the user's timezone via the
96
-<code class="function">Date()</code> object, and to reduce the anonymity set by querying
97
-the <code class="function">navigator</code> object for operating system, CPU, locale, 
98
-and user agent information.
99
-     </p></li><li class="listitem"><span class="command"><strong>Inserting Plugins</strong></span><p>
100
-
101
-Plugins are abysmal at obeying the proxy settings of the browser. Every plugin
102
-capable of performing network activity that the author has
103
-investigated is also capable of performing network activity independent of
104
-browser proxy settings - and often independent of its own proxy settings.
105
-Sites that have plugin content don't even have to be malicious to obtain a
106
-user's
107
-Non-Tor IP (it usually leaks by itself), though <a class="ulink" href="http://decloak.net" target="_top">plenty of active
108
-exploits</a> are possible as well. In addition, plugins can be used to store unique identifiers that are more
109
-difficult to clear than standard cookies. 
110
-<a class="ulink" href="http://epic.org/privacy/cookies/flash.html" target="_top">Flash-based
111
-cookies</a> fall into this category, but there are likely numerous other
112
-examples.
87
+    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Read and insert identifiers</strong></span><p>
113 88
 
114
-     </p></li><li class="listitem"><span class="command"><strong>Inserting CSS</strong></span><p>
89
+The browser contains multiple facilities for storing identifiers that the
90
+adversary creates for the purposes of tracking users. These identifiers are
91
+most obviously cookies, but also include HTTP auth, DOM storage, cached
92
+scripts and other elements with embedded identifiers, client certificates, and
93
+even TLS Session IDs.
115 94
 
116
-CSS can also be used to correlate Tor and Non-Tor activity and reveal a user's
117
-Non-Tor IP address, via the usage of
118
-<a class="ulink" href="http://www.tjkdesign.com/articles/css%20pop%20ups/" target="_top">CSS
119
-popups</a> - essentially CSS-based event handlers that fetch content via
120
-CSS's onmouseover attribute. If these popups are allowed to perform network
121
-activity in a different Tor state than they were loaded in, they can easily
122
-correlate Tor and Non-Tor activity and reveal a user's IP address. In
123
-addition, CSS can also be used without Javascript to perform <a class="ulink" href="http://ha.ckers.org/weird/CSS-history.cgi" target="_top">CSS-only history disclosure
124
-attacks</a>.
125
-     </p></li><li class="listitem"><span class="command"><strong>Read and insert cookies</strong></span><p>
95
+     </p><p>
126 96
 
127 97
 An adversary in a position to perform MITM content alteration can inject
128 98
 document content elements to both read and inject cookies for arbitrary
129
-domains. In fact, many "SSL secured" websites are vulnerable to this sort of
99
+domains. In fact, even many "SSL secured" websites are vulnerable to this sort of
130 100
 <a class="ulink" href="http://seclists.org/bugtraq/2007/Aug/0070.html" target="_top">active
131 101
 sidejacking</a>. In addition, the ad networks of course perform tracking
132 102
 with cookies as well.
133 103
 
134
-     </p></li><li class="listitem"><span class="command"><strong>Create arbitrary cached content</strong></span><p>
135
-
136
-Likewise, the browser cache can also be used to <a class="ulink" href="http://crypto.stanford.edu/sameorigin/safecachetest.html" target="_top">store unique
137
-identifiers</a>. Since by default the cache has no same-origin policy,
138
-these identifiers can be read by any domain, making them an ideal target for
139
-ad network-class adversaries.
140
-
141 104
      </p></li><li class="listitem"><a id="fingerprinting"></a><span class="command"><strong>Fingerprint users based on browser
142 105
 attributes</strong></span><p>
143 106
 
144 107
 There is an absurd amount of information available to websites via attributes
145 108
 of the browser. This information can be used to reduce anonymity set, or even
146
-<a class="ulink" href="http://mandark.fr/0x000000/articles/Total_Recall_On_Firefox..html" target="_top">uniquely
147
-fingerprint individual users</a>. </p><p>
109
+uniquely fingerprint individual users. Fingerprinting is an intimidating
110
+problem to attempt to tackle, especially without a metric to determine or at
111
+least intuitively understand and estimate which features will most contribute
112
+to linkability between visits.
148 113
 
149
-The <a class="ulink" href="https://wiki.mozilla.org/Fingerprinting#Data" target="_top">Panopticlick study
150
-done</a> by the EFF attempts to measure the actual entropy - the number of
151
-identifying bits of information encoded in browser properties.  Their result
152
-data is definitely useful, and the metric is probably the appropriate one for
114
+</p><p>
115
+
116
+The <a class="ulink" href="https://panopticlick.eff.org/about.php" target="_top">Panopticlick study
117
+done</a> by the EFF uses the actual entropy - the number of identifying
118
+bits of information encoded in browser properties - as this metric. Their
119
+<a class="ulink" href="https://wiki.mozilla.org/Fingerprinting#Data" target="_top">result data</a>
120
+is definitely useful, and the metric is probably the appropriate one for
153 121
 determining how identifying a particular browser property is. However, some
154 122
 quirks of their study means that they do not extract as much information as
155 123
 they could from display information: they only use desktop resolution (which
156 124
 Torbutton reports as the window resolution) and do not attempt to infer the
157
-size of toolbars.
125
+size of toolbars. In the other direction, they may be over-counting in some
126
+areas, as they did not compute joint entropy over multiple attributes that may
127
+exhibit a high degree of correlation. Also, new browser features are added
128
+regularly, so the data should not be taken as final.
129
+
130
+      </p><p>
131
+
132
+Despite the uncertainty, all fingerprinting attacks leverage the following
133
+attack vectors:
134
+
135
+     </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><span class="command"><strong>Observing Request Behavior</strong></span><p>
136
+
137
+Properties of the user's request behavior comprise the bulk of low-hanging
138
+fingerprinting targets. These include: User agent, Accept-* headers, pipeline
139
+usage, and request ordering. Additionally, the use of custom filters such as
140
+AdBlock and other privacy filters can be used to fingerprint request patterns
141
+(as an extreme example).
142
+
143
+     </p></li><li class="listitem"><span class="command"><strong>Inserting Javascript</strong></span><p>
158 144
 
145
+Javascript can reveal a lot of fingerprinting information. It provides DOM
146
+objects, just as window.screen and window.navigator to extract information
147
+about the useragent. Also, Javascript can be used to query the user's timezone
148
+via the <code class="function">Date()</code> object, and to use timing information to
149
+<a class="ulink" href="http://w2spconf.com/2011/papers/jspriv.pdf" target="_top">fingerprint the CPU
150
+and interpreter speed</a>.
159 151
 
160 152
 
161
-</p></li><li class="listitem"><span class="command"><strong>Remotely or locally exploit browser and/or
153
+
154
+     </p></li><li class="listitem"><span class="command"><strong>Inserting Plugins</strong></span><p>
155
+
156
+The Panopticlick project found that the mere list of installed plugins (in
157
+navigator.plugins) was sufficient to provide a large degree of
158
+fingerprintability. Additionally, plugins are capable of extracting font lists,
159
+interface addresses, and other machine information that is beyond what the
160
+browser would normally provide to content. In addition, plugins can be used to
161
+store unique identifiers that are more difficult to clear than standard
162
+cookies.  <a class="ulink" href="http://epic.org/privacy/cookies/flash.html" target="_top">Flash-based
163
+cookies</a> fall into this category, but there are likely numerous other
164
+examples. Beyond fingerprinting, plugins are also abysmal at obeying the proxy
165
+settings of the browser. 
166
+
167
+
168
+     </p></li><li class="listitem"><span class="command"><strong>Inserting CSS</strong></span><p>
169
+
170
+<a class="ulink" href="https://developer.mozilla.org/En/CSS/Media_queries" target="_top">CSS media
171
+queries</a> can be inserted to gather information about the desktop size,
172
+widget size, display type, DPI, user agent type, and other information that
173
+was formerly available only to Javascript.
174
+
175
+     </p></li></ol></div></li><li class="listitem"><span class="command"><strong>Remotely or locally exploit browser and/or
162 176
 OS</strong></span><p>
163 177
 
164 178
 Last, but definitely not least, the adversary can exploit either general
... ...
@@ -173,19 +187,27 @@ adversary.
173 187
      </p></li></ol></div></div></div></div><div class="sect1" title="2. Design Requirements and Philosophy"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="DesignRequirements"></a>2. Design Requirements and Philosophy</h2></div></div></div><p>
174 188
 
175 189
 The Tor Browser Design Requirements are meant to describe the properties of a
176
-Private Browsing Mode that defends against both network and local adversaries. 
190
+Private Browsing Mode that defends against both network and forensic adversaries. 
177 191
 
178 192
   </p><p>
179 193
 
180 194
 There are two main categories of requirements: <a class="link" href="#security" title="2.1. Security Requirements">Security Requirements</a>, and <a class="link" href="#privacy" title="2.2. Privacy Requirements">Privacy Requirements</a>. Security Requirements are the
181
-minimum properties in order for a web client platform to be able to support
182
-Tor. Privacy requirements are the set of properties that cause us to prefer
183
-one platform over another. 
195
+minimum properties in order for a browser to be able to support Tor and
196
+similar privacy proxies safely. Privacy requirements are the set of properties
197
+that cause us to prefer one browser platform over another. 
198
+
199
+  </p><p>
200
+
201
+While we will endorse the use of browsers that meet the security requirements,
202
+it is primarily the privacy requirements that cause us to maintain our own
203
+browser distribution.
184 204
 
185 205
   </p><p>
186 206
 
187
-We will maintain an alternate distribution of the web client in order to
188
-maintain and/or restore privacy properties to our users. 
207
+      The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
208
+      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and
209
+      "OPTIONAL" in this document are to be interpreted as described in
210
+      <a class="ulink" href="https://www.ietf.org/rfc/rfc2119.txt" target="_top">RFC 2119</a>.
189 211
 
190 212
   </p><div class="sect2" title="2.1. Security Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="security"></a>2.1. Security Requirements</h3></div></div></div><p>
191 213
 
... ...
@@ -199,15 +221,23 @@ in order for Tor to support the use of a web client platform.
199 221
 MUST NOT bypass Tor proxy settings for any content.</p></li><li class="listitem"><span class="command"><strong>State Separation</strong></span><p>The browser MUST NOT provide any stored state to the content window
200 222
 from other browsers or other browsing modes, including shared state from
201 223
 plugins, machine identifiers, and TLS session state.
202
-</p></li><li class="listitem"><span class="command"><strong>Disk Avoidance</strong></span><p>The
203
-browser SHOULD NOT write any browsing history information to disk, or store it
204
-in memory beyond the duration of one Tor session, unless the user has
205
-explicitly opted to store their browsing history information to
206
-disk.</p></li><li class="listitem"><span class="command"><strong>Application Data Isolation</strong></span><p>The browser 
207
-MUST NOT write or cause the operating system to
208
-write <span class="emphasis"><em>any information</em></span> to disk outside of the application
209
-directory. All exceptions and shortcomings due to operating system behavior
210
-MUST BE documented.
224
+</p></li><li class="listitem"><span class="command"><strong>Disk Avoidance</strong></span><p>
225
+
226
+The browser MUST NOT write any information that is derived from or that
227
+reveals browsing activity to the disk, or store it in memory beyond the
228
+duration of one browsing session, unless the user has explicitly opted to
229
+store their browsing history information to disk.
230
+
231
+</p></li><li class="listitem"><span class="command"><strong>Application Data Isolation</strong></span><p>
232
+
233
+The components involved in providing private browsing MUST BE self-contained,
234
+or MUST provide a mechanism for rapid, complete removal of all evidence of the
235
+use of the mode. In other words, the browser MUST NOT write or cause the
236
+operating system to write <span class="emphasis"><em>any information</em></span> about the use
237
+of private browsing to disk outside of the application's control. The user
238
+must be able to ensure that secure removal of the software is sufficient to
239
+remove evidence of the use of the software. All exceptions and shortcomings
240
+due to operating system behavior MUST BE wiped by an uninstaller.
211 241
 
212 242
 </p></li><li class="listitem"><span class="command"><strong>Update Safety</strong></span><p>The browser SHOULD NOT perform unsafe updates or upgrades.</p></li></ol></div></div><div class="sect2" title="2.2. Privacy Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="privacy"></a>2.2. Privacy Requirements</h3></div></div></div><p>
213 243
 
... ...
@@ -217,25 +247,35 @@ on another site without their knowledge or explicit consent. With respect to
217 247
 platform support, privacy requirements are the set of properties that cause us
218 248
 to prefer one platform over another. 
219 249
 
220
-   </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Cross-Domain Identifier Unlinkability</strong></span><p>
250
+   </p><p>
251
+
252
+For the purposes of the unlinkability requirements of this section as well as
253
+the descriptions in the <a class="link" href="#Implementation" title="3. Implementation">implementation
254
+section</a>, a <span class="command"><strong>url bar origin</strong></span> means at least the
255
+second-level DNS name.  For example, for mail.google.com, the origin would be
256
+google.com. Implementations MAY, at their option, restrict the url bar origin
257
+to be the entire fully qualified domain name
221 258
 
222
-User activity on one url bar domain MUST NOT be linkable to their activity in
223
-any other domain by any third party. This property specifically applies to
259
+   </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Cross-Origin Identifier Unlinkability</strong></span><p>
260
+
261
+User activity on one url bar origin MUST NOT be linkable to their activity in
262
+any other url bar origin by any third party. This property specifically applies to
224 263
 linkability from stored browser identifiers, authentication tokens, and shared
225 264
 state. This functionality SHOULD NOT interfere with federated login in a
226 265
 substantial way.
227 266
 
228
-  </p></li><li class="listitem"><span class="command"><strong>Cross-Domain Fingerprinting Unlinkability</strong></span><p>
267
+  </p></li><li class="listitem"><span class="command"><strong>Cross-Origin Fingerprinting Unlinkability</strong></span><p>
229 268
 
230
-User activity on one url bar domain MUST NOT be linkable to their activity in
231
-any other domain by any third party. This property specifically applies to
269
+User activity on one url bar origin MUST NOT be linkable to their activity in
270
+any other url bar origin by any third party. This property specifically applies to
232 271
 linkability from fingerprinting browser behavior.
233 272
 
234 273
   </p></li><li class="listitem"><span class="command"><strong>Long-Term Unlinkability</strong></span><p>
235 274
 
236
-The browser SHOULD provide an obvious, easy way to remove all of their authentication
237
-tokens and browser state and obtain a fresh identity. Additionally, this
238
-should happen by default automatically upon browser restart.
275
+The browser SHOULD provide an obvious, easy way to remove all of their
276
+authentication tokens and browser state and obtain a fresh identity.
277
+Additionally, the browser SHOULD clear linkable state by default automatically
278
+upon browser restart, except at user option.
239 279
 
240 280
   </p></li></ol></div></div><div class="sect2" title="2.3. Philosophy"><div class="titlepage"><div><div><h3 class="title"><a id="philosophy"></a>2.3. Philosophy</h3></div></div></div><p>
241 281
 
... ...
@@ -288,17 +328,17 @@ to reduce linkability.
288 328
 <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3100" target="_top">Another
289 329
 failure of Torbutton</a> was (and still is) the options panel. Each option
290 330
 that detectably alters browser behavior can be used as a fingerprinting tool.
291
-Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">should be
331
+Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">SHOULD be
292 332
 disabled in the mode</a> except as an opt-in basis. We should not load
293 333
 system-wide addons or plugins.
294 334
 
295 335
      </p><p>
296
-Instead of global browser privacy options, privacy decisions should be made
336
+Instead of global browser privacy options, privacy decisions SHOULD be made
297 337
 <a class="ulink" href="https://wiki.mozilla.org/Privacy/Features/Site-based_data_management_UI" target="_top">per
298
-top-level url-bar domain</a> to eliminate the possibility of linkability
338
+url bar origin</a> to eliminate the possibility of linkability
299 339
 between domains. For example, when a plugin object (or a Javascript access of
300 340
 window.plugins) is present in a page, the user should be given the choice of
301
-allowing that plugin object for that top-level url-bar domain only. The same
341
+allowing that plugin object for that url bar origin only. The same
302 342
 goes for exemptions to third party cookie policy, geo-location, and any other
303 343
 privacy permissions.
304 344
      </p><p>
... ...
@@ -344,8 +384,8 @@ SOCKS proxy. It sets <span class="command"><strong>network.proxy.socks_remote_dn
344 384
 <span class="command"><strong>network.proxy.socks_version</strong></span>, and
345 385
 <span class="command"><strong>network.proxy.socks_port</strong></span>.
346 386
  </p></li><li class="listitem">Disabling plugins
347
- <p>
348
-  Plugins have the ability to make arbitrary OS system calls. This includes
387
+
388
+ <p>Plugins have the ability to make arbitrary OS system calls and  <a class="ulink" href="http://decloak.net/" target="_top">bypass proxy settings</a>. This includes
349 389
 the ability to make UDP sockets and send arbitrary data independent of the
350 390
 browser proxy settings.
351 391
  </p><p>
... ...
@@ -359,6 +399,12 @@ In addition, to prevent any unproxied activity by plugins at load time, we
359 399
 also patch the Firefox source code to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0007-Block-all-plugins-except-flash.patch" target="_top">prevent the load of any plugins except
360 400
 for Flash and Gnash</a>.
361 401
 
402
+ </p><p>
403
+
404
+Finally, even if the user alters their browser settings to re-enable the Flash
405
+plugin, we have configured NoScript to provide click-to-play placeholders, so
406
+that only desired objects will be loaded, and only after user confirmation.
407
+
362 408
  </p></li><li class="listitem">External App Blocking
363 409
   <p>
364 410
 External apps, if launched automatically, can be induced to load files that
... ...
@@ -371,13 +417,13 @@ launch a helper app.
371 417
 Tor Browser State is separated from existing browser state through use of a
372 418
 custom Firefox profile. Furthermore, plugins are disabled, which prevents
373 419
 Flash cookies from leaking from a pre-existing Flash directory.
374
-   </p></div><div class="sect2" title="3.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>3.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2980587"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
375
-Tor Browser should optionally prevent all disk records of browser activity.
420
+   </p></div><div class="sect2" title="3.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>3.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2777452"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
421
+Tor Browser MUST (at user option) prevent all disk records of browser activity.
376 422
 The user should be able to optionally enable URL history and other history
377 423
 features if they so desire. Once we <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3100" target="_top">simplify the
378 424
 preferences interface</a>, we will likely just enable Private Browsing
379 425
 mode by default to handle this goal.
380
-    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id3006806"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
426
+    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id2765334"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
381 427
 For now, Tor Browser blocks write access to the disk through Torbutton
382 428
 using several Firefox preferences. 
383 429
 
... ...
@@ -416,9 +462,9 @@ bundle directory. This is to ensure that the user is able to completely and
416 462
 safely remove the bundle without leaving other traces of Tor usage on their
417 463
 computer.
418 464
 
419
-   </p><p>XXX: sjmurdoch, Erinn: explain what magic we do to satisfy this,
465
+   </p><p>FIXME: sjmurdoch, Erinn: explain what magic we do to satisfy this,
420 466
 and/or what additional work or auditing needs to be done.
421
-   </p></div><div class="sect2" title="3.5. Cross-Domain Identifier Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="identifier-linkability"></a>3.5. Cross-Domain Identifier Unlinkability</h3></div></div></div><p>
467
+   </p></div><div class="sect2" title="3.5. Cross-Origin Identifier Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="identifier-linkability"></a>3.5. Cross-Origin Identifier Unlinkability</h3></div></div></div><p>
422 468
 
423 469
 The Tor Browser MUST prevent a user's activity on one site from being linked
424 470
 to their activity on another site. When this goal cannot yet be met with an
... ...
@@ -435,20 +481,19 @@ consent.
435 481
 
436 482
 The benefit of this approach comes not only in the form of reduced
437 483
 linkability, but also in terms of simplified privacy UI. If all stored browser
438
-state and permissions become associated with the top-level url-bar domain, the
439
-six or seven different pieces of privacy UI governing these identifiers and
484
+state and permissions become associated with the url bar origin, the six or
485
+seven different pieces of privacy UI governing these identifiers and
440 486
 permissions can become just one piece of UI. For instance, a window that lists
441
-the top-level url bar domains for which browser state exists with the ability
442
-to clear and/or block them, possibly with a context-menu option to drill down
443
-into specific types of state. An exmaple of this simplifcation can be seen in
444
-Figure 1.
487
+the url bar origin for which browser state exists, possibly with a
488
+context-menu option to drill down into specific types of state or permissions.
489
+An example of this simplification can be seen in Figure 1.
445 490
 
446
-   </p><div class="figure"><a id="id2962771"></a><p class="title"><b>Figure 1. Improving the Privacy UI</b></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="CookieManagers.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p>
491
+   </p><div class="figure"><a id="id2758612"></a><p class="title"><b>Figure 1. Improving the Privacy UI</b></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="CookieManagers.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p>
447 492
 
448 493
 On the left is the standard Firefox cookie manager. On the right is a mock-up
449
-of how isolating identifiers to the URL bar domain might simplify the privacy
494
+of how isolating identifiers to the URL bar origin might simplify the privacy
450 495
 UI for all data - not just cookies. Both windows represent the set of
451
-Cookies accomulated after visiting just five sites, but the window on the
496
+Cookies accumulated after visiting just five sites, but the window on the
452 497
 right has the option of also representing history, DOM Storage, HTTP Auth,
453 498
 search form history, login values, and so on within a context menu for each
454 499
 site.
... ...
@@ -456,10 +501,10 @@ site.
456 501
 </div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Cookies
457 502
      <p><span class="command"><strong>Design Goal:</strong></span>
458 503
 
459
-All cookies should be double-keyed to the top-level domain. There exists a
460
-<a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=565965" target="_top">Mozilla
461
-bug</a> that contains a prototype patch, but it lacks UI, and does not
462
-apply to modern Firefoxes.
504
+All cookies MUST be double-keyed to the url bar origin and third-party
505
+origin. There exists a <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=565965" target="_top">Mozilla bug</a>
506
+that contains a prototype patch, but it lacks UI, and does not apply to modern
507
+Firefoxes.
463 508
 
464 509
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
465 510
 
... ...
@@ -471,32 +516,40 @@ unlinkability trumps that desire.
471 516
 
472 517
      </p></li><li class="listitem">Cache
473 518
      <p>
474
-Cache is isolated to the top-level url bar domain by using a technique
475
-pioneered by Colin Jackson et al, via their work on <a class="ulink" href="http://www.safecache.com/" target="_top">SafeCache</a>. The technique re-uses the
519
+
520
+Cache is isolated to the url bar origin by using a technique pioneered by
521
+Colin Jackson et al, via their work on <a class="ulink" href="http://www.safecache.com/" target="_top">SafeCache</a>. The technique re-uses the
476 522
 <a class="ulink" href="https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsICachingChannel" target="_top">nsICachingChannel.cacheKey</a>
477
-attribute that Firefox uses internally to prevent improper caching of HTTP POST data.  
523
+attribute that Firefox uses internally to prevent improper caching and reuse
524
+of HTTP POST data.  
525
+
478 526
      </p><p>
527
+
479 528
 However, to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3666" target="_top">increase the
480
-security of the isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve strange and
481
-unknown conflicts with OCSP</a>, we had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0005-Add-a-string-based-cacheKey.patch" target="_top">patch
482
-Firefox to provide a cacheDomain cache attribute</a>. We use the full
483
-url bar domain as input to this field.
529
+security of the isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve conflicts
530
+with OCSP relying the cacheKey property for reuse of POST requests</a>, we
531
+had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0005-Add-a-string-based-cacheKey.patch" target="_top">patch
532
+Firefox to provide a cacheDomain cache attribute</a>. We use the fully
533
+qualified url bar domain as input to this field.
534
+
484 535
      </p><p>
485 536
 
537
+ Furthermore, we chose a different
538
+isolation scheme than the Stanford implementation. First, we decoupled the
539
+cache isolation from the third party cookie attribute. Second, we use several
540
+mechanisms to attempt to determine the actual location attribute of the
541
+top-level window (to obtain the url bar FQDN) used to load the page, as
542
+opposed to relying solely on the referer property.
486 543
 
487
-Furthermore, we chose a different isolation scheme than the Stanford
488
-implementation. First, we decoupled the cache isolation from the third party
489
-cookie attribute. Second, we use several mechanisms to attempt to determine
490
-the actual location attribute of the top-level window (the url bar domain)
491
-used to load the page, as opposed to relying solely on the referer property.
492 544
      </p><p>
545
+
493 546
 Therefore, <a class="ulink" href="http://crypto.stanford.edu/sameorigin/safecachetest.html" target="_top">the original
494
-Stanford test
495
-cases</a> are expected to fail. Functionality can still be verified by
496
-navigating to <a class="ulink" href="about:cache" target="_top">about:cache</a> and viewing the key
497
-used for each cache entry. Each third party element should have an additional
498
-"domain=string" property prepended, which will list the top-level urlbar
499
-domain that was used to source the third party element.
547
+Stanford test cases</a> are expected to fail. Functionality can still be
548
+verified by navigating to <a class="ulink" href="about:cache" target="_top">about:cache</a> and
549
+viewing the key used for each cache entry. Each third party element should
550
+have an additional "domain=string" property prepended, which will list the
551
+FQDN that was used to source the third party element.
552
+
500 553
      </p></li><li class="listitem">HTTP Auth
501 554
      <p>
502 555
 
... ...
@@ -510,30 +563,52 @@ observer to modify it.
510 563
      </p></li><li class="listitem">DOM Storage
511 564
      <p><span class="command"><strong>Design Goal:</strong></span>
512 565
 
513
-DOM storage for third party domains MUST BE isolated to the url bar domain,
566
+DOM storage for third party domains MUST BE isolated to the url bar origin,
514 567
 to prevent linkability between sites.
515 568
 
516 569
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
517 570
 
518 571
 Because it is isolated to third party domain as opposed to top level url bar
519
-domain, we entirely disable DOM storage as a stopgap to ensure unlinkability.
572
+origin, we entirely disable DOM storage as a stopgap to ensure unlinkability.
520 573
 
521 574
      </p></li><li class="listitem">TLS session resumption and HTTP Keep-Alive
522 575
      <p>
523
-TLS session resumption and HTTP Keep-Alive must not allow third party origins
576
+TLS session resumption and HTTP Keep-Alive MUST NOT allow third party origins
524 577
 to track users via either TLS session IDs, or the fact that different requests
525 578
 arrive on the same TCP connection.
526 579
      </p><p><span class="command"><strong>Design Goal:</strong></span>
527 580
 
528
-TLS session resumption IDs must be limited to the top-level url bar domain.
529
-HTTP Keep-Alive connections from a third party in one top-level domain must
530
-not be reused for that same third party in another top-level domain.
581
+TLS session resumption IDs MUST be limited to the url bar origin.
582
+HTTP Keep-Alive connections from a third party in one url bar origin must
583
+not be reused for that same third party in another url bar origin.
531 584
 
532 585
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
533 586
 
534 587
 We <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/4099" target="_top">plan to
535 588
 disable</a> TLS session resumption, and limit HTTP Keep-alive duration. 
536 589
 
590
+     </p></li><li class="listitem">User confirmation for cross-origin redirects
591
+    <p><span class="command"><strong>Design Goal:</strong></span>
592
+
593
+To prevent attacks aimed at subverting the Cross-Origin Identifier
594
+Unlinkability <a class="link" href="#privacy" title="2.2. Privacy Requirements">privacy requirement</a>, the browser
595
+MUST prompt users before following redirects that would cause the user to
596
+automatically navigate between two different url bar origins.
597
+
598
+    </p><p><span class="command"><strong>Implementation status:</strong></span>
599
+
600
+There are numerous ways for the user to be redirected, and the Firefox API
601
+support to detect each of them is poor. We have a <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3600" target="_top">trac bug
602
+open</a> to implement what we can.
603
+
604
+    </p><p>
605
+
606
+We are not concerned with linkability due to explicit user action (either by
607
+accepting cross-origin redirects, or by clicking normal links) because it is
608
+assumed that private browsing sessions will be relatively short-lived,
609
+especially with frequent use of the <a class="link" href="#new-identity" title="3.7. Long-Term Unlinkability via &quot;New Identity&quot; button">New
610
+Identity</a> button.
611
+
537 612
     </p></li><li class="listitem">window.name
538 613
      <p>
539 614
 
... ...
@@ -565,11 +640,11 @@ series. <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3
565 640
 #3455</a> is the Torbutton ticket to make use of the new Tor
566 641
 functionality.
567 642
 
568
-     </p></li></ol></div></div><div class="sect2" title="3.6. Cross-Domain Fingerprinting Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="fingerprinting-linkability"></a>3.6. Cross-Domain Fingerprinting Unlinkability</h3></div></div></div><p>
643
+     </p></li></ol></div></div><div class="sect2" title="3.6. Cross-Origin Fingerprinting Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="fingerprinting-linkability"></a>3.6. Cross-Origin Fingerprinting Unlinkability</h3></div></div></div><p>
569 644
 
570 645
 In order to properly address the fingerprinting adversary on a technical
571 646
 level, we need a metric to measure linkability of the various browser
572
-properties that extend beyond any stored origin-related state. <a class="ulink" href="https://panopticlick.eff.org/about.php" target="_top">The Panopticlick Project</a>
647
+properties beyond any stored origin-related state. <a class="ulink" href="https://panopticlick.eff.org/about.php" target="_top">The Panopticlick Project</a>
573 648
 by the EFF provides us with exactly this metric. The researchers conducted a
574 649
 survey of volunteers who were asked to visit an experiment page that harvested
575 650
 many of the above components. They then computed the Shannon Entropy of the
... ...
@@ -601,7 +676,7 @@ window.navigator.plugins, as well as their internal functionality.
601 676
 
602 677
      </p><p><span class="command"><strong>Design Goal:</strong></span>
603 678
 
604
-All plugins that have not been specifically audited or sandboxed must be
679
+All plugins that have not been specifically audited or sandboxed MUST be
605 680
 disabled. To reduce linkability potential, even sandboxed plugins should not
606 681
 be allowed to load objects until the user has clicked through a click-to-play
607 682
 barrier.  Additionally, version information should be reduced or obfuscated
... ...
@@ -641,7 +716,7 @@ implemented any defense against CSS or Javascript fonts.
641 716
      </p></li><li class="listitem">User Agent and HTTP Headers
642 717
      <p><span class="command"><strong>Design Goal:</strong></span>
643 718
 
644
-All Tor Browser users should provide websites with an identical user agent and
719
+All Tor Browser users MUST provide websites with an identical user agent and
645 720
 HTTP header set for a given request type. We omit the Firefox minor revision,
646 721
 and report a popular Windows platform. If the software is kept up to date,
647 722
 these headers should remain identical across the population even when updated.
... ...
@@ -683,13 +758,13 @@ to be dealt with</a>.
683 758
      </p></li><li class="listitem">Timezone and clock offset
684 759
      <p><span class="command"><strong>Design Goal:</strong></span>
685 760
 
686
-All Tor Browser users should report the same timezone to websites. Currently,
687
-we choose UTC for this purpose, although an equally valid argument could be
688
-made for EDT/EST due to the large English-speaking population density.
689
-Additionally, the Tor software should detect if the users clock is
690
-significantly divergent from the clocks of the relays that it connects to, and
691
-use this to reset the clock values used in Tor Browser to something reasonably
692
-accurate.
761
+All Tor Browser users MUST report the same timezone to websites. Currently, we
762
+choose UTC for this purpose, although an equally valid argument could be made
763
+for EDT/EST due to the large English-speaking population density (coupled with
764
+the fact that we spoof a US English user agent).  Additionally, the Tor
765
+software should detect if the users clock is significantly divergent from the
766
+clocks of the relays that it connects to, and use this to reset the clock
767
+values used in Tor Browser to something reasonably accurate.
693 768
 
694 769
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
695 770
 
... ...
@@ -764,11 +839,11 @@ Currently we simply disable WebGL.
764 839
      </p></li></ol></div></div><div class="sect2" title="3.7. Long-Term Unlinkability via &quot;New Identity&quot; button"><div class="titlepage"><div><div><h3 class="title"><a id="new-identity"></a>3.7. Long-Term Unlinkability via "New Identity" button</h3></div></div></div><p>
765 840
 In order to avoid long-term linkability, we provide a "New Identity" context
766 841
 menu option in Torbutton.
767
-   </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2991890"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
842
+   </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2751206"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
768 843
 
769
-All linkable identifiers and browser state should be cleared by this feature.
844
+All linkable identifiers and browser state MUST be cleared by this feature.
770 845
 
771
-    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id3007443"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
846
+    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id2756691"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
772 847
    First, Torbutton disables
773 848
 all open tabs and windows via nsIContentPolicy blocking, and then closes each
774 849
 tab and window. The extra step for blocking tabs is done as a precaution to
... ...
@@ -812,19 +887,14 @@ site permissions, as well as stored HTTPS STS policy from visited sites.
812 887
 The pref does successfully clear the permissions manager memory if toggled. It
813 888
 does not need to be set in prefs.js, and can be handled by Torbutton.
814 889
 
815
-     </p><p><span class="command"><strong>Design Goal:</strong></span>
816
-
817
-As an additional design goal, we would like to later alter this patch to allow this
818
-information to be cleared from memory. The implementation does not currently
819
-allow this.
820
-
821 890
      </p></li><li class="listitem">Make Intermediate Cert Store memory-only
822 891
      <p>
823 892
 
824
-The intermediate certificate store holds information about SSL certificates
825
-that may only be used by a limited number of domains. In some cases
826
-effectively recording on disk the fact that a website owned by a certain
827
-organization was viewed.
893
+The intermediate certificate store records the intermediate SSL certificates
894
+the browser has seen to date. Because these intermediate certificates are used 
895
+by a limited number of domains (and in some cases, only a single domain),
896
+the intermediate certificate store can serve as a low-resolution record of
897
+browsing history.
828 898
 
829 899
      </p><p><span class="command"><strong>Design Goal:</strong></span>
830 900
 
... ...
@@ -846,8 +916,8 @@ auth to silently track users between domains</a>.
846 916
 To <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3666" target="_top">increase the
847 917
 security of cache isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve strange and
848 918
 unknown conflicts with OCSP</a>, we had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0005-Add-a-string-based-cacheKey.patch" target="_top">patch
849
-Firefox to provide a cacheDomain cache attribute</a>. We use the full
850
-url bar domain as input to this field.
919
+Firefox to provide a cacheDomain cache attribute</a>. We use the url bar
920
+FQDN as input to this field.
851 921
 
852 922
      </p></li><li class="listitem">Randomize HTTP pipeline order and depth
853 923
      <p>
... ...
@@ -869,7 +939,7 @@ ruin our day, and censorship filters). Hence we rolled our own.
869 939
 This patch prevents random URLs from being inserted into content-prefs.sqllite in
870 940
 the profile directory as content prefs change (includes site-zoom and perhaps
871 941
 other site prefs?).
872
-     </p></li></ol></div></div></div><div class="sect1" title="4. Packaging"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Packaging"></a>4. Packaging</h2></div></div></div><p> </p><div class="sect2" title="4.1. Build Process Security"><div class="titlepage"><div><div><h3 class="title"><a id="build-security"></a>4.1. Build Process Security</h3></div></div></div><p> </p></div><div class="sect2" title="4.2. External Addons"><div class="titlepage"><div><div><h3 class="title"><a id="addons"></a>4.2. External Addons</h3></div></div></div><p> </p><div class="sect3" title="Included Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2974027"></a>Included Addons</h4></div></div></div></div><div class="sect3" title="Excluded Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2999979"></a>Excluded Addons</h4></div></div></div></div><div class="sect3" title="Dangerous Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id3006218"></a>Dangerous Addons</h4></div></div></div></div></div><div class="sect2" title="4.3. Pref Changes"><div class="titlepage"><div><div><h3 class="title"><a id="prefs"></a>4.3. Pref Changes</h3></div></div></div><p> </p></div><div class="sect2" title="4.4. Update Security"><div class="titlepage"><div><div><h3 class="title"><a id="update-mechanism"></a>4.4. Update Security</h3></div></div></div><p> </p></div></div><div class="sect1" title="5. Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Testing"></a>5. Testing</h2></div></div></div><p>
942
+     </p></li></ol></div></div></div><div class="sect1" title="4. Packaging"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Packaging"></a>4. Packaging</h2></div></div></div><p> </p><div class="sect2" title="4.1. Build Process Security"><div class="titlepage"><div><div><h3 class="title"><a id="build-security"></a>4.1. Build Process Security</h3></div></div></div><p> </p></div><div class="sect2" title="4.2. External Addons"><div class="titlepage"><div><div><h3 class="title"><a id="addons"></a>4.2. External Addons</h3></div></div></div><p> </p><div class="sect3" title="Included Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2757442"></a>Included Addons</h4></div></div></div></div><div class="sect3" title="Excluded Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2782047"></a>Excluded Addons</h4></div></div></div></div><div class="sect3" title="Dangerous Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2771088"></a>Dangerous Addons</h4></div></div></div></div></div><div class="sect2" title="4.3. Pref Changes"><div class="titlepage"><div><div><h3 class="title"><a id="prefs"></a>4.3. Pref Changes</h3></div></div></div><p> </p></div><div class="sect2" title="4.4. Update Security"><div class="titlepage"><div><div><h3 class="title"><a id="update-mechanism"></a>4.4. Update Security</h3></div></div></div><p> </p></div></div><div class="sect1" title="5. Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Testing"></a>5. Testing</h2></div></div></div><p>
873 943
 
874 944
 The purpose of this section is to cover all the known ways that Tor browser
875 945
 security can be subverted from a penetration testing perspective. The hope
... ...
@@ -904,11 +973,11 @@ and other information disclosure vulnerabilities. It is maintained by Kyle
904 973
 Williams, the author of <a class="ulink" href="http://www.janusvm.com/" target="_top">JanusVM</a>
905 974
 and <a class="ulink" href="http://www.januspa.com/" target="_top">JanusPA</a>.
906 975
 
907
-       </p></li><li class="listitem"><a class="ulink" href="https://www.jondos.de/en/anontest" target="_top">JonDos
976
+       </p></li><li class="listitem"><a class="ulink" href="https://ip-check.info" target="_top">JonDos
908 977
 AnonTest</a><p>
909 978
 
910
-The <a class="ulink" href="https://www.jondos.de" target="_top">JonDos people</a> also provide an
911
-anonymity tester. It is more focused on HTTP headers than plugin bypass, and
979
+The <a class="ulink" href="https://anonymous-proxy-servers.net/" target="_top">JonDos people</a> also provide an
980
+anonymity tester. It is more focused on HTTP headers and behaviors than plugin bypass, and
912 981
 points out a couple of headers Torbutton could do a better job with
913 982
 obfuscating.
914 983
 
... ...
@@ -923,7 +992,7 @@ the test results.
923 992
 Analyzer</a><p>
924 993
 
925 994
 The Privacy Analyzer provides a dump of all sorts of browser attributes and
926
-settings that it detects, including some information on your origin IP
995
+settings that it detects, including some information on your original IP
927 996
 address. Its page layout and lack of good vs bad test result feedback makes it
928 997
 not as useful as a user-facing testing tool, but it does provide some
929 998
 interesting checks in a single page.
930 999