130
edits
Ethantseng (talk | contribs) (Update the dashboard.) |
|||
| (13 intermediate revisions by 3 users not shown) | |||
| Line 4: | Line 4: | ||
Refer to the design and implementation document of the Tor Browser: <br> | Refer to the design and implementation document of the Tor Browser: <br> | ||
https://www.torproject.org/projects/torbrowser/design/#fingerprinting-linkability | https://www.torproject.org/projects/torbrowser/design/#fingerprinting-linkability | ||
== Technical Details == | |||
This page contains technical details about the things we do in Resist fingerprinting mode. It is up to date as of March 7, 2018 | |||
=== Terse List === | |||
* Complicated (see below) | |||
** Canvas image extraction is blocked | |||
** Absolute Screen Coordinates are obscured | |||
** Window Dimensions are rounded to a multiple of 200x100, and a warning is shown when maximizing | |||
** We only allow specific system fonts to be used, and we ship them to the user using kinto | |||
* Non-Trivial (see below) | |||
** The performance API is mostly disabled | |||
** Time Precision is reduced to 100ms, with up to 100ms of jitter | |||
** mozAddonManager may be blocked {{Bug|1384330}} | |||
** Media Devices are spoofed {{Bug|1372073}} | |||
** WebGL is limited {{Bug|1217290}} | |||
** The Keyboard Layout is spoofed | |||
** The Locale is spoofed to en-US | |||
** The Date Input Field and Date Picker Panel are spoofed to en-US {{Bug|1492587}} | |||
** If you customize the preferred language list (Accept-Language), you will be warned {{Bug|1039069}} | |||
** System Media Queries will never match {{Bug|1479240}} | |||
** The Pointer Event is spoofed {{Bug|1363508}} and also pointerEvent.pointerid {{Bug|1492766}} | |||
* Trivial | |||
** The browser version is reported to be the most recent ESR version (but the OS is not spoofed) | |||
** Timezone is spoofed to 'UTC' | |||
** The gamepad API is disabled | |||
** All device sensors are disabled | |||
** The WebSpeech API is disabled | |||
** WEBGL_debug_renderer_info extension is disabled {{Bug|1337157}} | |||
** navigator.hardwareConcurrency is spoofed to 2 | |||
** Site-specific zoom is disabled {{Bug|1369357}} | |||
** MediaError.message is restricted to a whitelist {{Bug|1354633}} | |||
** The Network Information API reports an 'Unknown' connection type, and the ontypechange event is suppressed {{Bug|1372072}} | |||
** The Media Statistics API will report calculated numbers not reflecting reality {{Bug|1369309}} | |||
** Web Extensions are able to toggle privacy.resistFingerprinting | |||
** Geolocation is disabled {{Bug|1372069}} - but this will be reverted {{Bug|1441295}} | |||
** screen.orientation.type is spoofed as 'landscape-primary' and screen.orientation.angle is spoofed to '0' {{Bug|1281949}} but also {{Bug|1433815}} | |||
** navigator.plugins and navigator.mimeTypes are reported as empty {{Bug|1281963}} and {{Bug|1324044}} | |||
** prefers-reduced-motion always returns false {{Bug|1478158}} | |||
** AudioContext OutputLatency is spoofed {{Bug|1564422}} | |||
** prefers-color-scheme always says light mode. | |||
=== Details === | |||
==== Canvas Fingerprinting Detection ==== | |||
==== Absolute Screen Coordinates ==== | |||
{{Bug|1382499}} | |||
==== Window Dimensions ==== | |||
{{Bug|1330882}} | |||
==== Fonts ==== | |||
TODO | |||
==== Performance API ==== | |||
Most performance APIs are disabled, but not all of them. TODO more details. | |||
==== Time Precision Reduction ==== | |||
TODO more details | |||
* animation API - {{Bug|1382545}} | |||
==== mozAddonManager ==== | |||
window.navigator.mozAddonManager is only exposed to addons.mozilla.org. In Resist Fingerprinting mode, we keep it exposed; however if the additional preference 'privacy.resistFingerprinting.block_mozAddonManager' is true, then it is not exposed to AMO | |||
==== Media Devices ==== | |||
When RFP is enabled, enumerateDevices reports that the user has one camera (named 'Internal Camera') and one microphone (named 'Internal Microphone'). The devicechange event is also suppressed. | |||
==== WebGL ==== | |||
TODO | |||
==== Keyboard Layout ==== | |||
{{Bug|1222285}}, {{Bug|1438795}}, {{Bug|1409974}}, {{Bug|1433592}} | |||
==== Locale ==== | |||
{{Bug|867501}}, {{Bug|1330892}}, {{Bug|1369330}}, {{Bug|1409973}} | |||
==== Accept-Languages ==== | |||
== Project Schedule == | == Project Schedule == | ||
* Complete the implementation of MVP in '''Firefox 57 ( | * Complete the implementation of MVP in '''Firefox 57 (2017-09-20)''' | ||
** This is being tracked by three milestones M1, M2, and M3 | ** This is being tracked by three milestones M1, M2, and M3 | ||
* Feature stabilization and refinement in '''Firefox 58 (2017-11-13)''' | * Feature stabilization and refinement in '''Firefox 58 (2017-11-13)''' | ||
| Line 15: | Line 109: | ||
* Ship the feature in '''Firefox 59 (2018-01-15) | * Ship the feature in '''Firefox 59 (2018-01-15) | ||
** Tor Browser will be using Firefox ESR 59 | ** Tor Browser will be using Firefox ESR 59 | ||
== Bug Tracking == | == Bug Tracking == | ||
| Line 80: | Line 173: | ||
=== Fingerprinting P2 Bugs List === | === Fingerprinting P2 Bugs List === | ||
<bugzilla> | <disabled-bugzilla> | ||
{ | { | ||
"blocks":"1329996", | "blocks":"1329996", | ||
| Line 88: | Line 181: | ||
"order": "status, assigned_to" | "order": "status, assigned_to" | ||
} | } | ||
</bugzilla> | </disabled-bugzilla> | ||
=== Fingerprinting P3-P5 Bugs List === | === Fingerprinting P3-P5 Bugs List === | ||
<bugzilla> | <disabled-bugzilla> | ||
{ | { | ||
"blocks":"1329996", | "blocks":"1329996", | ||
| Line 97: | Line 190: | ||
"priority":["P3", "P4", "P5", "--"], | "priority":["P3", "P4", "P5", "--"], | ||
"include_fields": "id, summary, status, priority, product, component, assigned_to, depends_on, whiteboard", | "include_fields": "id, summary, status, priority, product, component, assigned_to, depends_on, whiteboard", | ||
"order": "status, assigned_to" | |||
} | |||
</disabled-bugzilla> | |||
=== Fingerprinting Breakage === | |||
<bugzilla> | |||
{ | |||
"status":["NEW", "ASSIGNED", "REOPENED", "RESOLVED", "VERIFIED"], | |||
"whiteboard":["fingerprinting-breakage"], | |||
"include_fields": "id, summary, status, product, component, assigned_to, depends_on, whiteboard", | |||
"order": "status, assigned_to" | "order": "status, assigned_to" | ||
} | } | ||
</bugzilla> | </bugzilla> | ||
=== All Open Tagged Fingerprinting Bugs === | |||
<disabled-bugzilla> | |||
{ | |||
"status":["NEW", "ASSIGNED", "REOPENED"], | |||
"whiteboard":["fingerprinting"], | |||
"include_fields": "id, summary, status, product, component, assigned_to, depends_on, whiteboard", | |||
"order": "status, assigned_to" | |||
} | |||
</disabled-bugzilla> | |||
=== Fingerprinting Resolved Bugs === | === Fingerprinting Resolved Bugs === | ||
<bugzilla> | <disabled-bugzilla> | ||
{ | { | ||
"blocks":"1329996", | "blocks":"1329996", | ||
| Line 109: | Line 224: | ||
"order": "assigned_to" | "order": "assigned_to" | ||
} | } | ||
</bugzilla> | </disabled-bugzilla> | ||
edits