Browser Developers

Privacy & Anti-Fingerprint

Browser Fingerprinting Explained

Published: 2026-09-15 • 8 min read

Browser fingerprinting explained: signals such as screen resolution, fonts, extensions and hardware info combine into a fingerprint
Fingerprinting identifies a browser from signals it already exposes, without needing to store anything on it.

Cookies get most of the public attention in discussions about tracking, in part because they are visible and easy to explain. Fingerprinting is less visible and, for that reason, harder to opt out of. It does not store anything on your device; it reads characteristics your browser already exposes and combines them into a value that can be surprisingly stable across visits.

What a fingerprint is actually made of

No single signal below is unique on its own. The technique works by combining many weak signals into one value that, together, narrows down to a small set of browsers, sometimes down to one.

Common fingerprinting signals and what they reveal
SignalWhat it revealsWhy it is hard to hide cleanly
Canvas renderingSubtle pixel-level differences from GPU, driver and font renderingThe output has to still look correct to the page, not just different
WebGL parametersGPU vendor and renderer strings, and rendering precision quirksMany legitimate sites query these for compatibility, not just tracking scripts
AudioContext outputSmall differences in how audio processing is computed on different hardwareChanging it has to preserve normal audio playback behavior
Font enumerationWhich fonts are installed, often revealing OS, region and installed softwareRemoving fonts users need breaks normal page rendering
Hardware concurrency / memoryCPU core count and approximate device memoryReal values are useful for legitimate performance tuning by sites
Timezone and localeApproximate location and language settingsHas to stay internally consistent with other reported settings
WebRTC local/public IPNetwork information that can bypass proxy or VPN configurationWebRTC needs real network information to establish connections at all

The last column matters more than it might look. Almost every one of these signals exists for a legitimate reason: canvas and WebGL support real rendering, AudioContext supports real audio processing, font enumeration supports real typography, and WebRTC needs real network information to connect calls. Fingerprinting is a side effect of useful APIs, not a single flaw that can be patched out.

Code editor workspace representing browser engine internals

Why coherence matters more than any single value

A common assumption is that adding random noise to one or two signals, such as slightly altering canvas output, is enough. In practice, fingerprinting scripts commonly cross-check signals against each other. A browser reporting a timezone that does not match its locale, or hardware concurrency that does not match its GPU-rendered canvas signature, produces a mismatch, and that mismatch is itself a distinguishing signal, sometimes a more identifying one than an untouched browser would have produced.

What this means in practice

Effective work in this space treats the browser as one coherent identity, not a list of independent knobs. Timezone, locale, language, hardware-reported values and rendering signatures all need to agree with each other, and stay consistent across a session, rather than being randomized independently on every page load.

Why this usually needs engine-level changes, not just an extension

A browser extension runs JavaScript that can intercept some calls, for example wrapping HTMLCanvasElement.prototype.toDataURL to return an altered value. Two problems come up quickly. First, the underlying engine has already computed the real value before your override runs, so anything the override does not think to touch will still leak. Second, overriding a native function changes what that function looks like when a page inspects it (for example via Function.prototype.toString), and some fingerprinting scripts check specifically for that signature to detect tampering.

Changing the same behavior inside the rendering engine itself, in Chromium’s or Firefox’s own C++ implementation, means the value a page receives is consistent from the source, with no detectable seam between “real” and “overridden.” It is also the only place where cross-signal coherence, timezone agreeing with locale agreeing with rendering output, can be enforced reliably.

Legitimate reasons teams work on this

  • Privacy-focused browsers. Some browser products build fingerprint resistance in directly, as a user-facing privacy feature rather than a hidden default.
  • QA across device and browser profiles. Testing how a site or web app behaves across many device, OS and browser combinations without physically provisioning each one.
  • Fraud and abuse research. Security teams study these techniques to understand what tooling real attackers already use, and to build detection that accounts for it.

This is also why the work is scoped and documented rather than sold as a blanket guarantee. Our anti-fingerprint browser development page lists specifically which signals a build addresses and which it does not, because an honest account of coverage is more useful, and more defensible, than a claim that every tracking method is defeated.

What a written scope for this kind of work looks like

  • Which specific signals are addressed: canvas, WebGL, AudioContext, fonts, hardware and client hints, WebRTC, timezone and locale, or a subset.
  • Whether protections are applied at the engine level, and where JavaScript-level fallbacks are used instead, with the tradeoffs of each documented.
  • How consistency is verified, ideally with a reproducible test harness that checks signals against each other, not just against a baseline.
  • What is explicitly out of scope, so a shipped build is never presented as more complete than it is.

Frequently asked questions

Is browser fingerprinting the same as tracking with cookies?

No. Cookies are data a site stores in your browser and reads back later; you can see, block or delete them. Fingerprinting instead combines characteristics your browser already exposes, such as screen size, installed fonts and how your GPU renders a canvas element, into a value that can identify a browser across visits without storing anything on it.

Does clearing cookies or using incognito mode stop fingerprinting?

Not on its own. Fingerprinting techniques generally do not rely on stored data, so clearing cookies or opening a private window does not change most of the signals a fingerprinting script reads. Incognito mode can change a few signals, but browsers vary in how much they adjust, and some fingerprinting methods are built specifically to detect a private-browsing state.

Can a browser extension fully prevent fingerprinting?

An extension can override some JavaScript-level APIs, such as returning a fixed value from a canvas read. It runs after the underlying engine has already produced its real answer, and a page can often detect that a native function has been overridden by inspecting it, which some fingerprinting scripts specifically check for. Coherent protection across many signals at once generally needs to happen inside the engine itself, not on top of it.

Why is randomizing values not enough on its own?

Fingerprinting scripts commonly compare multiple signals against each other, not just one. A browser that reports a timezone inconsistent with its locale, or a hardware profile inconsistent with its GPU-rendered canvas output, can stand out more than one with no protection at all, because the mismatch itself becomes a distinguishing signal. Coherent, cross-checked values matter as much as changing any single one.

Are there legitimate reasons to work on this beyond ad tracking?

Yes. QA and security teams use controlled fingerprint variation to test how a site or service behaves across device and browser profiles without provisioning physical hardware for each one. Privacy-focused browser vendors build fingerprint resistance directly into their products for users who want to limit cross-site tracking. Fraud and abuse research teams also study these techniques to understand what real attackers already use.

What does engine-level fingerprint work involve?

It means changing the C++ implementations inside Chromium or Firefox that generate values for canvas, WebGL, audio, font enumeration, hardware concurrency and similar APIs, so that the values a page reads are consistent with each other from the moment they leave the engine rather than being patched afterward at the JavaScript layer.

Final takeaway

Browser fingerprinting works because it draws on APIs that exist for good reasons, which is exactly why it cannot be switched off with one setting. Meaningful protection means treating a browser’s signals as one coherent identity and doing that work where the signals originate, inside the engine, with a clear, written account of what is and is not covered.

Working on privacy-focused browser features?

We implement fingerprint coherence work at the engine level in Chromium and Firefox builds, with a written account of what is covered.