Skip to content
All fingerprint checksEngine & OS oracles

the CPU architecture matches the architecture the browser claims

Check id cpu-arch-nan-vs-uach

What an ordinary browser yields

The architecture read from the quiet-NaN sign bit matches navigator.userAgentData's architecture hint — both x86, or both arm.

What a detector infers

IEEE-754 fixes the exponent and the quiet bit of a NaN but leaves the sign bit to the hardware, and the hardware disagrees: an x86 FPU produces 0xFFF8000000000000 for 0/0 with the sign bit SET, while an ARM one produces 0x7FF8000000000000 with the sign CLEAR. Reading that single bit reveals the physical CPU family, and it is produced by the silicon — no JavaScript override, no user-agent edit, nothing in the page can reach the floating-point unit. Against it stands navigator.userAgentData's architecture hint, which is merely a string the browser reports and a spoof can rewrite freely. Two independent sources for one fact, so a disagreement means the claimed architecture is not the one the processor actually is: an x86 server wearing an Apple-Silicon Mac's user agent, or the reverse. The check hangs on one detail that only measuring reveals. The dividend MUST be a runtime zero, not the literal 0/0: V8 folds a literal 0/0 to the canonical quiet NaN (sign clear) at compile time regardless of the host CPU, so on a real x86 Windows machine the literal reads as ARM — the exact false positive the technique warns about, confirmed live before this shipped. Math.random() times zero is still zero but opaque to the constant folder, so the division happens at runtime on the real FPU. Two honest limits keep it fair: the architecture hint exists only on Chromium, so elsewhere the reading is reported rather than asserted; and x86 emulation such as Rosetta runs x86 floating-point semantics and reports x86 on both sides, so it agrees rather than tripping.

How to resolve it

The NaN sign bit is set by the FPU, below anything a page or a CDP override can reach, so it cannot be brought into line by editing a value. If it disagrees with the architecture hint, the hint claims a processor the hardware is not — run the browser on the CPU it presents.

Anatomy of a browser fingerprint: every signal, and why they must agree

Other checks in Engine & OS oracles

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 Engine & OS oracles 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 Engine & OS oracles — the family cpu-arch-nan-vs-uach belongs to.