What is Browser Fingerprinting?
Imagine walking into a store. You don't show ID, you don't sign in—but the store recognizes you anyway. How? Your height, gait, clothing style, and the way you browse shelves create a unique "pattern." That's browser fingerprinting in the digital world.
Browser fingerprinting collects dozens of attributes from your browser—screen resolution, installed fonts, GPU model, timezone—and combines them into a hash. This hash is statistically unique: 99.7% of browsers can be individually identified.
CRITICAL: Unlike cookies, fingerprints can't be "deleted." They're generated from information your browser must provide to render web pages.
Canvas Fingerprinting
Canvas fingerprinting exploits the HTML5 <canvas> element. When your browser draws text or shapes, tiny differences in your GPU, drivers, and font rendering create a unique image—even if you can't see the difference.
How It Works
- A hidden canvas element draws specific text and shapes
- The rendered pixels are extracted as data
- Subtle rendering differences create a unique hash
- This hash identifies you across sites
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = 'alphabetic';
ctx.font = "14px 'Arial'";
ctx.fillText('Browser fingerprint test 🎨', 2, 15);
const dataURL = canvas.toDataURL();
// Hash: a7f3b2c1d4e5f6... (unique per device)Entropy Contribution
Distinguishes 1 in ~1,000 browsers
Stability
Persists across sessions & updates
WebGL Fingerprinting
WebGL fingerprinting goes deeper—it queries your GPU hardware directly. Your graphics card vendor, renderer string, supported extensions, and shader precision all contribute to a highly stable fingerprint.
Data Points Collected
- Vendor & Renderer: GPU manufacturer and model
- Max Texture Size: Hardware capability limits
- Shader Precision: Floating-point accuracy
- Extensions: Supported WebGL features
- Parameters: 50+ queryable values
Fun fact: Even with the same GPU model, driver versions create micro-variations. Two identical MacBooks might have different WebGL fingerprints.
Audio Fingerprinting
The Web Audio API was designed for music apps—but its subtle processing differences create another fingerprint vector. Your browser's audio stack has a unique "sound."
The Technique
- Create an
AudioContextwith an oscillator - Apply compression and filtering effects
- Capture the output waveform data
- Hash the floating-point values
Different CPUs, audio drivers, and browser implementations produce microscopically different output values. These differences are consistent and trackable.
Oscillator: 0.00024127289627166092 Compressor: 0.00023456789012345678 Analyser: [124, 124, 123, 124, 125, ...] Hash: 35.73833801150322
Font Enumeration
Your installed fonts are another unique identifier. While CSS can only "test" if a font exists (no direct listing), clever techniques using JavaScript can enumerate most of your installed fonts.
Detection Method
- Measure text width using a fallback font (e.g., monospace)
- Apply a test font from a list of ~500 common fonts
- If width changes, the font exists on your system
- Build a list of installed fonts
Entropy: Users with unusual font collections (designers, developers) are especially identifiable. Installing a few unique fonts can make your browser stand out.
Combining Fingerprints: The Math
Each fingerprinting technique contributes "bits of entropy." Combined, they create overwhelming uniqueness:
| Technique | Entropy (bits) | Uniqueness |
|---|---|---|
| Canvas | ~10 bits | 1 in 1,024 |
| WebGL | ~8 bits | 1 in 256 |
| Audio | ~6 bits | 1 in 64 |
| Fonts | ~7 bits | 1 in 128 |
| Screen | ~5 bits | 1 in 32 |
| Navigator | ~8 bits | 1 in 256 |
| Combined | ~44 bits | 1 in 17.6 trillion |
With only ~5 billion internet users, 44 bits of entropy is more than enough to uniquely identify virtually everyone.
Defense Strategies
Tor Browser
Standardizes fingerprint values across all users. Best protection available.
Firefox Resist Fingerprinting
Built-in protection that normalizes many fingerprint vectors.
Canvas Blocker Extensions
Add noise to canvas data. Helps but may break some sites.
Disable JavaScript
Nuclear option. Breaks most websites but eliminates JS fingerprinting.