Fingerprinting

What is Canvas Fingerprint?

Canvas fingerprinting draws hidden text and shapes into an HTML5 canvas, reads the pixels back with toDataURL or getImageData, and hashes them. The exact output varies with GPU, graphics driver, font rendering and anti-aliasing, so the hash stays stable for one device and browser build while differing between machines.

The script creates a canvas element, usually kept off-screen, draws a line of text in a named font together with an emoji and some overlapping shapes or a gradient, then calls toDataURL or getImageData to pull the pixel data back. Hashing that byte array yields a short value. The whole read takes a few milliseconds, needs no permission prompt and leaves nothing visible on the page. Most collectors run a WebGL variant beside it, rendering a small 3D scene and hashing the result the same way.

Variation comes from the rendering path. Anti-aliasing and sub-pixel positioning depend on the GPU and its driver, glyph shapes depend on the installed font files and the operating system's hinting engine, and the browser's graphics library adds quirks of its own version. Identical hardware running an identical browser build returns an identical hash, which is why canvas entropy is high across desktops and much lower across a fleet of the same iPhone model. On its own it identifies a device class rather than a person.

Countermeasures split into blocking and noise. Firefox's resistFingerprinting mode returns a uniform value shared by everyone who enables it, Tor Browser blocks reads or asks first, Brave adds randomised noise scoped per session and per site, and antidetect browsers inject deterministic per-profile noise so one profile keeps one hash for its lifetime. The naive approach fails: randomise on every read and a site that samples the canvas twice in one page load gets two different hashes, which no real device produces.

Your GPU and browser produce the canvas output, so no proxy or VPN touches it. Two accounts signing in from different countries with the same canvas hash link together, and a hash shared by thousands of unrelated accounts marks a common spoofing tool just as clearly. What you want is a value that holds still inside one profile and looks plausible for the device that profile claims to be. Rarity works against you here, since a hash no other machine on the internet reports is as useful to a detector as a duplicate.

Where you meet it

You meet canvas fingerprinting when configuring an antidetect profile and choosing between blocked, noised and pass-through output, or when accounts on separate proxies get linked anyway. Test the setting rather than trusting it: load a fingerprinting demo page twice in one profile and confirm the hash is identical, then open a second profile and confirm it differs. Anything else is a problem to fix before it costs you accounts.

Common questions

Can canvas fingerprinting be blocked?

Yes. Tor Browser blocks or prompts on canvas reads, Firefox's resistFingerprinting returns a uniform value, and several extensions do something similar. Blocking is detectable, since a browser that refuses canvas reads belongs to a small and identifiable group, so weigh that against whatever the site does with a flagged visitor.

Does a proxy or VPN change my canvas fingerprint?

No. The canvas is rendered by your GPU and browser on your own machine, and only the pixel hash is sent. Changing the network path changes the IP address and nothing else, which is why accounts on different proxies still link through a shared canvas hash.

Is randomising the canvas value safe?

It depends on the granularity. Noise that is deterministic per profile, or per session and site, mimics a device with a stable output. Noise regenerated on every read gives two different hashes within one page load, and collectors deliberately sample twice to catch exactly that.

Related terms

Browser Fingerprint
A browser fingerprint is an identifier derived from the properties your browser exposes - user agent, screen and window dimensions, timezone, language, installed fonts, canvas and WebGL rendering output, audio stack behaviour, hardware concurrency. Combined, these values are often unique enough to recognise the same browser across sessions and sites without any cookie.
WebGL Fingerprint
A WebGL fingerprint is an identifier derived from how a browser's GPU and graphics driver render 3D content. Sites read the renderer and vendor strings the driver reports, then hash the pixels of a small scene drawn off-screen. Capability limits from the context add more. The result stays stable across sessions and changes only when the hardware or driver does.
TLS Fingerprint
A TLS fingerprint is an identifier derived from the ClientHello a client sends when it opens an HTTPS connection: the TLS version offered, the ordered cipher suite list, the extension list, supported elliptic curves and signature algorithms. JA3 and JA4 are the common encodings of it. Different HTTP clients and browsers produce visibly different values.
JA3
JA3 is a TLS client fingerprinting method that reads five fields from the ClientHello, joins their decimal values into a single string and hashes it with MD5. The fields are TLS version, cipher suites, extensions, supported elliptic curves and EC point formats. The 32-character result groups clients by TLS library and configuration.
JA4
JA4 is the TLS client fingerprint in the JA4+ family published by FoxIO, designed to replace JA3. Rather than one opaque MD5, it produces a partly readable string: a ten-character prefix describing transport, TLS version, SNI, cipher and extension counts and ALPN, followed by two truncated SHA-256 digests of the sorted cipher and extension lists.
Device Fingerprint
A device fingerprint is an identifier built from the hardware and software traits a device exposes: screen geometry, GPU and driver strings, CPU core count, memory, timezone, languages, installed fonts, audio and canvas rendering, and touch support. Hashed together, those values are stable enough to recognise a returning device across sessions without any cookie.
P0F
p0f is a passive OS fingerprinting tool that identifies the system behind a connection by watching traffic rather than probing it. It reads TCP SYN packets for initial TTL, window size, MSS, the order of TCP options and a set of quirk flags, then matches them against a signature database. It sends nothing to the host it identifies.

Real 4G/5G mobile and residential IPs

PROXIES.SX runs carrier IPs in 100+ countries with HTTP and SOCKS5 on every endpoint. $4/GB down to $2.40/GB at volume, free endpoints and rotation, and your GB never expire.