Why this topic matters to me now
In the early years almost everyone around me said “fingerprint.” One digest — and a person seemed caught. On a slide it looks victorious. In the lab the digest too often betrays both the detector and the researcher.
The window changed size — the field sum is different. The browser updated — different. The person granted data access differently — different. Meanwhile the consistency story could stay honest: the claim “I am such-and-such browser on such-and-such device class” still matched what the surface can do. Or the reverse: the digest is still “pretty,” while layers inside already argue with each other.
I am retraining my language. Not “catch the fingerprint.” But “find a layer contradiction.” It sounds humbler and is more honest as engineering.
The third text in the series is needed as a vocabulary. Without it the two mirrors and the diary still slide into the convenient magic of one string.
Where the cult of one hash came from

A hash promises three things everyone likes.
It promises compression: many signals → one string. It promises comparison: equal / not equal. It promises scale: you can put it in a database and search for “the same ones.”
In teaching demos and fingerprint marketing this sounds like fate. In a browser’s life there are too many legitimate reasons the string will drift: an update, fonts, window size, privacy mode, Client Hints policy, another network, another permission set.
The hash cult is dangerous not because hashes are useless. They are useful as an experiment tool and as one of the signals. It is dangerous because it replaces the question. Instead of “are the layers consistent?” you hear “did the string match?”
Public frame

In public detect.expert texts I am close to the critique of a single SHA over a large field set: convenient to store and compare, but brittle to everyday change. It is more useful to look at consistency between the claimed profile and measured behavior and surface branches — an ensemble of weak signals instead of one “magic” string. I do not need their accuracy liturgy; I need the principle.
Open consistency tools like x-bot version1 speak a similar language: API version vs UA mismatch, engine vs claim mismatch, context divergence. There the risk is about contradictions. Not about “we computed a soul.”
Even Client Hints in Chrome docs are useful to read as a humility lesson: hints can be truncated, policy-limited, and are not obliged to be full proof. A browser claim is a hypothesis. A hypothesis is tested.
The feature calendar in Chrome release notes, Firefox Releases and the WebKit blog shows another useful idea: the API surface has a history. History lets you talk about a “capability floor” without reducing a whole person to one digest. Separate series texts will go deeper; here the principle is enough.
Four layers I say aloud
To avoid drowning in abstraction, I keep a simple map.
1. Claim. What the browser (or its wrapper) says about itself: UA, hints, sometimes explicit profile fields. 2. Capability surface. What is actually available in JS/CSS/Web API on this version and in this context. 3. Behavior over time. How the device is used: sensors, gesture, rhythm. In plain words, without biometric thresholds in a public text. 4. Network as context. Where traffic came from, how the transport layer looks, what the WebRTC candidate zoo says. Context is not automatically “bot.”
Consistency is about whether these layers tell different fairy tales. A hash often mixes layers into porridge and then wonders why the porridge is salty.
What I observe in the lab, in plain words
False alarm
When I glue too much into one digest, I get a false alarm on a live human. Everyday life is noisy. The network is noisy. Privacy cuts hints. Locale, fonts, window size, a minor version bump — all of that moves the hash. The person is the same; the label is already different. A detector in love with the digest starts to hate life.
False calm
Sometimes the reverse: the digest is stable, and inside there is conflict. OS claim and capability surface argue. Version claim and API floor argue. One execution context and another tell different stories. The static look is “even,” behavior over time is strange. Stability without consistency is décor.
Team language
If the lab says “the fingerprint fired,” everyone thinks about a label. If they say “we found contradiction A vs B,” everyone thinks about testing a hypothesis. The second conversation is more productive. It requires naming layers. Named layers are harder to hide under magic.
The public checker is here again
A green checker can mean “the surface alphabet is in order.” It does not mean “the consistency story is closed.” A red checker can mean everyday noise. It does not mean “automation proven.” The diary genre from the previous text teaches not to turn screen color into a worldview.
Mini-scenarios (educational, no recipes)
Scenario A. A person opened a private window. Part of storage history disappeared, some hints were cut. The hash is “different.” Consistency of the claim “I am ordinary Chrome” with the API surface can stay normal. If I yell at the hash, I am fighting privacy.
Scenario B. A profile claims one browser era, while the set of available APIs looks like another era. That is already the language of claim-vs-surface contradiction. You can discuss it through release notes and open feature detectors — without turning the text into a spoofing guide.
Scenario C. In one context one thing, in an isolated one — another. Public tools have long hinted at comparing the browser’s “rooms.” The principle matters here: one truth should sound similar in different rooms. Implementation details I leave off-camera.
These scenarios are not for copying an attack. They are for training the question: which layer failed to meet which?
What this changes in detect and in the build
In detect I phrase the conclusion more carefully. “There is a contradiction between claim and measurement” is a working phrase. “This is a bot” is a rare phrase without context, history, and understanding the cost of error. I want soft everyday noise not to become a sentence automatically — a separate series text will cover that. Here the principle is enough: not everything that changed in the hash is automation; not everything stable in the hash is consistent.
In the build I stop celebrating a “stable fingerprint” as the main metric. Stability is useful for experiment (less random noise between runs). But the research goal is a consistent layer story, not a pretty constant in a log. If the browser’s rooms tell different fairy tales, a stable digest does not comfort me.
The link to the two mirrors is direct here. Detect in love with the hash demands of the build “match the reference string.” Detect in love with consistency demands of the build “do not lie between layers.” The second goal is harder and more honest.
The link to the diary is direct too. The war genre loves the hash: it gives a score. The lab genre loves contradiction: it gives a question.
How I take notes so I do not return to the hash cult
In the experiment journal I try to write four fields even when I badly want one line:
- Which *claim* I am checking.
- Which surface/behavior/network *measurement* sits next to it.
- What the *contradiction* is (or why there is none).
- Does this look like *everyday life* or like *breaking environment integrity*?
If I cannot fill the third field, I do not have a conclusion yet — only unease. Unease is research fuel, not a verdict.
What I will not say, and why
I do not publish scoring formulas, weights, thresholds, or catalogs of internal signals. The idea of layers and the critique of a single hash are public literacy. A concrete production recipe is not.
I also do not turn this text into a guide on “how to stabilize a fingerprint.” Stabilization for bypass is another genre, and the series charter forbids it.
I do not give a “universal field set for the ideal hash.” Universality here is part of the problem.
Short takeaway
One big hash is convenient on a slide and brittle in life. I teach myself the language of consistency: browser claim, API surface, behavior, network as context. Contradiction is more honest than a label. Together with the two mirrors and the diary genre, this is the third pillar of the series.
Next we can descend into particulars — starting with the most familiar claim: User-Agent. Not to learn how to forge it, but to stop once and for all confusing a claim with proof.
