Skip to content
All fingerprint checksAutomation surface

performance.timeOrigin + performance.now() reconstructs Date.now()

Check id clock-origin-coherence

What an ordinary browser yields

performance.timeOrigin + performance.now() lands within a second of Date.now() — two independent clocks agreeing on one instant.

What a detector infers

A page has two clocks. performance.timeOrigin is the wall-clock moment its timeline began; performance.now() is the monotonic time elapsed since. Their sum therefore reconstructs Date.now() — the same instant, reached through an entirely separate mechanism. That redundancy is the check. Automation very commonly overrides Date.now(): to skip waits, to defeat timing analysis, or to make a session look older or newer than it is. It much more rarely touches performance, because performance.now() is monotonic, is used by the browser's own machinery, and breaks pages when it moves. Override one and not the other and the two clocks disagree by exactly the amount that was faked — a hidden time becomes a visible contradiction. The tolerance is deliberately loose, at a full second. Legitimate drift is real but small: an NTP correction or a user changing the system clock mid-visit moves the wall clock while the monotonic one keeps counting, and Firefox's resistFingerprinting and Tor Browser both round performance.now() to 100ms. None of those approach a second, whereas a faked clock is rarely subtle — it is usually minutes or hours. Severity is warn rather than critical for exactly that reason: a clock correction is an innocent explanation that exists, even if it is rare.

How to resolve it

Do not override Date.now() on its own. performance.timeOrigin plus performance.now() reconstructs the same instant from a separate monotonic clock, so moving one and not the other converts a hidden time into a contradiction that needs no baseline to spot. If the clock genuinely must differ, move the machine's clock rather than the page's Date.

How automation gets caught, layer by layer

Nearby checks in Automation surface

See all 27 checks in Automation surface
Who builds this test

Clearcote is a browser built for fingerprint coherence

It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.

This audit takes no position on how Clearcote scores on Automation surface checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.

See the other checks in Automation surface — the family clock-origin-coherence belongs to.