Update design document based on feedback.
Mike Perry

Mike Perry commited on 2014-11-07 00:47:53
Zeige 1 geänderte Dateien mit 133 Einfügungen und 103 Löschungen.


Also include 4.5-alpha-1 items.
... ...
@@ -1,9 +1,9 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><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.78.1" /></head><body><div class="article"><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">October 30th, 2014</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idp33097664">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#components">1.1. Browser Component Overview</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="#adversary">3. Adversary Model</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary-goals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversary-positioning">3.2. Adversary Capabilities - Positioning</a></span></dt><dt><span class="sect2"><a href="#attacks">3.3. Adversary Capabilities - Attacks</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">4. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">4.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">4.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">4.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">4.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">4.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">4.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">4.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#other-security">4.8. Other Security Measures</a></span></dt></dl></dd><dt><span class="sect1"><a href="#BuildSecurity">5. Build Security and Package Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="#idp39143984">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idp39178848">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idp39182784">5.3. Anonymous Verification</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idp39214016">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp33097664"></a>1. Introduction</h2></div></div></div><p>
2
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><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.78.1" /></head><body><div class="article"><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">November 6th, 2014</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idp59241696">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#components">1.1. Browser Component Overview</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="#adversary">3. Adversary Model</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary-goals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversary-positioning">3.2. Adversary Capabilities - Positioning</a></span></dt><dt><span class="sect2"><a href="#attacks">3.3. Adversary Capabilities - Attacks</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">4. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">4.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">4.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">4.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">4.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">4.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">4.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">4.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#other-security">4.8. Other Security Measures</a></span></dt></dl></dd><dt><span class="sect1"><a href="#BuildSecurity">5. Build Security and Package Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="#idp60746000">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idp60781056">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idp60784992">5.3. Anonymous Verification</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idp60816992">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp59241696"></a>1. Introduction</h2></div></div></div><p>
3 3
 
4 4
 This document describes the <a class="link" href="#adversary" title="3. Adversary Model">adversary model</a>,
5 5
 <a class="link" href="#DesignRequirements" title="2. Design Requirements and Philosophy">design requirements</a>, and <a class="link" href="#Implementation" title="4. Implementation">implementation</a>  of the Tor Browser. It is current as of Tor Browser
6
-4.0.
6
+4.5-alpha-1.
7 7
 
8 8
   </p><p>
9 9
 
... ...
@@ -26,7 +26,7 @@ a number of Firefox preferences</a> from their defaults.
26 26
 Tor process management and configuration is accomplished through the <a class="ulink" href="https://gitweb.torproject.org/tor-launcher.git" target="_top">Tor Launcher</a>
27 27
 addon, which provides the initial Tor configuration splash screen and
28 28
 bootstrap progress bar. Tor Launcher is also compatible with Thunderbird,
29
-InstantBird, and XULRunner.
29
+Instantbird, and XULRunner.
30 30
 
31 31
    </p><p>
32 32
 
... ...
@@ -85,7 +85,7 @@ Separation</strong></span></a><p>
85 85
 
86 86
 The browser MUST NOT provide the content window with any state from any other
87 87
 browsers or any non-Tor browsing modes. This includes shared state from
88
-independent plugins, and shared state from Operating System implementations of
88
+independent plugins, and shared state from operating system implementations of
89 89
 TLS and other support libraries.
90 90
 
91 91
 </p></li><li class="listitem"><a class="link" href="#disk-avoidance" title="4.3. Disk Avoidance"><span class="command"><strong>Disk
... ...
@@ -108,7 +108,7 @@ must be able to ensure that secure deletion of the software is sufficient to
108 108
 remove evidence of the use of the software. All exceptions and shortcomings
109 109
 due to operating system behavior MUST be wiped by an uninstaller. However, due
110 110
 to permissions issues with access to swap, implementations MAY choose to leave
111
-it out of scope, and/or leave it to the Operating System/platform to implement
111
+it out of scope, and/or leave it to the operating system/platform to implement
112 112
 ephemeral-keyed encrypted swap.
113 113
 
114 114
 </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="privacy"></a>2.2. Privacy Requirements</h3></div></div></div><p>
... ...
@@ -209,7 +209,7 @@ failure of Torbutton</a> was the options panel. Each option
209 209
 that detectably alters browser behavior can be used as a fingerprinting tool.
210 210
 Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">should be
211 211
 disabled in the mode</a> except as an opt-in basis. We should not load
212
-system-wide and/or Operating System provided addons or plugins.
212
+system-wide and/or operating system provided addons or plugins.
213 213
 
214 214
      </p><p>
215 215
 Instead of global browser privacy options, privacy decisions should be made
... ...
@@ -292,7 +293,10 @@ information</strong></span><p>
292 293
 In some cases, the adversary may opt for a heavy-handed approach, such as
293 294
 seizing the computers of all Tor users in an area (especially after narrowing
294 295
 the field by the above two pieces of information). History records and cache
295
-data are the primary goals here.
296
+data are the primary goals here. Secondary goals may include confirming
297
+on-disk identifiers (such as hostname and disk-logged spoofed MAC adddress
298
+history) obtained by other means.
299
+
296 300
      </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="adversary-positioning"></a>3.2. Adversary Capabilities - Positioning</h3></div></div></div><p>
297 301
 The adversary can position themselves at a number of different locations in
298 302
 order to execute their attacks.
... ...
@@ -588,11 +592,6 @@ connections are not attempted, through the proxy or otherwise (Tor does not
588 592
 yet support IPv6). We have also verified that external protocol helpers, such
589 593
 as smb urls and other custom protocol handlers are all blocked.
590 594
 
591
- </p><p>
592
-
593
-Numerous other third parties have also reviewed and tested the proxy settings
594
-and have provided test cases based on their work. See in particular <a class="ulink" href="http://decloak.net/" target="_top">decloak.net</a>. 
595
-
596 595
  </p></li><li class="listitem">Disabling plugins
597 596
 
598 597
  <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
... ...
@@ -655,13 +654,13 @@ system-wide extensions (through the use of
655 654
 disabled, which prevents Flash cookies from leaking from a pre-existing Flash
656 655
 directory.
657 656
 
658
-   </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp38917584"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
657
+   </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60523824"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
659 658
 
660 659
 The User Agent MUST (at user option) prevent all disk records of browser activity.
661 660
 The user should be able to optionally enable URL history and other history
662 661
 features if they so desire. 
663 662
 
664
-    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp38918944"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
663
+    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60525184"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
665 664
 
666 665
 We achieve this goal through several mechanisms. First, we set the Firefox
667 666
 Private Browsing preference
... ...
@@ -735,7 +734,7 @@ the url bar origin for which browser state exists, possibly with a
735 734
 context-menu option to drill down into specific types of state or permissions.
736 735
 An example of this simplification can be seen in Figure 1.
737 736
 
738
-   </p><div class="figure"><a id="idp38941648"></a><p class="title"><strong>Figure 1. Improving the Privacy UI</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="NewCookieManager.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p>
737
+   </p><div class="figure"><a id="idp60547888"></a><p class="title"><strong>Figure 1. Improving the Privacy UI</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="NewCookieManager.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p>
739 738
 
740 739
 This example UI is a mock-up of how isolating identifiers to the URL bar
741 740
 origin can simplify the privacy UI for all data - not just cookies. Once
... ...
@@ -773,7 +772,7 @@ of HTTP POST data.
773 772
 However, to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3666" target="_top">increase the
774 773
 security of the isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve conflicts
775 774
 with OCSP relying the cacheKey property for reuse of POST requests</a>, we
776
-had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0004-Add-a-string-based-cacheKey.patch" target="_top">patch
775
+had to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/18dfd3064aff23a402fec248aab797036a9ba615" target="_top">patch
777 776
 Firefox to provide a cacheDomain cache attribute</a>. We use the fully
778 777
 qualified url bar domain as input to this field, to avoid the complexities
779 778
 of heuristically determining the second-level DNS name.
... ...
@@ -799,7 +798,7 @@ FQDN that was used to source the third party element.
799 798
      </p><p>
800 799
 
801 800
 Additionally, because the image cache is a separate entity from the content
802
-cache, we had to patch Firefox to also <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0024-Isolate-the-Image-Cache-per-url-bar-domain.patch" target="_top">isolate
801
+cache, we had to patch Firefox to also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/114cd22282f8b3cd6e6a5c29de8a8c396a79acc0" target="_top">isolate
803 802
 this cache per url bar domain</a>.
804 803
 
805 804
      </p></li><li class="listitem">HTTP Auth
... ...
@@ -814,7 +813,7 @@ linkability between domains</a>.
814 813
 
815 814
 DOM storage for third party domains MUST be isolated to the url bar origin,
816 815
 to prevent linkability between sites. This functionality is provided through a
817
-<a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0026-Isolate-DOM-storage-to-first-party-URI.patch" target="_top">patch
816
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/973468a07fb9e7d9995d01b250223a8df16d6cfd" target="_top">patch
818 817
 to Firefox</a>.
819 818
 
820 819
      </p></li><li class="listitem">Flash cookies
... ...
@@ -843,7 +842,7 @@ origin MUST NOT be reused for that same third party in another url bar origin.
843 842
 We currently clear SSL Session IDs upon <a class="link" href="#new-identity" title="4.7. Long-Term Unlinkability via &quot;New Identity&quot; button">New
844 843
 Identity</a>, we disable TLS Session Tickets via the Firefox Pref
845 844
 <span class="command"><strong>security.enable_tls_session_tickets</strong></span>. We disable SSL Session
846
-IDs via a <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0008-Disable-SSL-Session-ID-tracking.patch" target="_top">patch
845
+IDs via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/5524ae43780e4738310852cc2a0b7c5d25aa69ed" target="_top">patch
847 846
 to Firefox</a>. To compensate for the increased round trip latency from disabling
848 847
 these performance optimizations, we also enable
849 848
 <a class="ulink" href="https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00" target="_top">TLS
... ...
@@ -934,18 +933,11 @@ cleared by <a class="link" href="#new-identity" title="4.7. Long-Term Unlinkabi
934 933
 defend against the creation of these cookies between <span class="command"><strong>New
935 934
 Identity</strong></span> invocations.
936 935
       </p></li><li class="listitem">Exit node usage
937
-     <p><span class="command"><strong>Design Goal:</strong></span>
938
-
939
-Every distinct navigation session (as defined by a non-blank Referer header)
940
-MUST exit through a fresh Tor circuit in Tor Browser to prevent exit node
941
-observers from linking concurrent browsing activity.
942
-
943
-     </p><p><span class="command"><strong>Implementation Status:</strong></span>
936
+    <p>
944 937
 
945
-The Tor feature that supports this ability only exists in the 0.2.3.x-alpha
946
-series. <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3455" target="_top">Ticket
947
-#3455</a> is the Torbutton ticket to make use of the new Tor
948
-functionality.
938
+All content elements associated with a given URL bar domain (including the
939
+main page) are given a SOCKS username and password for this domain, which
940
+causes Tor to isolate all of these requests on their own set of Tor circuits.
949 941
 
950 942
     </p></li></ol></div><p>
951 943
 For more details on identifier linkability bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-linkability&amp;status=!closed" target="_top">tbb-linkability tag in our bugtracker</a>
... ...
@@ -962,14 +954,11 @@ determine how many bits of identifying information each attribute provided.
962 954
 
963 955
    </p><p>
964 956
 
965
-Because fingerprinting is problem that potentially touches every aspect of the
966
-browser, we reduce the efforts for fingerprinting resistance by only
957
+Because fingerprinting is a problem that potentially touches every aspect of
958
+the browser, we reduce the efforts for fingerprinting resistance by only
967 959
 concerning ourselves with reducing the fingerprintable differences
968 960
 <span class="emphasis"><em>among</em></span> Tor Browser users. We do not believe it is possible
969
-to solve cross-browser fingerprinting issues. Similarly, we prioritize issues
970
-that differentiate only MacOS, Windows, and Linux lower than those that
971
-differentiate aspects of the hardware, third party installed software, and
972
-configuration differences in those operating systems.
961
+to solve cross-browser fingerprinting issues.
973 962
 
974 963
    </p><p>
975 964
 
... ...
@@ -1017,7 +1006,7 @@ Currently, we entirely disable all plugins in Tor Browser. However, as a
1017 1006
 compromise due to the popularity of Flash, we allow users to re-enable Flash,
1018 1007
 and flash objects are blocked behind a click-to-play barrier that is available
1019 1008
 only after the user has specifically enabled plugins. Flash is the only plugin
1020
-available, the rest are <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0005-Block-all-plugins-except-flash.patch" target="_top">entirely
1009
+available, the rest are <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/1ef32dcf0cc64876f5b92a583b788dc921f22c5d" target="_top">entirely
1021 1010
 blocked from loading by a Firefox patch</a>. We also set the Firefox
1022 1011
 preference <span class="command"><strong>plugin.expose_full_path</strong></span> to false, to avoid
1023 1012
 leaking plugin installation information.
... ...
@@ -1130,7 +1119,7 @@ and <a class="ulink" href="https://fedorahosted.org/lohit/" target="_top">Lohit
1130 1119
 font set is fairly complete by itself, but Nanum and Lohit have smaller
1131 1120
 versions of many South Asian languages. When combined in a way that chooses the
1132 1121
 smallest font implementations for each locale, these three font sets provide
1133
-which provide coverage for the all languages used on Wikipedia with more than
1122
+poverage for the all languages used on Wikipedia with more than
1134 1123
 10,000 articles, and several others as well, in approximately 3MB of compressed
1135 1124
 overhead. The <a class="ulink" href="https://www.google.com/get/noto/" target="_top">Noto font
1136 1125
 set</a> is another font set that aims for complete coverage, but is
... ...
@@ -1138,9 +1128,9 @@ considerably larger than the combination of the Droid, Nanum, and Lohit fonts.
1138 1128
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1139 1129
 
1140 1130
 In the meantime while we investigate shipping our own fonts, we disable
1141
-plugins, which prevents font enumeration. Additionally, we limit both the
1131
+plugins, which prevents font name enumeration. Additionally, we limit both the
1142 1132
 number of font queries from CSS, as well as the total number of fonts that can
1143
-be used in a document <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0011-Limit-the-number-of-fonts-per-document.patch" target="_top">with
1133
+be used in a document <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/d515c79ffd115b132caade7f881e5b467448964d" target="_top">with
1144 1134
 a Firefox patch</a>. We create two prefs,
1145 1135
 <span class="command"><strong>browser.display.max_font_attempts</strong></span> and
1146 1136
 <span class="command"><strong>browser.display.max_font_count</strong></span> for this purpose. Once these
... ...
@@ -1153,13 +1143,13 @@ To improve rendering, we exempt remote <a class="ulink" href="https://developer.
1153 1143
 fonts</a> from these counts, and if a font-family CSS rule lists a remote
1154 1144
 font (in any order), we use that font instead of any of the named local fonts.
1155 1145
 
1156
-     </p></li><li class="listitem">Monitor and Desktop resolution
1146
+     </p></li><li class="listitem">Monitor and OS Desktop resolution
1157 1147
      <p>
1158 1148
 
1159 1149
 Both CSS and Javascript have access to a lot of information about the screen
1160 1150
 resolution, usable desktop size, OS widget size, toolbar size, title bar size,
1161
-screen orientation, and other desktop features that are not at all relevant
1162
-to rendering and serve only to provide information for fingerprinting.
1151
+and OS desktop widget sizing information that are not at all relevant to
1152
+rendering and serve only to provide information for fingerprinting.
1163 1153
 
1164 1154
      </p><p><span class="command"><strong>Design Goal:</strong></span>
1165 1155
 
... ...
@@ -1193,20 +1183,23 @@ addition, we prevent auto-maximizing on browser start, and are investigating a
1193 1183
 user-friendly way of informing users that maximized windows are detrimental
1194 1184
 to privacy in this mode.
1195 1185
 
1196
-     </p></li><li class="listitem">CSS Media Queries
1186
+     </p></li><li class="listitem">Display Media information
1197 1187
      <p>
1198 1188
 
1199
-Even without Javascript, CSS has access to a lot of information about the screen
1200
-resolution, usable desktop size, OS widget size, toolbar size, title bar size,
1201
-system theme colors, and other desktop features that are not at all relevant
1202
-to rendering and serve only to provide information for fingerprinting. Most of this information comes from 
1203
-<a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries" target="_top">CSS Media Queries</a>, but 
1204
-Mozilla has exposed <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#System_Colors" target="_top">several user and OS theme defined color values</a> to CSS as well.
1189
+Beyond simple resolution information, a large amount of so-called "Media"
1190
+information is also exported to content. Even without Javascript, CSS has
1191
+access to a lot of information about the device orientation, system theme
1192
+colors, and other desktop features that are not at all relevant to rendering
1193
+and serve only to provide information for fingerprinting. Most of this
1194
+information comes from <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries" target="_top">CSS
1195
+Media Queries</a>, but Mozilla has exposed <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#System_Colors" target="_top">several
1196
+user and OS theme defined color values</a> to CSS as well.
1205 1197
 
1206 1198
      </p><p><span class="command"><strong>Design Goal:</strong></span>
1207
-In Private Browsing Mode, CSS should not be able infer anything that the user
1208
-has configured about their computer. Additionally, it should not be able to
1209
-infer machine-specific details such as screen orientation or type.
1199
+
1200
+CSS should not be able infer anything that the user has configured about their
1201
+computer. Additionally, it should not be able to infer machine-specific
1202
+details such as screen orientation or type.
1210 1203
 
1211 1204
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1212 1205
 
... ...
@@ -1230,7 +1223,7 @@ these headers should remain identical across the population even when updated.
1230 1223
 Firefox provides several options for controlling the browser user agent string
1231 1224
 which we leverage. We also set similar prefs for controlling the
1232 1225
 Accept-Language and Accept-Charset headers, which we spoof to English by default. Additionally, we
1233
-<a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0001-Block-Components.interfaces-from-content.patch" target="_top">remove
1226
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/95cd0e8071aa1fe3f4914331d4036f218007e31d" target="_top">remove
1234 1227
 content script access</a> to Components.interfaces, which <a class="ulink" href="http://pseudo-flaw.net/tor/torbutton/fingerprint-firefox.html" target="_top">can be
1235 1228
 used</a> to fingerprint OS, platform, and Firefox minor version.  </p></li><li class="listitem">Locale Fingerprinting
1236 1229
      <p>
... ...
@@ -1264,14 +1257,12 @@ software should detect if the users clock is significantly divergent from the
1264 1257
 clocks of the relays that it connects to, and use this to reset the clock
1265 1258
 values used in Tor Browser to something reasonably accurate. Alternatively,
1266 1259
 the browser can obtain this clock skew via a mechanism similar to that used in
1267
-<a class="ulink" href="" target="_top">tlsdate</a>.
1260
+<a class="ulink" href="https://github.com/ioerror/tlsdate" target="_top">tlsdate</a>.
1268 1261
 
1269 1262
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1270 1263
 
1271 1264
 We set the timezone using the TZ environment variable, which is supported on
1272
-all platforms. Additionally, we plan to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3652" target="_top">obtain a clock
1273
-offset from Tor</a>, but this won't be available until Tor 0.2.3.x is in
1274
-use.
1265
+all platforms.
1275 1266
 
1276 1267
      </p></li><li class="listitem">Javascript performance fingerprinting
1277 1268
      <p>
... ...
@@ -1325,12 +1316,12 @@ fingerprinting: timestamp quantization and jitter.
1325 1316
 
1326 1317
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1327 1318
 We have no implementation as of yet.
1328
-     </p></li><li class="listitem">Operating System type fingerprinting
1319
+     </p></li><li class="listitem">Operating system type fingerprinting
1329 1320
      <p>
1330 1321
 
1331 1322
 As we mentioned in the introduction of this section, OS type fingerprinting is
1332 1323
 currently considered a lower priority, due simply to the numerous ways that
1333
-characteristics of the Operating System type may leak into content, and the
1324
+characteristics of the operating system type may leak into content, and the
1334 1325
 comparatively low contribution of OS to overall entropy. In particular, there
1335 1326
 are likely to be many ways to measure the differences in widget size,
1336 1327
 scrollbar size, and other rendered details on a page. Also, directly exported
... ...
@@ -1348,25 +1339,25 @@ fingerprint configuration and user-specific information.
1348 1339
 
1349 1340
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1350 1341
 
1351
-We have no defenses deployed that address OS type fingerprinting, but nothing
1352
-else. Several defenses may help also mitigate it, in addition to reducing a
1353
-lot more entropy elsewhere. You can see the major areas of OS fingerprinting
1354
-we're aware of using the tag <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting-os" target="_top">tbb-fingerprinting-os
1355
-on our bugtracker</a>.
1342
+We have no defenses deployed that address OS type fingerprinting by itself.
1343
+Several defenses may help also mitigate it, in addition to reducing a lot more
1344
+entropy elsewhere. You can see the major areas of OS fingerprinting we're
1345
+aware of using the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting-os" target="_top">tbb-fingerprinting-os
1346
+tag on our bugtracker</a>.
1356 1347
 
1357 1348
      </p></li></ol></div></div><p>
1358
-For more details on identifier linkability bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting&amp;status=!closed" target="_top">tbb-fingerprinting tag in our bugtracker</a>
1349
+For more details on fingerprinting bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting&amp;status=!closed" target="_top">tbb-fingerprinting tag in our bugtracker</a>
1359 1350
   </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="new-identity"></a>4.7. Long-Term Unlinkability via "New Identity" button</h3></div></div></div><p>
1360 1351
 
1361 1352
 In order to avoid long-term linkability, we provide a "New Identity" context
1362 1353
 menu option in Torbutton. This context menu option is active if Torbutton can
1363 1354
 read the environment variables $TOR_CONTROL_PASSWD and $TOR_CONTROL_PORT.
1364 1355
 
1365
-   </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39106608"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
1356
+   </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60693264"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
1366 1357
 
1367 1358
 All linkable identifiers and browser state MUST be cleared by this feature.
1368 1359
 
1369
-    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39107856"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1360
+    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60694512"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1370 1361
 
1371 1362
 First, Torbutton disables Javascript in all open tabs and windows by using
1372 1363
 both the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDocShell#Attributes" target="_top">browser.docShell.allowJavascript</a>
... ...
@@ -1383,10 +1374,10 @@ After closing all tabs, we then emit "<a class="ulink" href="https://developer.m
1383 1374
 (which instructs addons and various Firefox components to clear their session
1384 1375
 state), and then manually clear the following state: searchbox and findbox
1385 1376
 text, HTTP auth, SSL state, OCSP state, site-specific content preferences
1386
-(including HSTS state), content and image cache, offline cache, Cookies, DOM
1387
-storage, crypto tokens, DOM local storage, the safe browsing key, and the
1377
+(including HSTS state), content and image cache, offline cache, offline
1378
+storage, Cookies, crypto tokens, DOM storage, the safe browsing key, and the
1388 1379
 Google wifi geolocation token (if it exists). We also clear NoScript's site
1389
-and temporary permissions.
1380
+and temporary permissions, and all other browser site permissions.
1390 1381
 
1391 1382
      </p><p>
1392 1383
 
... ...
@@ -1405,13 +1396,48 @@ In addition to the above mechanisms that are devoted to preserving privacy
1405 1396
 while browsing, we also have a number of technical mechanisms to address other
1406 1397
 privacy and security issues.
1407 1398
 
1408
-   </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a id="traffic-fingerprinting-defenses"></a><span class="command"><strong>Website Traffic Fingerprinting Defenses</strong></span><p>
1399
+   </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a id="security-slider"></a><span class="command"><strong>Security Slider</strong></span><p>
1400
+
1401
+In order to provide vulnerability surface reduction for users that need high
1402
+security, we have implemented a "Security Slider" that essentially represents a
1403
+tradeoff between usability and security. Using metrics collected from
1404
+Mozilla's bugtracker, we analyzed the vulnerability counts of core components,
1405
+and used <a class="ulink" href="https://github.com/iSECPartners/publications/tree/master/reports/Tor%20Browser%20Bundle" target="_top">information
1406
+gathered from a study performed by iSec Partners</a> to inform which
1407
+features should be disabled at which security levels.
1408
+
1409
+     </p><p>
1410
+
1411
+The Security Slider consists of four positions. At the lowest security level
1412
+(the default), we disable
1413
+<span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span> for Latin locales, as
1414
+well as <span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span>. At the
1415
+medium-low level, we disable most Javascript JIT and related optimizations
1416
+(<span class="command"><strong>javascript.options.ion.content</strong></span>,
1417
+<span class="command"><strong>javascript.options.typeinference</strong></span>,
1418
+<span class="command"><strong>javascript.options.asmjs</strong></span>). We also make HTML5 media
1419
+click-to-play (<span class="command"><strong>noscript.forbidMedia</strong></span>), and disable WebAudio
1420
+(<span class="command"><strong>media.webaudio.enabled</strong></span>). At the medium-high level, we
1421
+disable the baseline JIT
1422
+(<span class="command"><strong>javascript.options.baselinejit.content</strong></span>), disable
1423
+Javascript entirely all elements that are loaded when the URL bar is not
1424
+HTTPS (<span class="command"><strong>noscript.globalHttpsWhitelist</strong></span>), and fully disable
1425
+graphite font rendering for all locales
1426
+(<span class="command"><strong>gfx.font_rendering.graphite.enable</strong></span>). At the highest level,
1427
+Javascript is fully disabled (<span class="command"><strong>noscript.global</strong></span>), as well as
1428
+all non-WebM HTML5 codecs (<span class="command"><strong>media.ogg.enabled</strong></span>,
1429
+<span class="command"><strong>media.opus.enabled</strong></span>, <span class="command"><strong>media.opus.enabled</strong></span>,
1430
+<span class="command"><strong>media.DirectShow.enabled</strong></span>,
1431
+<span class="command"><strong>media.wave.enabled</strong></span>, and
1432
+<span class="command"><strong>media.apple.mp3.enabled</strong></span>).
1433
+
1434
+     </p></li><li class="listitem"><a id="traffic-fingerprinting-defenses"></a><span class="command"><strong>Website Traffic Fingerprinting Defenses</strong></span><p>
1409 1435
 
1410 1436
 <a class="link" href="#website-traffic-fingerprinting">Website Traffic
1411 1437
 Fingerprinting</a> is a statistical attack to attempt to recognize specific
1412 1438
 encrypted website activity.
1413 1439
 
1414
-     </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39122096"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1440
+     </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60722880"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1415 1441
 
1416 1442
 We want to deploy a mechanism that reduces the accuracy of <a class="ulink" href="https://en.wikipedia.org/wiki/Feature_selection" target="_top">useful features</a> available
1417 1443
 for classification. This mechanism would either impact the true and false
... ...
@@ -1433,8 +1459,8 @@ Congestion-Sensitive BUFLO</a>. It may be also possible to <a class="ulink" href
1433 1459
 defenses</a> such that they only use existing spare Guard bandwidth capacity in the Tor
1434 1460
 network, making them also effectively no-overhead.
1435 1461
 
1436
-     </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39128912"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1437
-Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0017-Randomize-HTTP-request-order-and-pipeline-depth.patch" target="_top">randomize
1462
+     </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60729776"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1463
+Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/27ef32d509ed1c9eeb28f7affee0f9ba11773f72" target="_top">randomize
1438 1464
 pipeline order and depth</a>. Unfortunately, pipelining is very fragile.
1439 1465
 Many sites do not support it, and even sites that advertise support for
1440 1466
 pipelining may simply return error codes for successive requests, effectively
... ...
@@ -1483,6 +1509,12 @@ homepage to point to a <a class="ulink" href="https://check.torproject.org/?lang
1483 1509
 informs the user</a> that their browser is out of
1484 1510
 date.
1485 1511
 
1512
+     </p><p>
1513
+
1514
+We also make use of the in-browser Mozilla updater, and have <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/777695d09e3cff4c79c48839e1c9d5102b772d6f" target="_top">patched
1515
+the updater</a> to avoid sending OS and Kernel version information as part
1516
+of its update pings.
1517
+
1486 1518
      </p></li></ol></div></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="BuildSecurity"></a>5. Build Security and Package Integrity</h2></div></div></div><p>
1487 1519
 
1488 1520
 In the age of state-sponsored malware, <a class="ulink" href="https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise" target="_top">we
... ...
@@ -1492,7 +1524,7 @@ contend with. For this reason, we have deployed a build system
1492 1524
 that allows anyone to use our source code to reproduce byte-for-byte identical
1493 1525
 binary packages to the ones that we distribute.
1494 1526
 
1495
-  </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp39143984"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p>
1527
+  </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60746000"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p>
1496 1528
 
1497 1529
 The GNU toolchain has been working on providing reproducible builds for some
1498 1530
 time, however a large software project such as Firefox typically ends up
... ...
@@ -1516,7 +1548,7 @@ authentication, as well as transfer intermediate build outputs between the
1516 1548
 stages of the build process. Because Gitian creates an Ubuntu build
1517 1549
 environment, we must use cross-compilation to create packages for Windows and
1518 1550
 Mac OS. For Windows, we use mingw-w64 as our cross compiler. For Mac OS, we
1519
-use toolchain4 in combination with a binary redistribution of the Mac OS 10.6
1551
+use crosstools-ng in combination with a binary redistribution of the Mac OS 10.6
1520 1552
 SDK.
1521 1553
 
1522 1554
    </p><p>
... ...
@@ -1561,19 +1593,10 @@ patch</a>.
1561 1593
 
1562 1594
 The standard way of controlling timestamps in Gitian is to use libfaketime,
1563 1595
 which hooks time-related library calls to provide a fixed timestamp. However,
1564
-libfaketime does not spoof the millisecond and microsecond components of
1565
-timestamps, which found their way into pyc files and also in explicit Firefox
1566
-build process timestamp embedding.
1567
-    </p><p>
1568
-
1569
-We addressed the Firefox issues with direct patches to their build process,
1570
-which have since been merged. However, pyc timestamps had to be address with 
1571
-an additional <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/pyc-timestamp.sh" target="_top">helper
1572
-script</a>.
1573
-    </p><p>
1574
-
1575
-The timezone leaks were addressed by setting the <span class="command"><strong>TZ</strong></span>
1576
-environment variable to UTC in our descriptors.
1596
+due to our use of wine to run py2exe for python-based pluggable transports,
1597
+pyc timestamps had to be address with an additional <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/pyc-timestamp.sh" target="_top">helper
1598
+script</a>. The timezone leaks were addressed by setting the
1599
+<span class="command"><strong>TZ</strong></span> environment variable to UTC in our descriptors.
1577 1600
 
1578 1601
     </p></li><li class="listitem">Deliberately generated entropy
1579 1602
     <p>
... ...
@@ -1610,11 +1633,18 @@ hostname and Linux kernel version can leak from the host OS into the LXC
1610 1633
 container. We addressed umask by setting it explicitly in our Gitian
1611 1634
 descriptor scriptlet, and addressed the hostname and kernel version leaks by
1612 1635
 directly patching the aspects of the Firefox build process that included this
1613
-information into the build.
1614
-   </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp39178848"></a>5.2. Package Signatures and Verification</h3></div></div></div><p>
1636
+information into the build. It also turns out that some libraries (in
1637
+particular: libgmp) attempt to detect the current CPU to determine which
1638
+optimizations to compile in. This CPU type is uniform on our KVM instances,
1639
+but differs under LXC. We are also investigating currently <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/12239" target="_top">unknown sources of
1640
+unitialized memory</a> that only appear in LXC mode, as well as
1641
+<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/12240" target="_top">oddities related to
1642
+time-based dependency tracking</a> that only appear in LXC containers.
1643
+
1644
+   </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60781056"></a>5.2. Package Signatures and Verification</h3></div></div></div><p>
1615 1645
 
1616 1646
 The build process produces a single sha256sums.txt file that contains a sorted
1617
-list the SHA-256 hashes of every package produced for that build version. Each
1647
+list of the SHA-256 hashes of every package produced for that build version. Each
1618 1648
 official builder uploads this file and a GPG signature of it to a directory
1619 1649
 on a Tor Project's web server. The build scripts have an optional matching
1620 1650
 step that downloads these signatures, verifies them, and ensures that the
... ...
@@ -1645,7 +1675,7 @@ and by their nature are based on non-public key material, providing native
1645 1675
 code-signed packages while still preserving ease of reproducibility
1646 1676
 verification has not yet been achieved.
1647 1677
 
1648
-    </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp39182784"></a>5.3. Anonymous Verification</h3></div></div></div><p>
1678
+    </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60784992"></a>5.3. Anonymous Verification</h3></div></div></div><p>
1649 1679
 
1650 1680
 Due to the fact that bit-identical packages can be produced by anyone, the
1651 1681
 security of this build system extends beyond the security of the official
... ...
@@ -1717,14 +1747,16 @@ source URL parameters.
1717 1747
 
1718 1748
   </p><p>
1719 1749
 
1720
-We believe the Referer header should be made explicit. If a site wishes to
1721
-transmit its URL to third party content elements during load or during
1722
-link-click, it should have to specify this as a property of the associated HTML
1723
-tag. With an explicit property, it would then be possible for the user agent to
1724
-inform the user if they are about to click on a link that will transmit Referer
1725
-information (perhaps through something as subtle as a different color in the
1726
-lower toolbar for the destination URL). This same UI notification can also be
1727
-used for links with the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Element/a#Attributes" target="_top">"ping"</a>
1750
+We believe the Referer header should be made explicit, and believe that CSP
1751
+2.0 provides a <a class="ulink" href="http://www.w3.org/TR/CSP11/#directive-referrer" target="_top">decent step in this
1752
+direction</a>. If a site wishes to transmit its URL to third party content
1753
+elements during load or during link-click, it should have to specify this as a
1754
+property of the associated HTML tag or CSP policy. With an explicit property
1755
+or policy, it would then be possible for the user agent to inform the user if
1756
+they are about to click on a link that will transmit Referer information
1757
+(perhaps through something as subtle as a different color in the lower toolbar
1758
+for the destination URL). This same UI notification can also be used for links
1759
+with the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Element/a#Attributes" target="_top">"ping"</a>
1728 1760
 attribute.
1729 1761
 
1730 1762
   </p></li><li class="listitem">window.name
... ...
@@ -1759,7 +1791,7 @@ possible for us to <a class="ulink" href="https://trac.torproject.org/projects/t
1759 1791
 ourselves</a>, as they are comparatively rare and can be handled with site
1760 1792
 permissions.
1761 1793
 
1762
-   </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp39214016"></a>A.2. Promising Standards</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="http://web-send.org" target="_top">Web-Send Introducer</a><p>
1794
+   </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp60816992"></a>A.2. Promising Standards</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="http://web-send.org" target="_top">Web-Send Introducer</a><p>
1763 1795
 
1764 1796
 Web-Send is a browser-based link sharing and federated login widget that is
1765 1797
 designed to operate without relying on third-party tracking or abusing other
1766 1798