Download the data
The aggregate data behind the paper, released in full. Three sets of files and one interactive site: how many browsers reported each value, how many reported each pair of values, the fingerprint every modeled fingerprinter would have computed for every measured browser, and an explorer for the canvas renderings themselves.
A value reported by fewer than 100 browsers within a single operating
system is not published. The row stays and its count is accurate; only
the value is replaced, with the literal string ANONYMIZED.
Below-threshold counts can therefore still be added up, without any way
to tell which values they belong to. The fingerprint archives are
shuffled and carry no identifier of any kind.
Downloading
To download the data, you can use the wget command below with either
the remote plain text link, or a downloaded copy of it. -x
keeps the bucket's directory structure, which preserves the
per-operating-system split on disk. -c resumes an
interrupted run, desirable for the two large sets.
wget -c -x -i data/downloads/x_tbl.txt
Fingerprints
One row per measured browser: its operating system, its locale, and the fingerprint each of the three modeled fingerprinting services would have computed from it.
The three files are the three configurations the paper compares.
Baseline is the entirely unprotected surface (configuring
Firefox to behave this way is difficult, not recommended, and not supported.)
Phase 0 is the set of protections Firefox had between 2012
and 2023.
Phase 3 is the data-driven set this work evaluated.
Zstandard-compressed CSV, around 1.6 GB each:
zstd -dc file.csv.zst | head.
| Column | Contents |
|---|---|
os |
Operating system, as the ping reports it:
WINNT, Darwin, Linux,
Android |
intl_intl_locale |
The browser's locale |
<configuration>-FPJSv2_Realistic |
Fingerprint under the FingerprintJS v2 model |
<configuration>-AkamaiV2_Realistic |
Fingerprint under the Akamai v2 model |
<configuration>-Signifyd_Realistic |
Fingerprint under the Signifyd model |
Value counts — x_tbl
How many browsers reported each value of each characteristic, per operating system: one row per characteristic and value.
| Column | Contents |
|---|---|
metric1 | The characteristic |
value1 |
The value reported, or ANONYMIZED |
occurrences |
Browsers that reported it |
total_occurrences |
Browsers in this operating system's population |
percentage |
occurrences / total_occurrences as a percentage,
rounded to two places |
The shards of one table concatenate in any order; only the first of them carries the CSV header.
Pairwise value counts — x_by_y_tbl
The same counting over pairs: how many browsers reported value v1 of characteristic m1 and value v2 of characteristic m2.
| Column | Contents |
|---|---|
metric1, value1 |
The first characteristic and its value |
metric2, value2 |
The second characteristic and its value |
occurrences |
Browsers that reported both |
total_occurrences_for_value1 |
Browsers that reported value1 at all, which is the
denominator for the conditional share |
percentage |
occurrences / total_occurrences_for_value1 as a
percentage |
The two halves of a pair are anonymized independently, so a row can carry
one real value and one ANONYMIZED.
Metrics not included in the pairwise tables
Pairing every metric with every other metric grows very large, very
fast. Some metrics are exlcuded out of space requirements. They are
all still in x_tbl; they are just not paired with anything.
107 metrics are left out on every operating system:
- The individual element, range and emoji measurements
(58). Every
clientrects_*value. The combined hashes over them are kept, so the pairing is still there, at the level of the whole measurement. - The individual WebGPU limits (31). Every
wgpu_*limit. As with the client rects, the combined hash over all of them is kept, along with the fallback-adapter flag and the missing-features value. - Screen and window (4):
screen_primary_resolution,screen_primary_avail,screen_web_inner,screen_web_outer - System colors and fonts (5):
css_system_colors,css_system_fonts,css_color_accentcolor,css_color_highlight,combined_css_colors_hash - Fonts and voices (2):
fonts_fpjs_nonallowlisted,voices_sha1 - WebGL (2):
gl_params,gl_params_extensions - Storage, math, audio and media (5):
storage_quota,math_ops,audio_unique_samples,combined_mathml_hash,combined_media_capabilities_hash
Two more are left out on Linux only,
combined_clientrects_emoji_hash and
combined_clientrects_range_gcr_hash, and two on Android
only, languages and
prefs_intl_accept_languages: these have far more distinct
values on those platforms than on the others.
Canvas explorer
The canvas characteristics are hashes of rendered pixels. The canvas explorer shows the renderings behind the hashes, showing what pixels differ between two hashes.
Analysis code
The code that performed the analyses in the paper is also available. It holds the multithreaded python code that processed the data, performed the uniqueness and cohort calculations, the modeled fingerprinters, the protection experiments, and the scripts that generate the paper's tables and figures. It also includes the scripts from the modeled fingerprinters, and their reverse engineered analyses.