Canvas, WebGL and audio fingerprints: how they work
Most fingerprint signals are values the browser simply reports. Rendering fingerprints are different: the site asks your device to draw an image or process a sound and then looks at the result. Small differences in hardware and software make that result surprisingly specific.
Check your browser right now
Checking your browser…
Canvas fingerprint
A script draws text, shapes and gradients on a hidden canvas element, reads back the pixels and hashes them. Fonts, anti-aliasing, the graphics driver and the operating system all affect the exact pixels. The hash stays the same on one device and differs between many others, so one call adds a lot of identifying information.
WebGL fingerprint
WebGL gives away two kinds of data. First, parameters: the GPU vendor and model through the unmasked renderer string, supported extensions, maximum texture sizes and precision formats. Second, rendering: drawing a 3D scene and hashing the pixels, like canvas but through the GPU pipeline.
The GPU name is also a strong consistency signal. Apple GPUs appear only on Apple devices, and renderer names that mention Direct3D appear only on Windows. A Windows User-Agent with an Apple GPU does not happen in a real browser.
WebGPU
The newer WebGPU API also describes the graphics adapter. When WebGL and WebGPU name different GPUs, it can be a laptop with two graphics cards, or a spoofing tool that changed only one of them.
Audio fingerprint
The site generates a tone with an oscillator, runs it through an audio chain such as a compressor, entirely offline and silently, and sums up the resulting samples. Differences in audio processing and floating-point math between browsers and platforms change the last digits of the result.
How protection works
Privacy tools use one of three approaches:
- Blocking: Tor Browser and Firefox with resistFingerprinting do not hand canvas pixels to a site freely.
- Uniformity: the same browsers return standardized values for many other properties, so users look alike.
- Noise: Brave, Safari in its stronger privacy modes and many antidetect browsers add tiny random changes to pixels or samples, so different sites or sessions see different hashes.
How noise is noticed
Noise has a weakness: a real device draws the same image the same way every time. If a page draws the same picture twice and gets two different results, something added noise. Other methods compare the result with known values for the claimed GPU, or check whether the canvas functions were replaced by a script.
The SpoofLens check draws canvas and audio twice for exactly this reason. In Brave, Safari, Firefox with resistFingerprinting and Tor Browser it marks noise as privacy protection, since these browsers add or change such data on purpose. In other browsers canvas noise counts as a contradiction and audio noise as a suspicious sign.
Are these fingerprints unique?
Less than people think. Devices of the same model with the same system and browser version often share canvas and WebGL hashes, which is why iPhones are hard to tell apart. Rendering fingerprints are most useful in combination with other signals and for spotting spoofing, rather than as an ID on their own.
Frequently asked questions
- Can I block canvas fingerprinting?
- Yes. Tor Browser, Firefox with resistFingerprinting and Brave protect against it in different ways. Extensions can too, but a poorly made extension can make your browser easier to spot, because it replaces functions in a way that can be detected.
- Why does my canvas hash change?
- Browser or graphics driver updates, a change of display scaling, or a privacy feature that adds noise. If it changes on every reload, noise is being added.
- Does SpoofLens store my canvas hash?
- No. It is computed in your browser, sent once for the cross-check and then discarded.
Read next
- Browser fingerprinting: what it is and how it works
- How websites detect bots and automated browsers
- WebRTC leak: what it is and how to check your browser
- Time zone vs IP: why websites notice your VPN
- How websites recognise antidetect browsers
- User-Agent Client Hints: what replaced the User-Agent string