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.

ColumnContents
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

· · plain list

Value counts — x_tbl

How many browsers reported each value of each characteristic, per operating system: one row per characteristic and value.

ColumnContents
metric1The 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.

· · plain list

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.

ColumnContents
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.

· · plain list

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.