Fingerprint Resistance Demo

This XS-Leak probes TCP socket pool exhaustion to infer the pool size — a reliable browser fingerprint. Chrome 143 randomizes the pool limit, spreading the cliff and defeating the probe.

Fingerprinting Model

Pre-randomization (sharp cliff)
Post-randomization (spread cliff)
40
Detected cliff (conn #)
Cliff spread (connections)
Bits leaked

Timing Log

Entropy Calculator

Given the timing histogram, how much information does the pool-exhaustion probe leak about your browser?

Run the probe above to calculate entropy.

How It Works

Pre-Chrome 143: XS-Leak

  • Browsers cap concurrent TCP connections per host (typically 6) and globally (e.g. 256).
  • An attacker page opens many fetches simultaneously.
  • When the pool hits the limit, subsequent connections queue — producing a sharp latency spike at connection #N.
  • This cliff value is stable and reproducible: it identifies browser version and platform to within ~4 bits.
  • Cross-site: a page can probe connections opened by a victim site, inferring whether the victim has N sessions open.

After Chrome 143: Randomization

  • Chrome 143 jitters the effective pool limit by a random offset each session.
  • The cliff no longer falls at a fixed connection number.
  • Across probes, the cliff is uniformly spread over a range — destroying the sharp fingerprint signal.
  • Entropy leaked drops from ~4 bits to <1 bit: the probe becomes statistically unreliable.
  • Remaining side channels (global connection timing, OS-level jitter) are out of Chrome’s control but far noisier.