Charlie KrugThe Build Log

← All posts

Cookies blocked, and the canvas tag still gives you away

Fingerprint Radar computes the real Shannon entropy each browser signal leaks, in bits, adds it up to an honest 1-in-N uniqueness number, and never sends a byte anywhere.

Turn off every cookie, open a fresh private window, and a tracking script can still pick you out of the crowd. One way it does that: it draws a hidden line of text to a <canvas> and reads the pixels back. Your exact stack of GPU, driver, and font renderer produces a rendering that a handful of other machines share and most don't. No login, no cookie, no permission prompt. Just the shape of your browser.

What it is

Fingerprint Radar measures the same signals real tracking scripts use, canvas rendering, installed fonts, timezone, WebGL renderer, audio output, hardware properties, and then tells you the one thing almost every other "check your fingerprint" page leaves out: how identifying each signal actually is. Plenty of tools will list your user agent and your screen size and stop there. That tells you what is collected. It doesn't tell you how much of you it gives away.

Rarity, priced in bits

The unit for "how much of you" turns out to be exact. It's a bit of Shannon entropy. If a signal's value shows up in one browser out of eight, then observing it rules out seven of every eight browsers, and information theory prices that at -log2(1/8) = 3 bits. A value only one browser in a thousand carries is worth about 10 bits.

The useful property is that bits add. Two independent 3-bit signals leave you one in 64, because adding bits is the same as multiplying rarities. Fingerprint Radar sorts each signal into a bucket, looks that bucket's base rate up in a bundled reference table (reference-frequencies.json), computes -log2(p) for real, and sums. Land around 18 bits and you're roughly 1 in 262,000 browsers. A heavily customized setup climbs past 20, and at that point there is basically nobody else online who looks like you.

Two honest caveats

Both live in the app instead of buried in a footnote. First: adding bits assumes the signals are independent, and they aren't quite. Your timezone and your OS language lean on each other, so summing them overcounts a little. That's why the "1 in N" is shown as an upper bound on how unique you are, not a precise headcount. Printing a false-precision number would undercut the entire point of the exercise.

The second one I care about more. A tool that measures how exposed you are has no business being one more thing that phones home. So Fingerprint Radar makes zero network requests, full stop. No analytics, no backend, no CDN. Even the fonts it tests against are bundled into the page rather than fetched, because a font pulled from a CDN is itself a request that leaks something. Every signal is read and every bit is computed in the tab you're looking at, and you can watch the browser's network panel stay empty the whole time to confirm it.

None of the math is new, which is the fun part. It's the same approach behind the EFF's Panopticlick, which back in 2010 measured around half a million real browsers and found that most of them were uniquely identifiable from these signals alone. The number has only gotten worse since. Fingerprint Radar just runs that measurement on one browser, yours, and shows the arithmetic instead of a verdict.

Try it

Open Fingerprint Radar and it starts computing on load, no clicks needed. Watch the radar fill in, one blip per signal, each sized by how many bits it leaks, with your running total at the center. Read the per-signal breakdown to find which quirk gives you away most (for a lot of people it's the canvas hash or the WebGL renderer string), then hit Copy summary for a shareable plain-text report that never includes the raw values. For the real test, run it again in a different browser, or with a privacy extension switched on, and watch the number move.

Fingerprint Radar is live. Free, in your browser, no signup.

This post is part of the build log: every app my automated factory ships gets written up here, honestly. Browse everything at apps.charliekrug.com. Comments are open below.

Comments

Loading comments…