Privacy and anti-fingerprinting

Anti-Fingerprint Chromium Browser

A hardened Chromium browser we built for a private client. Canvas, WebGL, audio and font signals are controlled in the engine, so they stay consistent with each other.

  • Chromium
  • C++
  • Canvas
  • WebGL
  • Audio context
  • Fonts
Built on
Chromium
Our part
We changed the Chromium code that produces four fingerprinting signals and built the hardened browser.

The client and the problem

The client wanted a browser that limits what device-fingerprinting scripts can learn about the computer it runs on, without the browser itself looking unusual to the sites people visit.

What we built

We changed the Chromium code behind four signals that sites use to recognize a device: canvas rendering, WebGL, the audio context and the list of installed fonts. Because the changes live in the engine, the values hold steady for a whole session and agree with each other, so the browser does not look tampered with.

  • Controlled canvas and WebGL output, changed in Chromium’s rendering code
  • Controlled audio-context output and a controlled list of detectable fonts
  • A standalone hardened Chromium build

Why it was hard

Fingerprint protection is easy to get wrong. Values randomized without care contradict each other, and a profile that contradicts itself stands out more than an ordinary one. Detection scripts cross-check canvas, WebGL, audio and font results, so the changes had to be tested against those scripts as a set, not one signal at a time.

How it works

  • Diagram of canvas, WebGL, audio and font signals passing through a hardened browser layer before a website reads them
    Illustration: the browser signals a site can read, and where the hardening sits.

How it fits together

Where the fingerprint controls sit

  1. The browser

    The client’s product: a hardened Chromium build with no separate branding, so it looks and behaves like an ordinary browser.

  2. Canvas and WebGL control

    Rendering output for canvas and WebGL is controlled where it is produced, so repeated reads return the same result.

  3. Audio-context and font control

    The same approach applied to audio-context fingerprinting and to the list of fonts a page can detect.

  4. Chromium

    The engine that generates these signals, changed in its C++ code.

  5. Build and release

    Compiled and packaged as a standalone hardened browser.

  • Client's product
  • Our engineering
  • Upstream: third-party code we build on
  • Platforms and release
Each signal is controlled inside the engine that produces it, not patched from JavaScript after the fact.

Related services

Facing a similar engineering problem?

Tell us what you are building. A browser engineer will walk you through how we would approach it, what is hard about it and what it takes to keep it current after launch.

Send a project brief

More case studies: Privacy and anti-fingerprinting