Canvas path geometry is non-deterministic (isPointInPath farbling, e.g. JShelter)

br.canvas_geometry_noise  ·  convicts

browserlayer
artifactcategory
1evaders caught

What it catches

JShelter's canvas farbling wraps isPointInPath/isPointInStroke to flip the answer with ~5% probability to poison fingerprinting. But these are EXACT geometric hit-tests (nonzero/evenodd fill rule, no rasterization, no AA for a point far from the boundary) — GPU-independent and deterministic in every real engine, headless or not: a point 30px inside a filled square is ALWAYS in-path, one 15px outside is NEVER in-path. The probe runs 120 trials on a deep-interior + far-exterior point; a real browser never errs (1-0.95^120 ≈ 99.8% catch on a 5%-flip farbler). Distinct from canvas_noise (Brave's readback farbling — geometry is untouched there). FP-safe ACTIVE: a missing isPointInPath never fires, and only a definitive interior/exterior verdict counts, so sub-pixel/AA ambiguity cannot misfire. Convicting artifact: a canvas-geometry-randomizing shim is an anti-fingerprinting modification, never a stock browser. v0.74.26 PRIVACY-BROWSER N/A (GROUNDED on a real Mullvad Browser 15.0.16, corpus/calibration/privacy/mullvad.json): the 'deterministic in every real engine' claim is FALSE for resistFingerprinting — Tor/Mullvad RFP perturbs the canvas-geometry hit-test too, so a REAL Mullvad trips this (stock non-RFP Firefox does NOT — firefox.json). It is the same by-design farbling footprint as canvas_noise, so it joins detector.applicability._PRIVACY_FARBLING: dropped for a session positively identified as Brave/Tor/Mullvad/RFP-Firefox (is_brave / rfp_browser+gecko). A Chrome-claiming farbler with no privacy identity still convicts.

Signals it reads

browser.canvas_geometry_noise

How it fires

present

Evaders it caught 1

Bypassed by 10

Frontier evaders that reach the detector uncaught (scored only suspicious, defeating every convicting tell) — this check is not one that stops them. The red-team frontier this detection still has to convict.

← all detections