Une Analyse Technique des Signaux Matériels, Comportementaux et Inhérents au Navigateur Qui Ne Peuvent Pas Être Usurpés au Niveau Réseau
Recherche Obscura — Juillet 2026
Résumé
Les outils de confidentialité au niveau réseau comme Obscura peuvent efficacement usurper les en-têtes HTTP, les empreintes TLS, les requêtes DNS et les propriétés navigateur accessibles via JavaScript. Cependant, une classe significative de vecteurs d'empreinte opère en dessous, au-dessus, ou en dehors de la portée du proxy. Ces vecteurs dérivent de caractéristiques physiques du matériel, de détails d'implémentation du navigateur, de modèles de comportement utilisateur et de l'asymétrie inhérente à la course aux armements de la détection.
Cet article catalogue ces vecteurs incontrôlables, analyse leurs forces et faiblesses du point de vue d'un attaquant, et propose des stratégies d'atténuation — à la fois dans le périmètre d'Obscura et via des outils complémentaires.
1. Introduction
1.1 Le Fossé du Proxy
Obscura opère aux couches OSI 3-7 (réseau à application). Les signaux qui proviennent de :
- Couches 0-2 (matériel physique, GPU, puce audio, CPU)
- Couche 7+ (moteur de rendu navigateur, comportement utilisateur)
- Incohérences inter-couches (décalages entre signaux usurpés et non usurpés)
...sont hors du contrôle direct du proxy.
1.2 Classification
| Catégorie | Vecteurs | Cause Racine | Levier du Proxy |
|---|---|---|---|
| GPU/Matériel | Rendu Canvas, WebGL, WebGPU | Pipeline de rendu physique | Aucun |
| Audio Matériel | AudioContext, latence | DSP audio, pilotes | Aucun |
| CPU/Plateforme | Précision mathématique, fonctionnalités Wasm, SIMD | Microarchitecture | Aucun |
| Inhérent au Navigateur | Support de fonctionnalités, CSS média, bugs, bizarreries | Implémentation du moteur | Aucun (blocage DNS uniquement) |
| Comportemental | Souris, frappes, défilement, timing | Utilisateur | Aucun |
| Résiduel Réseau | TCP/IP, dérive d'horloge, RTT | Pile OS/conteneur | Partiel |
| Inter-Couches | Incohérence de profil, heuristiques de détection | Logique | Indirect |
1.3 Le Problème de l'Asymétrie
L'asymétrie fondamentale : le service d'empreinte n'a besoin que d'un seul vecteur réussi pour identifier ou corréler un utilisateur. Le défenseur doit bloquer tous les vecteurs.
Cet article ne prétend pas résoudre cette asymétrie. Il documente le risque résiduel.
2. Empreinte du Pipeline GPU & Rendu
Document complet : gpu-rendering.md
2.1 Pourquoi Ça Marche
Le pipeline de rendu GPU est physiquement déterministe — la même entrée produit toujours la même sortie sur le même matériel. Les différences proviennent de :
- Microarchitecture GPU (nombre d'ALU, unités de rastérisation, TMU, ROP)
- Version du pilote et optimisations du compilateur
- Différences de précision en virgule flottante dans les shaders
- Algorithmes d'anti-aliasing
- Ordre de rendu subpixel (RVB vs BVR)
- Matrices de conversion d'espace colorimétrique
2.2 Vecteurs
| Vecteur | Entropie | Détectable si Bloqué |
|---|---|---|
Hachage Canvas toDataURL() |
~5-7 bits | Oui |
WEBGL_debug_renderer_info.UNMASKED_RENDERER |
~20 bits (modèle GPU exact) | Oui |
| Hachage de rendu de scène WebGL | ~10-15 bits | Oui |
adapterInfo WebGPU (vendor, arch, device, driver) |
~25+ bits | Oui |
| Limites WebGPU (50+ capacités numériques) | ~30+ bits | Oui |
| Liste d'extensions WebGL | ~8-12 bits | Oui |
2.3 Avantages de l'Attaquant
- Aucune dépendance réseau : Le rendu est local, aucune requête nécessaire
- Verrouillé au matériel : Ne peut pas être changé sans matériel différent
- Multi-navigateur : Le même GPU produit des empreintes similaires sur Chrome/Firefox/Safari
- Passif : L'utilisateur ne peut pas savoir qu'il est empreinté
2.4 Faiblesses (du point de vue de l'attaquant)
- Le blocage est facile pour l'utilisateur : Les drapeaux Firefox
privacy.resistFingerprintingetCanvasBlockerfonctionnent - Tor Browser le vainc : Le rendu logiciel (SwiftShader) normalise toute la sortie
- Les mises à jour de pilotes changent l'empreinte : Instabilité périodique
- L'injection de bruit fonctionne : L'injection de pixels aléatoires de CanvasBlocker brise la répétabilité
- La détection statistique de la manipulation est imparfaite : Les attaquants ne peuvent que deviner si du bruit est injecté
2.5 Atténuations Proposées
| Atténuation | Efficacité | Impact | Implémentation |
|---|---|---|---|
| Bloquer WebGL/WebGPU entièrement | Élevée | Casse le contenu 3D | Injection JS |
| Injection de bruit Canvas | Moyenne-Élevée | Détectable | Injection JS (algorithme CanvasBlocker) |
| Bruit aléatoire cohérent par session | Moyenne | Corrélation de session possible | Injection JS |
Bloquer WEBGL_debug_renderer_info |
Moyenne | Bloque la fuite du modèle GPU | Injection JS |
| Rendu GPU logiciel (SwiftShader) | Très Élevée | Énorme perte de performance | Côté client uniquement (Tor Browser) |
| Arrondir les dimensions canvas à une grille | Faible | Réduit l'entropie | Injection JS |
Meilleur qu'Obscura puisse faire : Blocage + injection de bruit via JS. Ne peut pas égaler le rendu logiciel de Tor Browser.
3. Empreinte Matérielle Audio
Document complet : audio-hardware.md
3.1 Pourquoi Ça Marche
Le traitement audio implique :
- Implémentation du pilote audio (ALSA, PulseAudio, PipeWire, CoreAudio, WASAPI)
- Caractéristiques du DAC/ADC matériel
- Algorithmes de conversion de taux d'échantillonnage
- Comportement de la compression dynamique
- Gestion des tampons audio
Ceux-ci produisent des différences mesurables et cohérentes dans la sortie de l'oscillateur et le comportement du compresseur.
3.2 Vecteurs
| Vecteur | Entropie | Notes |
|---|---|---|
AudioContext getChannelData sur sortie DynamicsCompressor |
~8-12 bits | Le plus courant |
| Latence de base AudioContext | ~4-6 bits | Dépendant du matériel |
| Support du taux d'échantillonnage | ~2-3 bits | Varie selon le matériel |
| Nombre max de canaux | ~1-2 bits | Stéréo vs surround |
3.3 Avantages de l'Attaquant
- Cohérent entre sessions : Même matériel — même empreinte audio
- Difficile de détecter la manipulation : Le site peut comparer plusieurs lectures
- Fonctionne en arrière-plan : Aucune interaction utilisateur nécessaire
3.4 Faiblesses
- Le comportement DynamicsCompressor change selon les versions du navigateur
- Peut être bloqué entièrement (Firefox resistFingerprinting bloque AudioContext)
- Aplatir la sortie est détectable mais ne peut pas être distingué d'un matériel réel avec un comportement identique
3.5 Atténuations Proposées
| Atténuation | Efficacité | Impact |
|---|---|---|
| Bloquer AudioContext entièrement | Élevée | Casse les applications audio |
| Aplatir la sortie du compresseur (retourner tout -100dB) | Moyenne | Modèle détectable |
| Injecter du bruit périodique dans le tampon de sortie | Moyenne-Élevée | Complexe, détectable |
| Surcharger le taux d'échantillonnage à une valeur fixe | Faible | Un seul signal |
Meilleur qu'Obscura puisse faire : Bloquer AudioContext via injection JS.
4. Empreinte CPU & Plateforme
Document complet : cpu-platform.md
4.1 Pourquoi Ça Marche
Le CPU est le composant système le plus fondamental. Son comportement est déterministe et mesurable depuis JavaScript :
- Précision arithmétique en virgule flottante (la conformité IEEE 754 varie légèrement)
- Résolution de
performance.now()(dépend du temporisateur matériel, OS) - Détection de fonctionnalités basée sur Wasm (SIMD, AES-NI, AVX, BMI1/BMI2, POPCNT)
- Canaux auxiliaires de temporisation de cache (bien qu'atténués dans les navigateurs)
- Vitesse d'exécution WebAssembly (benchmark de performance relative)
4.2 Vecteurs
| Vecteur | Entropie | Notes |
|---|---|---|
| Empreinte mathématique (précision FPU) | ~4-6 bits | Subtile, étonnamment identifiable |
| Détection de fonctionnalités Wasm | ~8-12 bits | Capacités CPU |
Résolution de performance.now() |
~2-3 bits | Dépendant OS/CPU |
navigator.hardwareConcurrency |
~3-4 bits | Nombre de cœurs (Usurpable via JS) |
4.3 Avantages de l'Attaquant
- Verrouillé au matériel : Les fonctionnalités CPU ne changent pas
- Wasm est rapide : Détection binaire en <1ms
- Ne peut pas être usurpé au niveau proxy : Wasm s'exécute localement
4.4 Faiblesses
- La précision de
performance.now()réduite dans les navigateurs (1ms → 100μs → 5μs → va-et-vient) - La détection de fonctionnalités Wasm dépend de l'exposition par le navigateur
hardwareConcurrencyest usurpable via JS — déjà listé comme contrôlable- L'empreinte mathématique a une très faible entropie — seulement utile en combinaison
4.5 Atténuations Proposées
| Atténuation | Efficacité | Impact |
|---|---|---|
Réduire la précision de performance.now() via JS |
Faible | Les attaquants utilisent le timing Wasm |
| Bloquer Wasm entièrement | Élevée | Casse de nombreux sites |
Surcharger hardwareConcurrency |
Élevée | Trivial via injection JS |
| Accepter l'empreinte mathématique FPU | Aucun | Entropie trop faible seule |
Meilleur qu'Obscura puisse faire : Accepter — ou bloquer Wasm (radical).
5. Fonctionnalités Inhérentes du Navigateur & Bizarreries d'Implémentation
Document complet : browser-features-quirks.md
5.1 Pourquoi Ça Marche
Chaque moteur de navigateur (Blink, Gecko, WebKit) a un ensemble unique de :
- API Web supportées (100+ fonctionnalités binaires)
- Support de propriétés CSS
- Bugs et bizarreries d'implémentation
- Paramètres par défaut (taille de police, largeur de barre de défilement, style de formulaire)
- Comportement de rendu Unicode
- Version de support des emojis
5.2 Vecteurs
| Vecteur | Entropie | Notes |
|---|---|---|
| Vecteur de support de fonctionnalités (~100 fonctionnalités) | ~10-15 bits | Hautement corrélé |
| Bizarreries de rendu CSS | ~5-8 bits | Spécifique au moteur |
| Rendu Unicode/emoji | ~3-5 bits | Dépendant OS+navigateur |
| Largeur de barre de défilement | ~2-3 bits | Dépendant OS |
| Métriques de police par défaut | ~4-6 bits | Dépendant OS+navigateur |
5.3 Avantages de l'Attaquant
- Ne peut pas être changé : Ce sont des caractéristiques inhérentes au navigateur/OS
- Aucune autorisation nécessaire : Aucun consentement utilisateur requis
- Difficile à bloquer : Bloquer des fonctionnalités change le vecteur de fonctionnalités lui-même
5.4 Faiblesses
- Identifie principalement la famille + version du navigateur, pas les utilisateurs individuels
- Faible entropie au sein d'une même version de navigateur (tous les utilisateurs Chrome 120 se ressemblent)
- Les scripts de détection de fonctionnalités peuvent être bloqués par DNS avant leur chargement
5.5 Atténuations Proposées
| Atténuation | Efficacité | Impact |
|---|---|---|
| Bloquer DNS des domaines de scripts d'empreinte | Élevée | Arrête entièrement l'énumération des fonctionnalités |
| Accepter — faible entropie individuelle | Passif | Peut encore corréler avec d'autres signaux |
| Patcher le navigateur (pas au niveau proxy) | Très Élevée | Nécessite une construction navigateur personnalisée |
Meilleur qu'Obscura puisse faire : Blocage DNS des domaines d'empreinte connus.
6. Biométrie Comportementale
Document complet : behavioral-biometrics.md
6.1 Pourquoi Ça Marche
Les modèles de comportement utilisateur sont hautement individuels :
- Trajectoires de mouvement de souris (vitesse, accélération, gigue)
- Dynamique de frappe (temps de maintien des touches, intervalles inter-touches, motifs d'erreur)
- Modèles de défilement (vitesse, accélération, comportement de pause)
- Gestes tactiles (sur mobile : angle de balayage, pression, vitesse)
- Modèles de lecture (rythme défilement-puis-pause)
- Chronométrage et préférences de position de clic/appui
6.2 Vecteurs
| Vecteur | Entropie | Notes |
|---|---|---|
| Dynamique de frappe | ~15-25 bits | Hautement individuelle |
| Mouvement de souris | ~10-20 bits | Moins stable dans le temps |
| Comportement de défilement | ~8-12 bits | Dépendant du contenu |
| Gestes tactiles | ~12-18 bits | Spécifique au mobile |
6.3 Avantages de l'Attaquant
- Authentification continue : Pas un instantané, mais continu
- Difficile à falsifier : Imiter le comportement d'un autre utilisateur est extrêmement difficile
- Aucune restriction d'API JS : Tout est lisible depuis les écouteurs d'événements JS
6.4 Faiblesses
- Nécessite une interaction utilisateur significative : Ne peut pas empreinter passivement
- Haute variance : Le comportement change avec l'humeur, la fatigue, le contexte
- Temps de collecte long : Nécessite des minutes d'interaction
- Apprentissage machine requis : Le simple hachage ne fonctionne pas
- Facilement perturbé : Tout script qui interfère avec le timing le casse
6.5 Atténuations Proposées
| Atténuation | Efficacité | Impact |
|---|---|---|
| Bloquer les écouteurs d'événements souris/tactiles via surcharge JS | Moyenne | Casse les sites interactifs |
| Injecter du bruit de timing synthétique | Faible | Peut être filtré |
| Utiliser Tor Browser pour les sessions à haute sensibilité | Très Élevée | Solution la plus pratique |
| Accepter — le comportemental est contextuellement étroit | Passif | Fonctionne seulement sur les sessions connectées |
Meilleur qu'Obscura puisse faire : Très limité. Tor Browser est la solution pratique.
7. Empreintes Résiduelles au Niveau Réseau
Document complet : residual-network.md
7.1 Pourquoi Ça Marche
Même avec l'usurpation TLS et HTTP, des signaux réseau résiduels persistent :
- Paramètres de pile TCP/IP (hérités de l'OS du conteneur)
- Temps aller-retour réseau (RTT) et sa variance
- Découverte de chemin MTU
- TTL des paquets (révèle le nombre approximatif de sauts)
- Dérive d'horloge entre le client et le serveur
- Paramètres de transport QUIC HTTP/3 (si non bloqué)
7.2 Vecteurs
| Vecteur | Entropie | Notes |
|---|---|---|
| Taille de fenêtre TCP | ~2-4 bits | Spécifique à l'OS du conteneur |
| TTL initial | ~1-2 bits | 64 vs 128 |
| RTT + variance | ~5-8 bits | Dépendant du chemin réseau |
| Dérive d'horloge | ~4-8 bits | Dérive d'horloge matérielle |
| Paramètres HTTP/2 SETTINGS (si non usurpés) | ~6-10 bits | Spécifique à la bibliothèque proxy |
7.3 Avantages de l'Attaquant
- Toujours présent : Les signaux réseau sont inévitables
- Peut être combiné : La corrélation croisée de multiples signaux faibles augmente l'entropie
- Stable : Le chemin réseau change peu fréquemment
7.4 Faiblesses
- Faible entropie individuelle : TCP/IP seul identifie rarement
- Environnement de conteneur partagé : Plusieurs utilisateurs derrière le même conteneur se ressemblent
- L'usurpation TLS élimine le signal le plus identifiable
7.5 Atténuations Proposées
| Atténuation | Efficacité | Impact |
|---|---|---|
| Usurpation d'empreinte TLS (JA3/JA4 via utls) | Très Élevée | Critique pour Obscura |
| Miroir des paramètres HTTP/2 SETTINGS | Élevée | Implémentation complexe |
| Normaliser les paramètres TCP | Aucun | Le conteneur hérite de l'hôte |
| Router via VPN/Tor en amont | Élevée | Change les caractéristiques réseau |
Meilleur qu'Obscura puisse faire : Usurpation TLS + HTTP/2. TCP/IP est accepté.
8. Détection des Incohérences de Proxy & d'Usurpation
Document complet : proxy-detection.md
8.1 Pourquoi Ça Marche
L'acte d'usurpation crée des modèles détectables :
- Incohérence de profil : User-Agent Chrome + pile TLS Go + plateforme Win32 + polices non-Windows
- Signaux manquants : Les API bloquées (WebGL retourne null) créent une empreinte "bloquée" unique
- Anomalies de timing : Le MITM ajoute une latence mesurable
- Empreintes de certificat : Les certificats CA auto-signés sont détectables
- Normalisation d'en-têtes : Des en-têtes trop propres/cohérents (les vrais navigateurs ont des variations)
- Détection de surcharge JavaScript :
Object.getOwnPropertyDescriptor()peut détecter les surchargesObject.defineProperty
8.2 Techniques de Détection
| Technique | Ce Qu'elle Détecte | Fiabilité |
|---|---|---|
| Décalage d'empreinte TLS | Logiciel proxy vs navigateur revendiqué | Très Élevée |
| Blocage de fonctionnalités | Utilisation d'outil de confidentialité | Élevée |
| Détection de surcharge JS | Scripts injectés | Moyenne |
| Inspection de certificat | Proxy MITM | Élevée |
| Analyse de timing | Latence du proxy | Moyenne |
| Corrélation inter-signaux | Incohérence de profil | Très Élevée |
8.3 Avantages de l'Attaquant
- L'usurpation augmente la surface détectable : Plus vous changez, plus il y a de choses à détecter
- Analyse statistique : La comparaison avec de grands ensembles de données révèle des anomalies
- Apprentissage machine : Peut trouver des modèles que les humains manquent
8.4 Faiblesses
- La détection est probabiliste, pas déterministe
- Faux positifs : Les mises à jour légitimes du navigateur ressemblent à de l'usurpation
- Les outils de confidentialité sont utilisés par des millions de personnes : Être détecté comme "utilisateur de confidentialité" n'est pas unique
- Jeu du chat et de la souris : La détection de surcharge peut être contrecarrée par des surcharges plus profondes
8.5 Atténuations Proposées
| Atténuation | Efficacité | Impact |
|---|---|---|
| Cohérence de profil parfaite | Très Élevée | Nécessite des mises à jour continues du profil |
| Fuiter quelques signaux réels | Contre-intuitif | Rend le profil plus naturel |
| Utiliser un vrai certificat CA | Moyenne | Évite la détection de CA auto-signé |
| Arrondir le timing au lieu de le supprimer | Moyenne | Moins suspect qu'une latence zéro |
| Ne pas bloquer — usurper à la place | Élevée | Plus dur à détecter que le blocage |
Meilleur qu'Obscura puisse faire : Tests rigoureux de cohérence de profil et mises à jour continues.
9. Le Problème d'Agrégation
9.1 Entropie Individuelle vs Combinée
Un aperçu crucial : les vecteurs incontrôlables individuels ont une faible entropie seuls, mais combinés, ils deviennent identifiables.
Où est l'entropie individuelle et tient compte des dépendances entre vecteurs.
Pour les vecteurs incontrôlables seuls (GPU + Audio + CPU + Fonctionnalités + Réseau + Comportemental) :
C'est suffisant pour identifier de manière unique un utilisateur parmi ~.
9.2 Implications
- Même l'usurpation parfaite par proxy des vecteurs contrôlables est insuffisante si les vecteurs incontrôlables persistent
- Le blocage DNS est critique : Il empêche la bibliothèque d'empreinte de voir les vecteurs incontrôlables
- Défense en profondeur : Chaque vecteur bloqué réduit l'entropie agrégée
10. Directions de Recherche Proposées
10.1 Court terme (Obscura v1)
- Cohérence de profil parfaite : Outils de validation automatisés
- Maintenance des listes de blocage DNS : Flux de domaines d'empreinte
- Injection de bruit Canvas : Algorithme de CanvasBlocker
- Blocage des infos de débogage WebGL/WebGPU : Injection JS
- Blocage AudioContext : Injection JS
10.2 Moyen terme
- Apprentissage machine pour la détection d'anomalies : Détecter quand les modifications d'Obscura créent des modèles détectables
- Sélection adaptative de profil : Choisir le profil qui correspond le mieux au matériel réel de l'utilisateur (ne pas revendiquer Safari sous Windows)
- Dégradation gracieuse : Revenir à une usurpation moins agressive si le risque de détection est élevé
10.3 Long terme / Hors de portée
- Modification du navigateur : Construction navigateur personnalisée qui normalise les empreintes (approche Tor Browser)
- Normalisation GPU au niveau matériel : Interception de rendu au niveau pilote
- Obscurcissement comportemental : Modèles de souris/clavier générés par IA
- Empreinte résistante aux quantiques : Pérennisation contre les nouvelles techniques
11. Conclusion
Les vecteurs incontrôlables documentés ici représentent la limite fondamentale de l'anti-empreinte au niveau réseau. Aucun proxy ne peut les éliminer complètement car ils dérivent de :
- La physique : Rendu GPU, traitement audio, dérive d'horloge
- La biologie : Modèles de comportement utilisateur
- L'ingénierie : Choix d'implémentation du navigateur
L'approche d'Obscura est pragmatique :
- Contrôler ce qui peut être contrôlé (en-têtes, TLS, DNS, API JS) — ~55% de la surface
- Bloquer ce qui ne peut pas être usurpé (canvas, audio, WebGL) — empêche l'observation
- Accepter le risque résiduel — documenter et surveiller
L'alternative — la protection parfaite — nécessite Tor Browser, qui y parvient en normalisant chaque signal au prix de la fonctionnalité, des performances et de la commodité. Les deux approches ont leur place.
Références
- Acar, G. et al. (2014). "The Web Never Forgets: Persistent Tracking Mechanisms in the Wild." CCS 2014.
- Mowery, K. & Shacham, H. (2012). "Pixel Perfect: Fingerprinting Canvas in HTML5." WOOT 2012.
- Eckersley, P. (2010). "How Unique Is Your Web Browser?" PETS 2010.
- Englehardt, S. & Narayanan, A. (2016). "Online Tracking: A 1-million-site Measurement and Analysis." CCS 2016.
- Tor Browser Design Document (2024). "The Design and Implementation of the Tor Browser."
- FingerprintJS (2026). "Browser Fingerprinting Techniques." fingerprintjs.com.
- FoxIO (2024). "JA4: TLS Client Fingerprinting." GitHub.
- Laperdrix, P. et al. (2020). "Browser Fingerprinting: A Survey." ACM TOIT.