Security/Fingerprinting
Cross-Origin Fingerprinting Unlinkability
The anti-fingerprinting project is part of the Tor Uplift project.
Its goal is to build up the same level of fingerprinting resistance as the Tor Browser in Firefox.
Refer to the design and implementation document of the Tor Browser:
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
Window Dimensions
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
- Complete the implementation of MVP in Firefox 57 (2017-09-20)
- This is being tracked by three milestones M1, M2, and M3
- Feature stabilization and refinement in Firefox 58 (2017-11-13)
- Perform integration test to identify regressions and Web compatibility issues
- Perform tests to verify the effectiveness of fingerprinting protection
- Fix regressions and any other issues
- Figure out the product strategy of Firefox to roll out this functionality
- Ship the feature in Firefox 59 (2018-01-15)
- Tor Browser will be using Firefox ESR 59
Bug Tracking
All fingerprinting bugs are being tracked under the meta bug:
bug 1329996 - [META] Support anti-fingerprinting protection
Priority Definition
- P1: MVP (Minimum Viable Product)
- P2: Nice to Have
- P3: Backlog
- Any bug which is marked as [fp:m1-3] in the Whiteboard is also MVP, regardless of its Priority
Whiteboard Definition
- [fingerprinting]: Indicate this is a fingerprinting bug
- [fp:m1]: Target milestone is M1 (2017-06-12 Firefox 55)
- [fp:m2]: Target milestone is M2 (2017-08-02 Firefox 56)
- [fp:m3]: Target milestone is M3 (2017-09-20 Firefox 57)
- [fp-backlog]: Backlog bugs
Dashboard
MVP: M1 Bugs List (2017-06-12 Firefox 55)
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
MVP: M2 Bugs List (2017-08-07 Firefox 56)
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
MVP: M3 Bugs List (2017-09-25 Firefox 57)
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
MVP: Bugs To Be Triaged
The following bugs are MVP bugs which are not specified priority yet.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
Fingerprinting P2 Bugs List
<disabled-bugzilla>
{
"blocks":"1329996",
"status":["NEW", "ASSIGNED", "REOPENED", "RESOLVED", "VERIFIED"],
"priority":["P2"],
"include_fields": "id, summary, status, product, component, assigned_to, depends_on, whiteboard",
"order": "status, assigned_to"
}
</disabled-bugzilla>
Fingerprinting P3-P5 Bugs List
<disabled-bugzilla>
{
"blocks":"1329996",
"status":["NEW", "ASSIGNED", "REOPENED", "RESOLVED", "VERIFIED"],
"priority":["P3", "P4", "P5", "--"],
"include_fields": "id, summary, status, priority, product, component, assigned_to, depends_on, whiteboard",
"order": "status, assigned_to"
}
</disabled-bugzilla>
Fingerprinting Breakage
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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
<disabled-bugzilla>
{
"blocks":"1329996",
"status":["RESOLVED", "VERIFIED"],
"include_fields": "id, summary, priority, product, component, assigned_to, depends_on, whiteboard",
"order": "assigned_to"
}
</disabled-bugzilla>