User Tools

Site Tools


provenance:privacy:fingerprinting

Provenance: privacy:fingerprinting

Working notes behind fingerprinting — every query, its population and its denominator, the report script and its unedited output, the folds and their residue, the quotes that were checked, and what could not be established. Corpus-level caveats that apply to every page on this site are on corpus and are not restated here.

Partly reconstructed. The content page was written on 2026-08-05/06, before this site had a provenance convention. This page was written on 2026-08-12, during the refresh to the extended corpus. Sections marked recorded were produced by the 2026-08-12 run. Sections marked reconstructed were rebuilt from the report script, its output and the page text. The page's non-corpus half — the defence discussion, the 2025 policy reversal, the practical tooling — was written and verified by the original run and was not re-verified here.

1. What this page is backing

Item Value
Content page fingerprinting
Report script scripts/report_fingerprinting.mjs (–wiki emits DokuWiki tables)
Fold scripts/fp_fold.mjs — three passes: STRONG patterns, GENERIC resolved by paper context, HAND table
Quote verification scripts/quote_check.mjs –detection fingerprint
Data data/extract/run1/extractions.jsonl, 5,859 papers, 7 venues, 2010–2026
Refreshed 2026-08-12

2. Populations and denominators

Recorded. This page has an unusually delicate population, because “fingerprint” is at least eight unrelated literatures in a broad security corpus.

Tag Definition N
corpus every extracted paper 5,859
detection fired at all ≥1 detection[] tuple 5,655
names a fingerprint ≥1 detection[].phenomenon matching the fingerprint regex 280
excluded on purpose names a fingerprint only in detection[].technique 103
browser-FP subset of the 280, those with ≥1 tuple folding to browser-device 83
…crawled of the 83, those with a crawl configuration 57
all papers with a crawl configuration crawlConfig !== null — the comparison column 1,080

The 103 exclusions are deliberate and are the page's largest judgement call: “we detected X by fingerprinting the TLS stack” is a paper about X, not a paper about fingerprinting. It also means 83 is a floor, and the page says so.

3. Running it

cd /workspace/artifacts/wiki
node scripts/report_fingerprinting.mjs            # every figure, the residue, the 83-paper list
node scripts/report_fingerprinting.mjs --wiki
node scripts/quote_check.mjs --detection 'fingerprint'
node scripts/check_page_numbers.mjs \
  pages/privacy_fingerprinting.txt out/new/report_fingerprinting.txt \
  '===== What the Word Means in the Literature =====' \
  '===== Defences, and What They Mean for Your Measurement ====='

check_page_numbers.mjs left four figures unaccounted, all deliberate: 2,300 (a participant-count range quoted from the papers), 4,322 (the old corpus size, quoted as history), and 66.2 / 76.9 (corpus-wide artifact-release rates, from data/extract/OVERVIEW.md rather than this report).

4. What the refresh changed

Recorded. Old = 4,322-paper corpus. New = 5,859-paper corpus. Note that the fold changed too, so several rows mix corpus growth with better folding; §5 separates them where it can.

Figure Old New
Names a fingerprint 201 280
Distinct free-text strings 339 459
Excluded (technique-only) 77 103
Website / traffic FP 71 (35.3%) 105 (37.5%)
Browser FP 59 (29.4%) 83 (29.6%)
Remote host & network-stack 31 (15.4%) 38 (13.6%)
Physical-object & hardware 22 (10.9%) 28 (10.0%)
Human biometrics 14 (7.0%) 16 (5.7%)
Off-web device 9 (4.5%) 13 (4.6%)
Media content 4 (2.0%) 8 (2.9%)
Analysis-environment evasion 1 (0.5%) 2 (0.7%)
LLM / model identification (family did not exist) 1 (0.4%)
unmapped 4 papers / 5 tuples 6 papers / 7 tuples
Tuples total / by string / by context / unresolved 390 / 321 / 49 / 5 544 / 441 / 76 / 7
Browser FP per 1,000, by bucket 6.4 / 9.8 / 15.7 / 15.5 5.9 / 13.0 / 16.0 / 14.8 / 15.2*
Website FP per 1,000, by bucket 12.8 / 15.5 / 17.8 / 16.7 13.7 / 14.3 / 17.4 / 17.9 / 22.8*
Ran a crawl 41 of 59 (69.5%) 57 of 83 (68.7%)
Released an artifact link 53 (89.8%) 77 (92.8%)
Proposes a system/attack/defence 41 (69.5%) 54 (65.1%)
Uniqueness / entropy 25 (42.4%) 34 (41.0%)
Fingerprinting scripts as target 25 (42.4%) 33 (39.8%)
Canvas 17 (28.8%) 23 (27.7%)
EasyList / EasyPrivacy (tool) 14 (23.7%) 19 (22.9%)
OpenWPM 12 (20.3%) 15 (18.1%)
FingerprintJS 9 (15.3%) 14 (16.9%)
FingerprintJS spellings 6 7
Assesses a law 7 of 59 (11.9%) 10 of 83 (12.0%)
Corpus-wide legal rate 262 of 4,322 (6.1%) 402 of 5,859 (6.9%)
Recruited participants 13 (22.0%) 19 (22.9%)
States headless 7 (17.1%) 10 (17.5%)
States statefulness 16 (39.0%) 21 (36.8%)
Chrome / Chromium driven 22 29
Firefox driven 14 17

Moved by more than a rounding step:

  • The venue ranking reordered. TheWebConf and PETS are now joint-first at 17 papers each (was USENIX and WWW at 13). PETS is still the densest by share (3.3%), but by a factor of two to three rather than two to four.
  • The two top “surface” rows swapped, 34 uniqueness against 33 script-detection, from a tie at 25. This is inside the noise of a free-text field and the page says the point is unchanged, but the ordering of the table changed and a reader comparing revisions would notice.
  • Website-fingerprinting density pulls ahead in 2025–2026, 22.8 per 1,000 against browser fingerprinting's 15.2, after four windows of near-parity. On two provisional venue-years. The page flags it and declines to draw a conclusion.
  • A new family, LLM / model identification. One paper — USENIX/2025/llmmap-fingerprinting-for-large-language-models, four tuples. Given its own family rather than folded into Home-grown or Remote host, so that whoever refreshes this next can see whether it is one paper or a literature.
  • Proposes a system, attack or defence fell from 69.5% to 65.1%. studyTypes is the least stable field in the schema (57% run-to-run per OVERVIEW.md), so this should not be read as a change in the field.

5. The fold, and how far it had aged

Recorded. This is the headline methodological finding of the refresh. On the 4,322-paper corpus fp_fold.mjs left 5 unmapped tuples in 4 papers. On the 5,859-paper corpus, unchanged, it left 59 tuples in 31 papers — 11.1% of the population, which would have shipped as an “unmapped” row bigger than four of the real families.

What arrived was new subject matter, not new phrasing. The 2025–2026 slice fingerprints things that did not appear in the corpus before. Every new string and where it went:

New residue string(s) Folded to Pattern or mechanism
DPI behavioral fingerprinting, Global DPI deployment fingerprints, Longitudinal DPI fingerprint stability, Fingerprint clustering/churn/measurement noise (all one CCS 2025 paper) Remote host & network-stack deep packet inspection, dpi …fingerprint
Censorship injection fingerprints, Honeypot fingerprinting, Operator fingerprinting, TSC server-fingerprint validity, device and vendor fingerprints Remote host & network-stack five named patterns
filter-list fingerprinting, ad-blocker configuration fingerprinting Browser fingerprinting the reader's ad-blocker configuration is a browser attribute
wallet fingerprinting, fingerprinting in local frames Browser fingerprinting browser-extension wallets; iframe origin inheritance
fingerprinting-based ad tracking, fingerprinting-based HTTP tracking, fingerprinting under privacy regulations Browser fingerprinting one WWW 2025 paper
Awareness of digital fingerprinting, Acceptance of fingerprinting applications, Qualitative concerns about fingerprinting Browser fingerprinting a PETS 2026 user study about browser fingerprinting
fingerprint attribute evasion, spatial/temporal fingerprint inconsistencies Browser fingerprinting IMC 2025, evasive-browser inconsistencies
cloaking fingerprinting techniques Browser fingerprinting IEEE S&P 2016, newly retrieved
LLM version fingerprinting, Known-LLM open-set fingerprinting, Left-out LLM fingerprinting, Fingerprinting query efficiency new family: LLM / model identification placed before browser-device so it is not swallowed
fingerprinting SDKs, fingerprinting-signal exfiltration, Permissionless Android device fingerprinting, Stable device fingerprinting Off-web device identification mobile SDKs and Android device IDs
Flash fingerprint uniqueness/robustness, Fingerprint temperature/aging robustness, USB timing fingerprints, Write-induced fingerprint degradation, physical-layer fingerprint uniqueness, temperature-induced fingerprint drift Physical-object & hardware forensics six patterns; four IEEE S&P papers newly retrieved
Unauthorized fingerprint deactivation, Mishandled fingerprint updates Human biometrics Android fingerprint-API misuse — actual fingers
encrypted mobile-app fingerprinting, AR/VR standalone app fingerprinting, WebXR app fingerprinting Website / traffic fingerprinting inferring which app the victim is running, from a side channel
device fingerprinting, user-device fingerprinting, fingerprint permanence (IEEE S&P 2022, peripheral timestamps) Physical-object & hardware forensics HAND entry — unresolvable from the string
application fingerprinting (IEEE S&P 2021, good-bot-bad-bot) Browser fingerprinting HAND entry — identifies the browsing agent
tracking and fingerprinting (NDSS 2026, mobile VPNs) Off-web device identification HAND entry

Residue after, in full — 7 tuples, 6 papers:

CCS/2011/bitshred-feature-hashing-malware-…            Fingerprint similarity approximation
USENIX/2016/an-empirical-study-of-textual-key-…        Fingerprint comparison speed
USENIX/2016/identifying-and-characterizing-sybils-…    Fingerprint changes
CCS/2019/privacy-aspects-and-subliminal-channels-…     value fingerprinting
CCS/2019/privacy-aspects-and-subliminal-channels-…     fingerprint survival
USENIX/2025/shadows-in-cipher-spaces-…                 Application page fingerprints
NDSS/2026/snpeek-side-channel-analysis-…               PHH fingerprinting leakage

The first five are the original residue and are genuinely other literatures: malware feature hashing, PGP key-fingerprint strings, Tor relay identity keys, Zcash transaction values. The two new ones are memory side channels in confidential VMs — identifying which application is resident from encrypted-memory or page-hash patterns. They were deliberately left unmapped. They are close to Website / traffic fingerprinting in question (“which thing is the victim running?”) and close to Physical-object in channel, and folding them either way would have overstated the fold's confidence in a genuinely new literature. A reasonable person would fold them; recording the choice is the point.

5.1 A bug in the report script

The last time bucket was (y) ⇒ y >= 2022 rather than 2022–2024. Under a corpus ending in 2024 that is correct; under this one it swallowed 2025 and 2026 and reported the 2022–2024 corpus size as 3,140 instead of 1,955. Split, and a starred 2025–2026 added. A second hardcoded value — “corpus-wide: 262 of 5859” in the legal section — mixed the old numerator with the new denominator, which is the worst kind of stale number because it looks freshly computed. Both fixed. Any figure copied from those two places before 2026-08-12 is wrong.

6. Quotes checked

Recorded, 2026-08-12.

$ node scripts/quote_check.mjs --detection 'fingerprint'
544 quotes checked: 312 exact, 140 partial (>=60% of 5-word windows),
92 below threshold, 0 with no full text on disk.

92 below threshold were not all read. Five were sampled and checked by hand against paper.cols.txt with whitespace normalised — 2016/CCS/online-tracking-a-1-million-site, 2016/CCS/practical-censorship-evasion, 2015/IMC/examining-how-the-great-firewall, 2014/CCS/voip-fraud, 2013/CCS/identity-location-disease-and-more — and all five are present in the paper. In every case the cause is the column repair splicing the neighbouring column mid-sentence, e.g.:

two Figure 6 shows one of two audio fingerprinting configura-
fingerprinting scripts utilizing the API during our manual
tions found in three scripts. The second configuration uti-
analysis of other fingerprinting te…

That is the extraction's “We discovered two fingerprinting scripts utilizing the API during our manual analysis of other fingerprinting techniques” — correct, and unfindable by exact match.

Reconstructed: the original run recorded only that “every figure above was checked against the source PDF text for a sample of its evidence quotes”. Which sample is not recoverable. The page's old claim that 0.9% of dataset quotes are unlocatable is a dataset-wide figure from the earlier run, not a measurement of this page, and it has not been re-measured; the page now says so.

7. External sources

Reconstructed. Not re-verified on 2026-08-12.

  • All uniqueness/stability/defence claims are cited to papers in bibliography: Eckersley, Gulyás et al., Gómez-Boix et al., Vastel et al. (FP-Stalker and FP-Scanner), Pugliese et al., Laor et al., Datta et al., Berke et al.
  • The four “not comparable” prevalence figures were each read from the paper, not from a secondary summary. Getting the denominators right — Alexa 10K vs 100K vs 1M, site vs script vs provider — is the whole point of that table, and it is the kind of thing that is wrong in most related-work sections.
  • The “2025 policy reversal” section rests on vendor and standards announcements checked by the original run in August 2026. It is the part of this page most likely to be stale first, and nothing in this refresh touched it.

Rejected: not recorded for the original run.

8. What could not be established

  • Whether the 87 unread below-threshold quotes check out. See §6.
  • Where the two memory-side-channel papers belong. See §5.
  • Whether LLM fingerprinting is a literature. One paper. Ask again on the next refresh; if it is still one paper in a complete 2026, the family should probably be merged away.
  • The DRAWN APART duplicate is still there. It appears twice in NDSS 2022, once under its title slug and once as auto-draft-242. Both records are in the 83. Two other papers in the corpus have the same duplication (detecting-and-characterizing-social-spam-campaigns, uiscope), neither of them in this population. This is a corpus-index defect, not a page defect, and belongs on corpus.
  • CHI and SOUPS are absent, and the usability side of fingerprinting defences publishes there. That is the page's most important coverage gap and it is stated on the page.
  • Whether the 103 technique-only exclusions are all correctly excluded. The rule is defensible and it has never been audited paper by paper.

10. Review pass, 2026-08-12

Recorded. The refresh was reviewed by a second model (Claude Fable 5), told explicitly that the summary it was given might not be exhaustive, with instructions to hunt stale numbers. It found a systematic defect, not a scatter of typos, and it is worth stating because it will recur on the next refresh:

  • check_page_numbers.mjs was run with a heading window — normally Use in Publications to the next section — so it audited only the corpus section. Every corpus figure repeated in a page's intro, tooling section, recommendations, footnotes, Related Pages or an embedded code block was outside the window and stayed at its 4,322-corpus value. Across the six pages 29 such figures survived the first pass.
  • The matcher was substring, not word-boundary, so report.includes('59') was satisfied by 11.59 bits. One genuinely stale figure sat inside a checked window and passed for that reason.

Both are fixed in scripts/check_page_numbers.mjs: matching is now anchored with lookarounds, ISO dates and URLs are stripped before scanning, –code opts into scanning <file> blocks, and omitting the heading markers checks the whole page. Run it windowed and whole-page. The whole-page run is noisy — a page's non-corpus half is full of figures quoted from other papers — so read its output rather than expecting it to exit clean. This page's content page was the worst affected — twelve stale figures outside the corpus section, including the opening <WRAP important> box, which is the first thing a reader sees and said 201 / 59 / 71 against a corpus section saying 280 / 83 / 105. Also fixed: OpenWPM 12 → 15, Tracker Radar Collector 3 → 6 (it contradicted the page's own tool table), FingerprintJS 9 → 14, puppeteer-extra-plugin-stealth 1 → 2, legal 7 of 59 → 10 of 83, and two Related-Pages shares.

Two claims were not stale but false, and had to be re-derived rather than renumbered. Both are recorded here because they go beyond the mechanical brief:

  1. The Defences section said “the corpus behind this page ends in 2024 — so there is currently no peer-reviewed measurement in these seven venues of the post-reversal web”, of Google's 16 February 2025 fingerprinting-policy change. The corpus now contains 18 browser-FP papers from 2025–2026, and Luo et al. (IMC 2025) crawled the Tranco top 20K in May 2025, three months after the change. Verified against 2025/IMC/canvassing-the-fingerprinters…/paper.cols.txt: “We performed the crawls in May 2025 using a UCSD IP address” and “canvas fingerprinting is relatively modest, found in 12.7% of popular and 9.9% of tail sites” (the paper also gives the count directly: “2,067 (12.7%) of them extracted at least one fingerprintable canvas”). The claim was replaced with the measurement; the open question was narrowed to the pre/post comparison, which still does not exist.
  2. The open question “no study quantifies how much a headless or containerised crawler under-counts fingerprinting” is partly answered by Annamalai et al. (TheWebConf 2025), verified against 2025/WWW/beyond-the-crawl…: “471 such fingerprinting websites, out of which the automated crawl missed 211 (45%)”. Narrowed rather than deleted: the paper attributes the gap to interaction depth, authentication and consent rather than to headless-vs-headful specifically, which is what the open question actually asks.

Both papers were added to bibliography as luo2025_canvassing and annamalai2025_beyond (duplicate-key check first, cache purged, keys confirmed rendering).

11. Run log

Date 2026-08-12
Corpus at the time data/extract/run1, 5,859 papers, 2010–2026, IEEE S&P complete at 780/780
Model Claude Opus 5, no sub-agents used for this page
Scope Mechanical re-derivation, plus the fold extension in §5, which was not optional: without it the page would have shipped an 11%-unmapped family table.
Script changes fp_fold.mjs (7 STRONG families extended, 1 new family, 5 new HAND entries), report_fingerprinting.mjs (bucket bug, hardcoded 262, llm-model label)
Caveats deleted “IEEE S&P is only 43% retrieved (paywall)” — 780 of 780 selected papers are now retrieved. “2010–2024”.
Mistake caught in review The first edit to fp_fold.mjs put an unescaped / inside a regex literal (ar/vr), which made the whole module fail to parse. The script threw immediately, which is the good failure mode; the bad one would have been a pattern that silently never matched.
Review Reviewed by Claude Fable 5 on 2026-08-12 with the instruction that the summary might not be exhaustive. It found the windowed-guard defect in §10 and 12 stale figures on this page plus two claims that had become false. All fixes were applied and re-saved the same day.

← back to the content page · corpus-level provenance

provenance/privacy/fingerprinting.txt · Last modified: by karel.kubicek.claude

Except where otherwise noted, content on this wiki is licensed under the following license: CC BY-NC-SA 4.0
CC BY-NC-SA 4.0 Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki