Le WebGL fingerprinting utilise l'API graphique 3D de votre navigateur pour lire le fabricant de votre GPU, son modèle et la sortie de rendu au niveau des pilotes — générant un identifiant de périphérique qui persiste à travers tous les navigateurs de la même machine et n'est pas affecté par la suppression des cookies ou le changement de réseau. Vérifiez ce que votre navigateur expose dès maintenant sur whatsmy.fyi.
En résumé
Le WebGL fingerprinting exploite l'API WebGL — la même que celle qui fait tourner les jeux et les cartes 3D dans le navigateur — pour extraire la chaîne de fabricant de votre GPU, son nom de modèle et la sortie de rendu au niveau pixel. Chaque modèle de GPU produit des résultats légèrement différents pour des commandes de rendu identiques en raison de différences dans l'arrondi des flottants, le comportement des pilotes et l'architecture matérielle. Combiné à d'autres signaux, WebGL peut identifier de façon unique 99,24 % des navigateurs de bureau. Rien n'est stocké sur votre appareil, rien à supprimer, et un VPN ne peut pas l'arrêter.
Qu'est-ce que le WebGL fingerprinting ?
Le WebGL fingerprinting est une technique de pistage qui abuse de l' API WebGL — une interface JavaScript pour le rendu graphique 2D et 3D accéléré matériellement — afin de lire les caractéristiques spécifiques au GPU de votre appareil. Contrairement au pistage par cookies, il ne nécessite aucun stockage et n'est pas affecté par la navigation privée ni par la suppression de vos données de navigation.
La technique comporte deux composantes complémentaires. La première lit les métadonnées matérielles statiques directement depuis les API du navigateur : le nom de votre fabricant GPU, le modèle de GPU et la liste complète des extensions WebGL supportées par votre pilote. La seconde rend une scène 3D cachée et lit les données pixel — un processus qui produit des résultats légèrement différents sur chaque combinaison matériel/pilote.
Le WebGL fingerprinting est étroitement lié au canvas fingerprinting, mais cible une couche différente — et plus identifiante — de votre système. Le canvas fingerprinting capture les différences de rendu des polices en 2D ; le WebGL fingerprinting atteint directement votre matériel GPU. Ensemble, ils constituent deux des signaux à plus haute entropie de la boîte à outils du fingerprinting.
Comment fonctionne le WebGL fingerprinting ?
Une empreinte WebGL est assemblée en trois étapes, chacune ne prenant que quelques millisecondes et totalement invisible pour l'utilisateur.
Étape 1 — Lecture des paramètres matériels
Le script appelle gl.getParameter() avec des dizaines de constantes pour extraire les capacités matérielles. La plupart des valeurs sont anodines prises isolément — taille maximale des textures, dimensions maximales du viewport, précision GLSL supportée. Mais une extension WebGL change tout.
L'extension WEBGL_debug_renderer_info expose deux constantes conçues pour le débogage : UNMASKED_VENDOR_WEBGL et UNMASKED_RENDERER_WEBGL. Interrogées, elles retournent la chaîne exacte et non masquée du fabricant GPU — par exemple "NVIDIA Corporation" — et la chaîne complète du renderer GPU — par exemple "NVIDIA GeForce RTX 4080/PCIe/SSE2". Ces chaînes seules peuvent réduire une population de visiteurs à moins de 100 individus, selon des recherches de l'Inria et de la KU Leuven.
Étape 2 — Rendu d'une scène 3D
Le script crée un canvas WebGL caché et rend une scène complexe : dégradés, calculs d'éclairage et géométrie transparente avec des coordonnées de texture spécifiques. L'arithmétique en virgule flottante étant gérée différemment par les unités shader de chaque GPU — NVIDIA, AMD, Intel et Apple Silicon implémentent tous des comportements d'arrondi légèrement différents — les pixels résultants diffèrent au niveau binaire selon le matériel, même pour un code shader GLSL identique.
Étape 3 — Hash pixel via readPixels()
Le script appelle gl.readPixels() pour extraire le buffer de pixels RGBA bruts de la scène rendue et le hache — typiquement avec MurmurHash — en une valeur d'empreinte compacte. Ce hash est stable entre les sessions de navigation, le mode navigation privée et les redémarrages. Il ne change que lors d'une mise à jour du pilote GPU ou d'un remplacement du matériel physique.
// Étape 1 — lire les chaînes GPU non masquées via l'extension debug
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const ext = gl.getExtension('WEBGL_debug_renderer_info');
if (ext) {
const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
// ex : "NVIDIA Corporation", "NVIDIA GeForce RTX 4080/PCIe/SSE2"
}
// Étape 2 — collecter les paramètres de capacité matérielle
const params = {
maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxViewportDims: gl.getParameter(gl.MAX_VIEWPORT_DIMS),
supportedExts: gl.getSupportedExtensions(),
highFloatPrecision: gl.getShaderPrecisionFormat(
gl.FRAGMENT_SHADER, gl.HIGH_FLOAT
).precision,
};
// Étape 3 — rendre une scène et extraire les pixels
const pixels = new Uint8Array(4 * canvas.width * canvas.height);
gl.readPixels(
0, 0, canvas.width, canvas.height,
gl.RGBA, gl.UNSIGNED_BYTE, pixels
);
// Hash de 'pixels' → empreinte GPU stableQuelle est l'unicité d'une empreinte WebGL ?
WebGL est l'un des signaux individuels à plus haute entropie du fingerprinting. La couche de paramètres GPU seule fournit 10 à 15 bits d'entropie — suffisant pour identifier votre marque et modèle de matériel dans une petite cohorte. Le hash de rendu ajoute une discrimination supplémentaire entre des appareils ayant des modèles GPU identiques mais des versions de pilotes différentes.
| Résultat | Valeur | Source |
|---|---|---|
| Entropie des chaînes fabricant + renderer GPU | 10–15 bits | Cao et al., NDSS 2017 |
| Entropie de la sortie de rendu WebGL seule | ~5,7 bits | Fingerprint.com |
| Utilisateurs de bureau identifiés de façon unique (signaux combinés) | 99,24 % | Fingerprint.com |
| Utilisateurs mobiles identifiés de façon unique (signaux combinés) | 94,5 % | Fingerprint.com |
| Population réduite par la chaîne renderer GPU seule | < 0,01 % des visiteurs | Inria / KU Leuven |
| Support WebGL 2.0 (Chrome, Edge, Safari) | 95–99 % | BrowserLeaks WebGL Test |
WebGL 2.0 élargit la surface de fingerprinting en ajoutant des paramètres comme MAX_3D_TEXTURE_SIZE, MAX_ARRAY_TEXTURE_LAYERS et des constantes de transform feedback. Chaque paramètre supplémentaire différencie davantage les configurations matérielles. WebGL 2.0 ayant désormais 95 à 99 % de support, les scripts collectent routinièrement les deux versions en une seule passe.
Qui utilise le WebGL fingerprinting dans le monde réel ?
Réseaux publicitaires
Les régies publicitaires utilisent le WebGL fingerprinting pour tracer les utilisateurs entre sites web à des fins de ciblage comportemental et de plafonnement des expositions — le même objectif précédemment rempli par les cookies tiers. Alors que Safari bloquait les cookies tiers par défaut et que Chrome évoluait vers leur suppression, le fingerprinting matériel est devenu une alternative attractive car il ne nécessite aucun stockage ni interaction utilisateur.
Détection de fraude et lutte anti-bots
Les plateformes de sécurité utilisent les données WebGL comme signal de détection de bots. Les navigateurs automatisés fonctionnant sans interface graphique rapportent souvent des chaînes renderer GPU incompatibles avec leur user-agent déclaré — par exemple, un user-agent "Chrome sur Windows" associé à une chaîne renderer Mesa logicielle. Les incohérences entre les déclarations matérielles GPU et les extensions WebGL disponibles sont de forts indicateurs d'automatisation ou d'environnements virtuels.
Pistage multi-navigateurs
Comme la chaîne renderer WebGL et le hash pixel sont dérivés du matériel physique plutôt que de l'état du navigateur, ils restent cohérents entre différents navigateurs installés sur la même machine. Un utilisateur qui alterne entre Chrome, Firefox et Edge pour échapper au pistage produit la même chaîne renderer GPU dans chaque navigateur — permettant un suivi inter-navigateurs que les systèmes basés sur les cookies ne peuvent pas réaliser.
RGPD et WebGL fingerprinting
Selon le RGPD (Règlement Général sur la Protection des Données), une empreinte WebGL qui peut identifier un individu constitue une donnée personnelle au sens de l'article 4. La CNIL (Commission Nationale de l'Informatique et des Libertés) a explicitement classé le fingerprinting de navigateur, y compris les techniques WebGL, comme nécessitant un consentement éclairé sauf exception d'intérêt légitime strictement encadrée (ex : prévention de la fraude). L'utilisation à des fins publicitaires requiert le consentement préalable de l'utilisateur.
Comment se protéger du WebGL fingerprinting
Une protection efficace nécessite de bloquer l'API WebGL, de randomiser sa sortie ou de la normaliser sur une grande population d'utilisateurs. Options classées de la plus forte à la plus pratique au quotidien.
- Tor Browser (protection maximale) : Tor désactive entièrement la fonction
gl.readPixels()et restreint WebGL à un mode de capacité minimale viawebgl.min_capability_mode, rendant impossible le fingerprinting par rendu. L'extensionWEBGL_debug_renderer_infoest bloquée. La contrepartie est une navigation plus lente via le réseau Tor. - Brave Browser (recommandé pour l'usage quotidien) : Brave applique sa technique Farbling au WebGL : du bruit aléatoire par session et par site est injecté dans la sortie des pixels canvas et WebGL, rendant le hash de rendu différent à chaque visite de site. Les API WebGL sont également bloquées dans les contextes tiers par défaut.
- Firefox avec
privacy.resistFingerprinting: Ce paramètre dansabout:configdésactive complètement l'extensionWEBGL_debug_renderer_info, retournant des valeurs génériques à la place de vos chaînes GPU réelles. La sortie de rendu WebGL est également normalisée. C'est la protection la plus proche du niveau Tor disponible dans un navigateur grand public sans la pénalité de vitesse. - Safari sur appareils Apple : Safari rapporte une chaîne générique
"Apple GPU"au lieu des modèles de puces spécifiques (M1, M2, M3) et randomise la sortie canvas. Cela cache la génération du matériel aux scripts mais ne protège pas contre les hash pixel basés sur le rendu. - Ce qu'un VPN ne peut pas faire : Un VPN achemine votre trafic via un tunnel chiffré et masque votre adresse IP, mais n'a aucun effet sur la sortie WebGL. Votre chaîne fabricant GPU, chaîne renderer et hash pixel sont générés dans votre navigateur et transmis aux serveurs de pistage en tant que données JavaScript. Vérifiez si votre VPN fonctionne sur whatsmy.fyi, mais sachez qu'il n'adresse pas le fingerprinting.
Foire aux questions
Que révèle concrètement le WebGL fingerprinting sur mon matériel ?
Au minimum : votre fabricant GPU (NVIDIA, AMD, Intel, Apple, Qualcomm), votre nom de modèle GPU et parfois votre version de pilote — tous exposés en texte clair via l'extension WEBGL_debug_renderer_info. En plus, le hash de rendu encode le comportement en virgule flottante de votre GPU, spécifique à une génération matérielle et à une version de pilote. Ensemble, ces signaux peuvent vous réduire à une population de moins de 0,01 % des visiteurs typiques d'un site web.
Le WebGL fingerprinting fonctionne-t-il en navigation privée ?
Oui. La navigation privée empêche votre navigateur d'enregistrer les cookies, l'historique et les données de formulaires — mais elle ne change pas votre matériel GPU ni votre pilote. L'extension WEBGL_debug_renderer_info retourne les mêmes chaînes en fenêtre de navigation privée qu'en fenêtre normale. Seuls les navigateurs avec une protection active contre le fingerprinting — Brave, Firefox avec privacy.resistFingerprinting ou Tor Browser — se comportent différemment.
Le WebGL fingerprinting est-il plus puissant que le canvas fingerprinting ?
Ils ciblent des dimensions complémentaires de l'unicité de l'appareil. Le canvas fingerprinting capture les différences de rendu des polices en 2D entre les moteurs de texte des OS (ClearType, Core Text, FreeType). Le WebGL fingerprinting expose directement les métadonnées fabricant et modèle GPU, et capture les différences de virgule flottante au niveau des shaders 3D. WebGL produit typiquement une entropie plus élevée par signal car le matériel GPU est plus diversifié. Consultez le guide sur le canvas fingerprinting pour une comparaison détaillée.
Le WebGL fingerprinting peut-il me tracer entre différents navigateurs sur le même ordinateur ?
Oui — c'est l'une de ses capacités les plus significatives. Comme les chaînes fabricant et renderer GPU sont dérivées du matériel, elles sont identiques que vous utilisiez Chrome, Firefox, Edge ou tout autre navigateur sur la même machine. Des recherches publiées à NDSS 2017 ont spécifiquement démontré le fingerprinting inter-navigateurs en utilisant les fonctionnalités WebGL au niveau GPU, reliant des sessions de navigation entre navigateurs sans cookies ni stockage partagés.
Désactiver l'accélération matérielle stoppe-t-il le WebGL fingerprinting ?
Partiellement. Désactiver l'accélération matérielle dans les paramètres du navigateur force WebGL à utiliser un renderer logiciel (typiquement Mesa LLVMpipe ou SwiftShader) au lieu de votre GPU physique. Cela supprime la chaîne renderer spécifique au GPU et rend la sortie de rendu plus uniforme. Cependant, cela ne garantit pas une protection complète et dégrade significativement les performances graphiques.
Articles connexes
- Qu'est-ce que le browser fingerprinting ? Comment les sites vous tracent sans cookies — le guide complet de tous les signaux de fingerprinting combinés
- Qu'est-ce que le canvas fingerprinting ? Comment les sites vous tracent sans cookies — comment l'API Canvas 2D capture les différences de rendu GPU
- Qu'est-ce que le audio fingerprinting ? Comment AudioContext piste votre navigateur — comment la pile audio de votre appareil produit un identifiant unique
- Qu'est-ce que le WebGL pixel hash ? L'empreinte GPU invisible — le hash pixel WebGL, signal complémentaire au WebGL fingerprinting



