Auto-diagnostic d'empreinte

Ce que votre navigateur révèle, en clair

Le fingerprinting recoupe des dizaines de petits détails — votre GPU, vos polices, votre fuseau horaire — pour vous reconnaître sans cookie. Cette page vous montre, sans détour, ce que nous voyons déjà et ce que votre navigateur expose si JavaScript est actif. Aucun chiffre falsifié, aucune bibliothèque tierce, aucun appel externe.

Section A · Sans aucun JavaScript

Ce que votre connexion révèle déjà

Ces valeurs proviennent directement de votre requête HTTP. Elles sont visibles par tout serveur que vous contactez, JavaScript activé ou non.

  • Adresse IP sourcevaleur live

    216.73.217.145

    Identifiant réseau quasi-unique sur la session ; pour beaucoup de foyers l'IPv4 reste stable des jours/semaines et relie toutes vos requêtes entre elles ainsi qu'aux journaux d'autres sites. Sur IPv6, le préfixe /64 identifie souvent la ligne de l'abonné même quand les adresses temporaires (RFC 8981) tournent.

  • ASN / organisation / géolocalisation IPvaleur live

    🇺🇸 US · AS16509 · Amazon.com, Inc.

    L'ASN et le propriétaire du réseau classent l'IP (résidentiel vs Hetzner/OVH/AWS, ou exit VPN/Tor connu). Le pays et la région ne sont pas un identifiant à eux seuls mais rétrécissent l'ensemble d'anonymat et alimentent surtout les détections d'incohérence (fuseau/langue vs pays). Résolu localement contre une base CC0 auto-hébergée — aucun appel tiers.

  • En-tête User-Agentvaleur live

    Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)

    Chaîne riche en entropie : famille et version de navigateur + famille et version d'OS. Une version exacte sur une plage IP donnée restreint fortement l'ensemble, et un UA non standard (curl, bibliothèque, vieux navigateur) ressort immédiatement. Entropie en baisse à cause de l'UA Reduction de Chrome mais toujours une base.

  • En-tête Accept-Languagevaleur live

    Le tuple langue+région+ordre+q-values est assez distinctif, et c'est l'entrée clé de la détection d'incohérence langue↔pays-IP — qui fonctionne sans JavaScript car la langue vient des en-têtes HTTP. Un Accept-Language absent ou générique (en-US seul) depuis une IP non anglophone est typique d'outils automatisés/VPN.

  • En-têtes Accept / Accept-Encodingvaleur live

    Accept: */* · Accept-Encoding: gzip, br, zstd, deflate

    La valeur exacte d'Accept (ordre, q-values, image/avif, image/webp) et la liste/ordre d'Accept-Encoding (gzip, br, zstd) varient par moteur et version. Faible entropie isolément mais c'est un oracle de cohérence : un « Chrome récent » sans br, ou un Accept ne correspondant pas au UA prétendu, trahit un faux UA.

  • Client Hints UA (Sec-CH-UA*)valeur live

    Chromium envoie par défaut des hints à basse entropie (Sec-CH-UA marque, -Mobile, -Platform). Les hints à haute entropie (-Platform-Version, -Arch, -Model…) n'arrivent qu'après opt-in serveur via Accept-CH — en tant qu'opérateur respectueux nous ne les demandons délibérément PAS. Leur absence sur Firefox/Safari est elle-même un signal de moteur ; une non-correspondance Sec-CH-UA-Platform ↔ UA trahit un spoof.

  • En-têtes DNT / Sec-GPCvaleur live

    Paradoxe : envoyer un signal de confidentialité (DNT: 1, désormais obsolète, ou Sec-GPC: 1 / Global Privacy Control) est rare et ajoute donc un bit distinctif tout en signalant un profil « privacy-conscious ». À traiter comme un signal légal qu'on peut vouloir honorer malgré tout.

Ce que le réseau peut voir (non mesuré ici)

Ces vecteurs existent et sont réels, mais ne sont pas observables à cette origine : Traefik termine le TLS et Next.js normalise les en-têtes. Ils exigeraient un proxy capturant le ClientHello, une capture de paquets ou un terminateur de bord dédié. Présentés à titre pédagogique.

  • Empreinte TLS (JA3 / JA4)non mesuré ici

    La pile TLS d'un navigateur produit un ClientHello caractéristique (version, suites de chiffrement, extensions, courbes, ALPN). JA3 (2023) a été contourné par la randomisation d'extensions de Chrome ; JA4 trie ciphers/extensions et y résiste. C'est le contre-poids décisif au spoofing d'UA : un curl déguisé en Chrome a une empreinte JA4 non-Chrome. Non mesurable ici : Traefik termine le TLS, l'appli ne voit que le chiffre négocié, pas le ClientHello offert.

  • Empreinte HTTP/2 (Akamai)non mesuré ici

    L'établissement HTTP/2 expose des choix d'implémentation : valeurs/ordre des frames SETTINGS, incrément WINDOW_UPDATE, frames PRIORITY, et l'ordre des pseudo-en-têtes (:method :authority :scheme :path). Deuxième couche après JA4. Non mesurable ici : Traefik normalise les frames vers le backend.

  • Ordre des en-têtes HTTPnon mesuré ici

    Chaque moteur (Chrome, Firefox, Safari, curl, httpx) émet ses en-têtes dans un ordre fixe que l'utilisateur ne peut pas changer. Un ordre ne correspondant pas au UA prétendu est un signal fort de spoofing. Non mesurable ici : l'API head() de Next.js range les en-têtes dans une Map en minuscules et perd l'ordre ; le capturer exigerait un serveur Node sur-mesure ou une capture au niveau de Traefik, absents de ce déploiement.

  • Empreinte HTTP/3 / QUICnon mesuré ici

    Le paquet Initial QUIC contient le ClientHello TLS 1.3 (donc toutes les features JA4) plus des paramètres de transport spécifiques (initial_max_data ≈ 15 Mo pour Chrome, fenêtres par flux, longueur du connection-ID), visibles en clair avant chiffrement applicatif. Non mesurable ici : exige une terminaison QUIC dédiée.

  • Empreinte de pile TCP/IP (TTL, fenêtre — p0f)non mesuré ici

    La pile réseau de l'OS produit une signature SYN (TTL initial, taille de fenêtre, MSS, ordre des options TCP) dont p0f déduit l'OS sans aucune sonde. Le TTL résiduel révèle le nombre de sauts et peut trahir un NAT/VPN. Non mesurable au niveau applicatif : exige une capture de paquets/eBPF sur l'hôte de bord.

  • Résolveur DNS / EDNS Client Subnetnon mesuré ici

    Si l'on est autoritaire pour un nom que le client résout, EDNS Client Subnet (RFC 7871) livre un préfixe tronqué du client (souvent /24) aux serveurs autoritaires, plus l'identité du résolveur. Une divergence résolveur↔IP trahit un proxy/VPN. Non visible dans la requête HTTP : cela vit dans les journaux DNS, pas la requête web.

  • DNS inverse (PTR)non mesuré ici

    Le PTR de l'IP révèle souvent l'hébergeur ou un motif d'exit VPN prévisible (ex. *.clients.your-server.de), confirmant datacenter vs résidentiel. Non effectué ici : une requête PTR active à chaque visite ajoute latence et fuite ; la base ASN approxime déjà ce verdict.

  • Reprise de session TLS / réutilisation de connexion HTTP/2non mesuré ici

    Les tickets de session TLS / PSK (reprise, 0-RTT) et la coalescence de connexions HTTP/2-3 permettent à une origine de relier plusieurs requêtes au même client, sans cookie et même sur le chemin sans-JS, parfois à travers un changement d'IP. Non visible ici : Traefik termine le TLS, donc l'appli ne voit pas la reprise — mais le terminateur de bord, lui, le voit.

Sections B & C · Avec JavaScript

Ce que votre navigateur expose en plus

Chaque test ci-dessous est écrit par nos soins et tourne entièrement dans votre navigateur. Les résultats sont regroupés par catégorie. Aucun n'est transmis.

Deux identités, pas une

Votre navigateur produit deux empreintes très différentes. La première change d'un navigateur à l'autre et d'une session à l'autre. La seconde décrit le matériel sous-jacent et reste largement la même quel que soit le navigateur que vous ouvrez sur la même machine. Les deux sont calculées ci-dessous, dans votre navigateur, avant tout envoi.

Empreinte de CE navigateur (volatile)

Hachage de tous les signaux du navigateur. Il bascule entre navigateurs et souvent entre mode normal et privé — ce qui change tient surtout aux surfaces de stockage/session et aux indices client (UA-CH), pas à une randomisation du canvas (désactivée par défaut). C'est l'empreinte « cette session de navigateur ».

Identité matérielle (entre navigateurs)

calcul en cours…

Dérivée uniquement du substrat matériel/OS partagé par tous vos navigateurs : GPU (hachage perceptuel d'une scène WebGL fixe), DSP audio, polices du système, métriques d'emojis, cœurs CPU, mémoire, fuseau, famille de plateforme, dimensions d'écran. Aucun signal de stockage : basculer en navigation privée ne la déplace pas. Elle vous restreint à un petit groupe sur cette machine — jamais à un identifiant universel.

Celui-ci est différent : il envoie des données. On explique exactement quoi, puis on demande.

Votre empreinte composite

calcul en cours…

Hash SHA-256 de l'ensemble des signaux ci-dessus, calculé via crypto.subtle dans votre navigateur. Il ne nous est pas transmis. Deux visiteurs au hash identique sont indistinguables ; un hash rare vous singularise.

Rendu (GPU / canvas)5
Empreinte Canvas 2Dneutre
Exécution des tests…

Des instructions de dessin identiques (texte + formes) produisent des pixels légèrement différents selon le GPU, les pilotes, le moteur de polices de l'OS et l'anti-crénelage. Un readback haché de l'image donne un identifiant à ~8–10 bits, l'un des plus forts contributeurs. Tor renvoie un canvas uniforme (durcissement) ; Brave injecte un bruit déterministe par session+origine — deux lectures dans le même contexte donnent donc le MÊME hash : une lecture cohérente n'exclut pas Brave.

même valeur entre navigateursUnicité: ~8–10 bits (estimation)
Vendeur & renderer WebGLneutre
Exécution des tests…

La chaîne non masquée via WEBGL_debug_renderer_info nomme le modèle exact de GPU, le pilote et le backend (ANGLE). ~5–7 bits. Le vendeur doit rester cohérent avec les extensions WebGL, la taille max de texture et l'adaptateur WebGPU — toute non-correspondance expose un spoof.

même valeur entre navigateursUnicité: ~5–7 bits
Hash de rendu WebGLneutre
Exécution des tests…

Le hash d'une scène 3D rendue (dégradés/shaders) capture les particularités de virgule flottante et de rastérisation du GPU/pilote réel. ~5–8 bits, cœur du résultat cross-browser de Cao : même GPU → mêmes imperfections quel que soit le navigateur.

même valeur entre navigateursUnicité: ~5–8 bits
Adaptateur & limites WebGPUneutre
Exécution des tests…

GPUAdapterInfo + l'objet limits (~40 plafonds numériques corrélés) + la liste des features encodent la « tier » exacte du GPU, bien plus finement que la chaîne WebGL. Vecteur récent, important en 2026. Son absence (Firefox/Safari) est elle-même un signal.

même valeur entre navigateursUnicité: élevée ; ~32 buckets max par spec
Minutage des unités GPU (DrawnApart)neutre
Exécution des tests…

En chronométrant de nombreux courts programmes répartis sur les unités d'exécution du GPU, on révèle les micro-variations de fabrication propres à une puce — uniques même entre deux GPU de modèle identique. Seul vecteur atteignant la granularité de l'appareil individuel. Démonstration de la technique : la valeur ci-dessous est instable (les timers grossis par Tor/RFP l'émoussent) et n'est pas un identifiant stable par visite.

même valeur entre navigateursUnicité: niveau puce individuelle ; +67 % de durée de traçage médiane (NDSS'22)
Matériel6
Empreinte AudioContextneutre
Exécution des tests…

La sortie en virgule flottante d'une chaîne oscillateur→compresseur dans un OfflineAudioContext reflète la pile DSP audio, le comportement FP du CPU, les pilotes audio de l'OS et les maths du moteur. ~5–7 bits, vecteur de premier plan (aucune permission, exécution silencieuse). La part matérielle est cross-browser ; les deltas FP du moteur ajoutent une part propre au navigateur.

même valeur entre navigateursUnicité: ~5–7 bits
Nombre de cœurs logiquesneutre
Exécution des tests…

navigator.hardwareConcurrency révèle le nombre de threads logiques du CPU (~2–3 bits). Fait matériel ; certains navigateurs le plafonnent.

même valeur entre navigateursUnicité: ~2–3 bits
Mémoire approximativeneutre
Exécution des tests…

navigator.deviceMemory indique la classe de RAM par paliers {0.25,0.5,1,2,4,8} Go (~1–2 bits). API Chromium uniquement ; son absence sur Firefox/Safari est un signal de famille de moteur.

même valeur entre navigateursUnicité: ~1–2 bits
Nombre de périphériques médianeutre
Exécution des tests…

enumerateDevices() expose, sans permission, le nombre et le type (audioinput/audiooutput/videoinput) de périphériques — les libellés sont vides mais les comptes fuient (~2–4 bits). Une incohérence avec les capacités WebRTC est détectable.

même valeur entre navigateursUnicité: ~2–4 bits (comptes)
API Battery (obsolète)neutre
Exécution des tests…

level/charging : la combinaison niveau+décharge formait un quasi-identifiant éphémère. Retirée de Firefox (~2017), jamais implémentée par Safari, encore exposée dans Chromium sur origine sécurisée uniquement. Largement morte en 2026 — sa présence ne signale plus que « Chromium ».

propre au navigateurUnicité: ~0–1 bit (quasi morte)
Pointeur & capacités tactilesneutre
Exécution des tests…

maxTouchPoints, les media features pointer/hover et le support des touch-events distinguent écran tactile vs souris (~1–2 bits). Fait matériel, cross-browser ; doit cadrer avec la plateforme UA (Windows + maxTouchPoints=10 plausible ; iPhone + 0 est un indice).

même valeur entre navigateursUnicité: ~1–2 bits
Système & affichage13
Métriques de police & ClientRectsneutre
Exécution des tests…

Les boîtes englobantes au sous-pixel du texte rendu via getBoundingClientRect() capturent police + GPU + lissage et hinting de l'OS. ~7,6 bits mesurés — l'un des vecteurs uniques les plus forts, piloté par le rastériseur OS + GPU donc fortement cross-browser. RFP arrondit les métriques — l'arrondi est lui-même détectable.

même valeur entre navigateursUnicité: ~7,6 bits
Énumération de polices installéesneutre
Exécution des tests…

L'ensemble des polices installées, sondé via la mesure des différences de largeur de repli, reflète l'OS, les logiciels (Office/Adobe) et la langue. Entropie élevée et très stable. Tor embarque un jeu fixe — une liste trop uniforme = Tor/RFP.

même valeur entre navigateursUnicité: élevée, très stable
Rendu des emojineutre
Exécution des tests…

Le hash des DOMRects d'un jeu d'emoji rendus en grande taille trahit l'OS et sa version : les jeux de glyphes diffèrent par fournisseur (Apple vs Noto vs Segoe). Fournie par la police emoji de l'OS donc cross-browser.

même valeur entre navigateursUnicité: élevée, corrélée OS
Fuseau horaire & locale Intlneutre
Exécution des tests…

Le fuseau (Intl.DateTimeFormat().resolvedOptions().timeZone), getTimezoneOffset() et le formatage nombre/date/devise localisent et différencient. Fait OS, cross-browser. Entrée clé du contrôle fuseau ↔ géoloc-IP — un des principaux indices d'incohérence VPN. Tor force UTC.

même valeur entre navigateursUnicité: ~3–4 bits combinés
Langues préféréesneutre
Exécution des tests…

navigator.languages + navigator.language : l'ordre de la liste est assez distinctif (~2–3 bits). Doit correspondre à l'en-tête Accept-Language et à la locale Intl — un désaccord est détectable.

même valeur entre navigateursUnicité: ~2–3 bits
Résolution d'écranneutre
Exécution des tests…

La taille d'écran et les marges UI (barre des tâches, chrome du navigateur) sont distinctives (~4–5 bits). Fait physique, cross-browser. Tor letterboxe vers des buckets de taille pour neutraliser cela.

même valeur entre navigateursUnicité: ~4–5 bits
Ratio de pixels (devicePixelRatio)neutre
Exécution des tests…

Le ratio pixels physiques:CSS (Retina=2, valeurs fractionnaires sur Windows mis à l’échelle) est distinctif (~1–3 bits). Doit cadrer avec la taille d’écran et les media queries de résolution.

même valeur entre navigateursUnicité: ~1–3 bits
Profondeur, gamut & HDRneutre
Exécution des tests…

screen.colorDepth ; color-gamut (srgb/p3/rec2020) et dynamic-range détectent les dalles HDR/large-gamut (~2–3 bits). HDR/P3 encore peu courant → forte distinctivité quand présent. Capacité de dalle, cross-browser.

même valeur entre navigateursUnicité: ~2–3 bits
Profil de media queries CSSneutre
Exécution des tests…

Le sondage de matchMedia énumère affichage + préférences : prefers-color-scheme, prefers-reduced-motion, prefers-contrast, forced-colors, pointer/hover (~3–5 bits agrégés). Préférences OS-level, donc cross-browser. RFP force thème clair / pas de reduced-motion — des valeurs uniformes signalent RFP.

même valeur entre navigateursUnicité: ~3–5 bits agrégés
Voix de synthèse vocaleneutre
Exécution des tests…

speechSynthesis.getVoices() liste les moteurs/voix TTS installés (OS + packs de langue + applications), trahissant l'OS, les langues et les logiciels. Voix fournies par l'OS donc cross-browser. Une liste vide/uniforme signale un durcissement (Brave/Tor).

même valeur entre navigateursUnicité: modérée à élevée
Client Hints UA haute-entropie (JS)neutre
Exécution des tests…

navigator.userAgentData.getHighEntropyValues() expose platform + platformVersion, architecture, bitness, model, fullVersionList — version exacte d'OS, architecture et modèle, redonnant ce que l'UA Reduction cachait. API Chromium uniquement ; absence = signal de moteur. Doit concorder avec WebGPU/platform/timezone.

même valeur entre navigateursUnicité: significative (version OS + arch + modèle)
navigator.platform & vendorneutre
Exécution des tests…

navigator.platform (MacIntel/Win32/Linux x86_64) indique la famille d'OS ; navigator.vendor distingue la famille de moteur ; navigator.oscpu (Firefox uniquement) trahit Firefox. Clés d'une incohérence courante : platform vs UA vs maxTouchPoints.

même valeur entre navigateursUnicité: ~1–2 bits
Quota de stockageneutre
Exécution des tests…

navigator.storage.estimate() renvoie quota (souvent une fraction du disque libre) et usage, modérément distinctif. Bucketisé dans les Chromium récents ; chaque navigateur le calcule différemment.

propre au navigateurUnicité: faible à modérée
Moteur & comportement3
Quirks moteur JS & mathneutre
Exécution des tests…

Les résultats FP de Math.tan/sin/exp/pow divergent par moteur (V8/SpiderMonkey/JavaScriptCore). Faible entropie isolément mais classificateur fiable de moteur et oracle anti-spoof : un UA « Chrome » avec une signature math SpiderMonkey est un spoof certain — quasi impossible à truquer entièrement depuis JS.

propre au navigateurUnicité: faible seule ; fort classificateur de moteur
Carte de détection de fonctionnalitésneutre
Exécution des tests…

L'ensemble des API/objets présents (window.*), CSS @supports et drapeaux mappe navigateur + version + plateforme. Classificateur fort de version/moteur et recoupement de spoof — quasi impossible à truquer de manière cohérente sur des centaines de checks.

propre au navigateurUnicité: modérée
Granularité de timing & performanceneutre
Exécution des tests…

La résolution/gigue du timer, la granularité de performance.now() et performance.memory (Chromium) révèlent le moteur et alimentent les attaques de timing GPU/CPU. Tor/RFP grossissent volontairement les timers — des timers grossiers/quantifiés signalent RFP. Indicateur de durcissement, pas un ID stable.

propre au navigateurUnicité: indirecte (habilite d’autres vecteurs)
Réseau2
API Network Informationneutre
Exécution des tests…

navigator.connection : effectiveType (4g/3g), downlink, rtt, saveData. Entropie faible et instable. L'absence ne signifie PAS forcément non-Chromium : Firefox/Safari ne l'ont pas, mais un Chromium durci (Brave) le retire aussi — à recouper avec les oracles de moteur (math/features), pas à utiliser seul.

propre au navigateurUnicité: faible, instable
WebRTC : candidats ICE / comportement mDNSneutre
Exécution des tests…

Nous instancions RTCPeerConnection avec iceServers:[] — AUCUN serveur STUN externe. À noter : la CSP ne bloque PAS le STUN (WebRTC contourne connect-src) ; ne pas en mettre est donc un choix d'opérateur, pas une protection imposée par la CSP — d'où l'importance d'auditer son propre JS. Sans STUN, pas de fuite d'IP publique. Le signal réel est le comportement local : depuis 2019 tous les moteurs remplacent l'IP LAN par un hostname mDNS .local randomisé (UUID Chromium vs pseudo-candidats Firefox vs WebRTC désactivé) ; le compte et l'ordre des candidats distinguent le moteur. Le nom mDNS est randomisé par session (pas un ID stable inter-sessions) ; une IP LAN brute n'apparaît que sur des clients mal configurés/entreprise/vieux webviews.

propre au navigateurUnicité: mDNS stable par session ; IP LAN quasi jamais exposée

Recoupements & incohérences

Les traceurs croisent les signaux pour repérer les contradictions. Une incohérence vous rend PLUS identifiable que la vérité, car elle est rare et mémorable.

  • non évaluable

    Fuseau horaire ↔ pays IP : le fuseau lu côté JS est comparé au pays déduit de l'IP. IP à New York + fuseau Tokyo ≈ VPN/proxy quasi certain. Nécessite JS ; en mode no-JS on retombe sur le contrôle langue↔IP.

  • non évaluable

    Langue ↔ pays IP : l'en-tête Accept-Language (et la locale Intl côté JS) est comparé au pays de l'IP. Fonctionne SANS JavaScript — le contrôle le plus utile pour un visiteur sans JS. Un Accept-Language générique (en-US seul) depuis une IP non anglophone est typique d'automatisation/VPN.

  • non évaluable

    navigator.languages ↔ Accept-Language : la liste de langues lue en JS doit correspondre, dans l'ordre, à l'Accept-Language vu côté serveur. Mentir sur l'un sans aligner l'autre est démasqué — contrôle interne client vs serveur, aucune géoloc requise.

  • non évaluable

    Plateforme UA ↔ navigator.platform / maxTouchPoints : l'OS annoncé par le User-Agent doit concorder avec navigator.platform, navigator.oscpu (Firefox) et maxTouchPoints. UA « Windows » + platform « Linux », ou « iPhone » + maxTouchPoints=0, trahit un spoof.

  • non évaluable

    UA ↔ moteur JS réel : le moteur impliqué par les quirks math et la carte de fonctionnalités doit correspondre au navigateur annoncé par le UA. Un UA « Chrome » avec une signature SpiderMonkey est un spoof certain — ces oracles sont quasi infalsifiables depuis JS.

  • non évaluable

    GPU WebGL ↔ WebGPU : la chaîne renderer WebGL, les limites de l'adaptateur WebGPU, la taille max de texture et les extensions doivent décrire le même matériel. Un renderer falsifié qui ne concorde pas avec la tier WebGPU expose le spoof.

  • non évaluable

    Écran ↔ fenêtre ↔ DPR : screen.width/height, availWidth/Height, window.outer/inner et devicePixelRatio doivent être cohérents (inner ≤ outer ≤ screen ; delta outer−inner = hauteur de chrome plausible). Des valeurs letterboxées trop rondes signalent Tor ; des ratios impossibles signalent un spoof.

  • non évaluable

    Cohérence en relecture : canvas, hash WebGL et audio doivent hacher identiquement sur deux lectures dans le même contexte. Cela attrape les shims naïfs qui randomisent à chaque appel. ATTENTION : une paire COHÉRENTE n'exclut PAS Brave — le farbling de Brave est déterministe par session+origine, donc deux lectures concordent comme sur un navigateur non durci. Brave se détecte autrement (instabilité inter-sessions, divergence cross-origine).

  • non évaluable

    Drapeau d'uniformité / durcissement : un faisceau de valeurs trop uniformes — canvas uniforme, liste de polices figée, fuseau UTC, thème clair forcé, timers grossiers, voix TTS vides — identifie le visiteur comme appartenant au bucket étroit Tor/RFP. Ce n'est pas une contradiction interne mais une signature de standardisation : « vous êtes dans la foule Tor », pas une erreur.

Démonstration

Cache et supercookies

Au-delà de l’empreinte, un site peut vous ré-identifier en stockant un identifiant dans des recoins du navigateur. Les deux démonstrations ci-dessous se déroulent uniquement sur votre propre navigateur, en même origine, et sont entièrement effaçables.

Ré-identification par le cache

Au premier passage, nous plaçons un identifiant aléatoire dans le cache (Cache API) en même origine. À la visite suivante, un accès rapide à cette ressource (cache « hit ») révèle que le navigateur la détient encore — et nous relisons l’identifiant. C’est la cousine « par état » de l’empreinte.

Aucun marqueur en cache pour l’instant.

Mise en échec triviale : vider le cache du navigateur, naviguer en mode privé, ou cliquer « Effacer maintenant » supprime le marqueur.

Démontrer un supercookie (sur vous)

Sur option, nous écrivons le MÊME identifiant dans trois stockages en même origine — localStorage, IndexedDB et Cache API. Effacer uniquement les cookies ne suffit alors plus : les stockages se « ressuscitent » mutuellement à la lecture suivante. C’est le principe d’un supercookie « evercookie ».

Aucun supercookie de démonstration actif.

Garantie : cette démonstration n’utilise que des stockages web en même origine que vous contrôlez. Le bouton « Tout réinitialiser » efface les trois stockages ; effacer les données du site dans votre navigateur les efface aussi. Aucun épinglage HSTS ni détournement de favicon, aucun état inter-site : rien ici ne survit à un effacement des données du site.

Comment fonctionnent les vrais supercookies

Supercookie HSTS : un site encode des bits d’identifiant en imposant (ou non) le HTTPS strict sur une série de sous-domaines ; au retour, la présence du forçage HTTPS rejoue les bits. Ces pins sont volontairement difficiles à effacer car ils relèvent de la sécurité du transport.

Supercookie par favicon : le cache des favicons est séparé et longtemps persistant ; en associant un favicon distinct par identifiant et par chemin, un site recompose l’identifiant à partir des requêtes de favicon manquantes.

Tor Browser et Tails neutralisent ces techniques : double-key (isolation par site de premier niveau) de tous les caches et stockages, cache des favicons isolé par origine, et état entièrement éphémère détruit à la fermeture. Ne pas se cacher, mais ressembler à tout le monde — et ne rien conserver.

Empreinte TLS (JA4)

Avant même le moindre octet HTTP, votre client TLS a une signature — l’ordre des suites de chiffrement et des extensions du « ClientHello ». Mesurée par notre propre service (fp.onsecret.net), car le serveur principal ne la voit pas (Traefik a déjà terminé la TLS).

Mesure en cours…

Stable par navigateur/version et difficile à modifier sans outils dédiés ; un JA4 qui ne correspond pas au User-Agent annoncé trahit un client falsifié.

Section D · Que faire

Recommandations

Un seul principe gouverne tout le reste : se fondre dans une grande foule au lieu d'essayer de se cacher. Falsifier des valeurs de façon incohérente vous rend plus reconnaissable, pas moins.

Le seul principe : se fondre dans une foule, pas se cacher

L'anti-fingerprinting ne consiste pas à masquer vos attributs mais à être identique à une grande foule d'utilisateurs. L'objectif du projet Tor est de « réduire le nombre de buckets distinguables par métrique ». Tout ce qui vous rend différent de l'installation par défaut du même navigateur — fenêtre redimensionnée, extension ajoutée, réglage modifié, valeur falsifiée — vous retire de la foule et vous rend PLUS unique. C'est le point le plus mal compris, et il gouverne toutes les recommandations qui suivent. Corollaire : un profil falsifié mais incohérent (UA Windows + pile TLS curl, ou fuseau Tokyo + IP New York) est plus mémorable que la vérité, car les détecteurs croisent les signaux pour repérer ces contradictions.

Tor Browser — l’étalon-or, et ses réglages exacts

Tor Browser est conçu pour que chaque utilisateur présente la même empreinte : UA et OS forcés en quelques buckets, extraction canvas bloquée/sur demande, WebGL durci, polices limitées à un jeu embarqué, timers grossis, fuseau forcé à UTC. Réglages : (1) Niveau de sécurité sur Safer ou Safest — Safest désactive JavaScript partout, neutralisant tout le fingerprinting actif (canvas, WebGL, AudioContext, énumération de polices, timing). (2) Ne PAS maximiser ni redimensionner la fenêtre — le letterboxing (bandes grises, arrondi à un multiple de 200×100 px) est la protection qui fonctionne. (3) Jamais d'extension — NoScript embarqué fait partie de l'empreinte standard ; n'ajoutez pas uBlock. (4) Ne jamais toucher about:config ni les préférences : les défauts SONT l'ensemble d'anonymat. (5) Garder Tor Browser à jour — la foule est définie par version.

Mullvad Browser — anti-fingerprinting de niveau Tor sans le réseau Tor

Mullvad Browser (codéveloppé par Mullvad VPN et le projet Tor) embarque le même durcissement que Tor Browser (letterboxing, « tous les utilisateurs se ressemblent », polices/canvas/API matérielles masquées, pas de télémétrie) mais NE route PAS sur Tor — il est prévu pour tourner derrière un VPN de confiance. À utiliser quand la latence de Tor est impraticable mais qu'on veut une empreinte uniforme. Même discipline que Tor : taille de fenêtre par défaut, aucune extension, aucun réglage modifié. Limite à énoncer franchement : il donne l'anti-fingerprinting de Tor mais PAS l'anonymat réseau de Tor (votre VPN voit un saut unique, pas trois) — un compromis vitesse contre garantie réseau plus faible.

Acheter le VPN anonymement : Monero depuis Tor

Mullvad émet un numéro de compte aléatoire à 16 chiffres sans email, identifiant, mot de passe ni nom, avec une politique no-KYC explicite, et accepte le Monero. Générez le numéro de compte et réglez la facture XMR depuis Tor Browser. Tor casse le lien réseau à l'achat, Monero casse le lien financier ; la confidentialité on-chain de Monero (montants, expéditeur et destinataire masqués) est bien supérieure au registre transparent de Bitcoin pour cet usage. L'ordre compte : acheter de façon non anonyme (carte, IP domicile) relie le compte à vous quelle que soit la propreté de l'usage ultérieur.

Réduction d’entropie au niveau de l’appareil (matériel onsecret)

GrapheneOS (Pixel) réduit l'entropie côté appareil vs Android stock : suppression des services Google système, permission Sensors par application (couper accéléromètre/gyroscope/baromètre — vecteurs de fingerprinting par mouvement), périmètres Réseau et Stockage par application. Les Pixel sont requis car GrapheneOS dépend de leurs racines de confiance matérielles (verified boot, attestation). À combiner avec les navigateurs anonymisants : l'OS réduit l'entropie de l'appareil, le navigateur celle du web. Tails (amnésique) sur un ThinkPad durci démarre sur USB, route tout via Tor et ne laisse aucune trace — chaque session repart identique à celle de tout autre utilisateur Tails. Qubes + Whonix apporte la compartimentation : isoler les personas dans des qubes distincts empêche de relier une activité à une autre, et une compromission reste contenue.

Mudi + blue-merle : entropie des identifiants réseau

Sur cellulaire, l'IMEI (appareil), l'IMSI (SIM) et le MAC du routeur sont des identifiants matériels persistants qui vous fingerprintent au niveau opérateur/Wi-Fi, indépendamment du navigateur. Le paquet blue-merle randomise l'IMEI et fait une mimique MAC consciente de l'OUI fournisseur plutôt qu'un MAC pleinement aléatoire. Pourquoi l'OUI compte — c'est le même principe que le conseil navigateur : un MAC à préfixe fournisseur aléatoire/invalide est lui-même anormal et ressort ; imiter un OUI plausible vous garde dans la foule des appareils légitimes au lieu de vous signaler comme « appareil qui cherche à se cacher ». Appariez la randomisation IMEI à un changement de SIM : ne pas tourner l'IMEI en gardant le même IMSI sur la même cellule, car cet appariement est lui-même traçable.

Erreurs qui vous rendent PLUS identifiable

(1) Spoofing créant des incohérences internes : UA « Windows » sur platform « Linux », renderer WebGL ne correspondant pas à l'OS, polices incohérentes avec la plateforme sont des aveux. Un profil cohérent se fond ; un profil incohérent crie « spoofeur ». (2) Mensonges stables = traçage stable : toujours spoofer de la même façon transforme cette combinaison en empreinte durable ; randomiser à chaque chargement est le problème miroir (un drapeau rouge détectable). (3) Incohérences langue/fuseau/IP : sortir par un nœud allemand en annonçant en-US et un fuseau New York est un indice classique ; Tor standardise volontairement locale et fuseau (UTC) — n'y touchez pas. (4) Tailles de fenêtre uniques : maximiser ou s'ajuster à un ultrawide vous sort des buckets de letterboxing. (5) Mélanger des identités sur une même session relie les comptes — utilisez « New Identity » ou des personas séparés. (6) Ajouter des extensions « privacy » (uBlock/Canvas-blocker) à Tor/Mullvad Browser vous rend unique vs la foule standard. (7) Acheter l'outil d'anonymat non anonymement relie le compte à vous.