Table of Contents
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 defencefell from 69.5% to 65.1%.studyTypesis the least stable field in the schema (57% run-to-run perOVERVIEW.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.mjswas run with a heading window — normallyUse in Publicationsto 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 by11.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:
- 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. - 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. |
