Canvas, WebGL et Audio : les trois fingerprints qui survivent à chaque redémarrage
Security & Privacy

Canvas, WebGL et Audio : les trois fingerprints qui survivent à chaque redémarrage

Effacer les cookies ne change rien à ces trois-là. Comment se construisent les hashes Canvas, les chaînes WebGL et les signatures AudioContext, et pourquoi même Tor en laisse fuiter un.

BROWSER.LOL
17.05.2026
Lecture : 20 min
Partager

Tu effaces les cookies. Tu changes d'IP. Tu passes en navigation privée. Tu mets même Chrome à jour. Le site te salue comme un vieil ami : mêmes recommandations, même statut fraud-flag, même tranche de prix. L'essentiel de cette reconnaissance, ce sont trois petits hashes qui s'en chargent, et aucun ne vit dans un stockage que tu peux vider.

Il s'agit du fingerprint Canvas, du fingerprint WebGL et du fingerprint AudioContext. Chacun dérive du matériel et de la pile de drivers situés sous le navigateur, pas de ce que la page a déposé sur ton appareil. Ensemble, ils forment une signature d'appareil statique qui survit aux redémarrages, aux réinitialisations de profil, aux réinstallations et à la plupart des extensions de privacy. C'est la couche située sous les cookies, et c'est là que vit vraiment le tracking moderne. Mise à jour : 2026.

Un fingerprint d'appareil statique, c'est un hash dérivé de la façon dont ton matériel et tes drivers réagissent à une charge de travail (un canvas dessiné, une scène 3D rendue, une onde sinusoïdale traitée). Il n'est pas stocké sur ton appareil, donc il n'y a rien à effacer. Deux machines sorties du même lot d'usine peuvent malgré tout produire des hashes différents, à cause de la variance du silicium GPU et des numéros de build des drivers. On a déjà pris la vue d'ensemble dans Browser Fingerprinting : comment les sites te pistent. Cet article creuse les trois vecteurs qui font le gros du travail.

Pourquoi ces trois-là, parmi des dizaines

Un script de fingerprinting moderne sonde une quarantaine de vecteurs sur une page classique : User-Agent, taille d'écran, headers de langue, liste de polices, plugins installés, décalage de fuseau horaire, précision du pointeur, hardware concurrency. La plupart de ces valeurs sont des entiers courts ou des chaînes courtes, et chacune apporte en pratique un à cinq bits d'entropie. C'est utile comme ciment, pas comme identifiant.

Canvas, WebGL et AudioContext jouent dans une autre catégorie. Chacun envoie une charge déterministe dans l'appareil et hashe la sortie. Le hash dépend du silicium GPU, de la version du driver, du moteur de rastérisation des polices de l'OS, de la stratégie d'anti-aliasing et de l'implémentation en virgule flottante du sous-système audio. C'est pour cette raison qu'une installation neuve de Chrome sur la même machine produit le lendemain presque les mêmes trois hashes, alors que la même machine avec un autre driver GPU en sort des valeurs nettement différentes.

Les chiffres du jeu de données EFF Cover Your Tracks et du corpus Inria AmIUnique situent le hash canvas autour de dix bits d'entropie, les informations renderer WebGL entre six et huit bits, et AudioContext à quatre ou cinq bits. Une session qui expose les trois passe largement les dix-huit bits, de quoi t'isoler parmi un quart de million d'utilisateurs. Largement suffisant pour de l'ad targeting, du fraud scoring et la plupart des pipelines analytics.

Le fingerprinting Canvas en détail

Fenêtre de browser contenant une zone canvas hexagonale dont les bords sont tracés par des points de mesure, avec une rangée de rectangles en dessous représentant le hash

Un fingerprint canvas, c'est le hash d'une image que ton navigateur a dessinée sans jamais te la montrer. Le script crée un <canvas> hors écran, le remplit de quelques formes et d'une chaîne de texte en deux ou trois polices, appelle toDataURL() puis hashe les octets PNG obtenus. Tu ne vois rien passer, l'opération dure quelques millisecondes.

Le hash reste stable sur une machine donnée parce que le chemin de rendu est déterministe. Même GPU, même driver, même moteur de rastérisation, même mode d'anti-aliasing : même PNG, octet pour octet. Modifie l'un de ces paramètres et le hash bascule. C'est aussi pour cela qu'après une mise à jour majeure de Windows, un utilisateur jusque-là stable peut soudain ressembler à un nouveau venu pour un tracker, et que les machines d'entreprise aux drivers verrouillés se ressemblent presque toutes.

Le squelette de l'attaque ressemble à ceci :

const c = document.createElement("canvas");
const ctx = c.getContext("2d");
ctx.textBaseline = "alphabetic";
ctx.font = "14px 'Arial'";
ctx.fillStyle = "#069";
ctx.fillText("Cwm fjordbank glyphs vext quiz, ", 2, 15);
ctx.fillStyle = "rgba(102,204,0,0.7)";
ctx.fillText("Cwm fjordbank glyphs vext quiz, ", 4, 17);
const png = c.toDataURL();
// hash(png) devient ton fingerprint canvas

Ce snippet n'a rien d'exotique. C'est en gros la routine que FingerprintJS, ThreatMetrix et Cloudflare Bot Management déclenchent dès le premier contact, avec quelques variantes. Brave et uBlock Origin se défendent en injectant un petit bruit par session avant la lecture, ce qui donne un hash différent à chaque tour. Contre les agrégateurs naïfs, ça fonctionne. Sauf que la protection elle-même reste détectable : un hash qui ne se répète jamais est un signal en soi, et les trackers te rangent dans la catégorie « utilisateur avec randomisation canvas ».

Le fingerprinting WebGL en détail

Fenêtre de browser contenant une forme triangulée low-poly composée de fins triangles connectés, avec une petite icône de puce dans le coin

WebGL ouvre à la page un accès direct à ton GPU via une couche JavaScript de l'API OpenGL ES. Deux choses sautent aux yeux. D'abord, une petite extension nommée WEBGL_debug_renderer_info expose en clair le fabricant de la GPU et la chaîne renderer. Sur la plupart des postes de bureau, cela ressemble à ANGLE (NVIDIA, GeForce RTX 4070, OpenGL 4.5.0) ou à quelque chose d'aussi précis. Cette seule chaîne peut porter plus de dix bits d'entropie à elle seule, parce qu'elle inclut la branche du driver et parfois un hash de build.

Ensuite, même quand l'extension est masquée ou désactivée, le rendu d'une scène 3D moyennement complexe (un tore texturé, une sphère en dégradé, quelques triangles en rotation) reste hashable. Les différents compilateurs de shaders, réglages de précision et implémentations de blending déplacent les pixels de quantités infimes mais constantes. Le script relit le framebuffer avec readPixels(), le hashe et enregistre le résultat.

Désactiver WebGL purement et simplement reste la défense la plus propre et la plus coûteuse. Google Maps, la majorité des jeux dans le navigateur, la moitié des outils SaaS modernes qui rendent des graphiques sur GPU et un nombre étonnant de visualiseurs 3D d'e-commerce arrêtent de fonctionner. Firefox propose la préférence webgl.disabled pour qui accepte ce compromis. Tor Browser garde WebGL activé mais normalise la chaîne renderer sur une valeur unique pour toutes les installations Tor d'une même plateforme. Voilà pourquoi deux utilisateurs Tor sur du matériel complètement différent renvoient la même signature WebGL à la page.

Le fingerprinting AudioContext en détail

Fenêtre de browser contenant une onde sinusoïdale propre tracée sur un axe horizontal, avec une rangée de rectangles en dessous représentant un hash stable

Le fingerprinting AudioContext est le plus discret des trois, à tous les sens du terme. Le script instancie un OfflineAudioContext, génère une onde triangulaire ou sinusoïdale à fréquence fixe, la passe dans un compresseur de dynamique aux paramètres figés, puis relit les échantillons sous forme de Float32Array. Aucun son n'atteint les haut-parleurs. Pas besoin d'avoir le son activé, les écouteurs n'ont rien à voir non plus. Ce qui compte, c'est le calcul en virgule flottante que ta pile audio a utilisé pour produire ces échantillons.

La sortie audio sonne pareil pour l'oreille humaine (et pour tout analyseur de spectre qui s'intéresse au contenu audible), mais les valeurs float32 sous-jacentes diffèrent selon l'implémentation de l'algorithme de compresseur. Les builds de navigateurs, les moteurs audio des OS et même certaines révisions de microcode CPU déplacent les bits de poids faible selon des motifs stables. Hasher le buffer ou en faire la somme donne un nombre qui survit aux redémarrages, aux réinitialisations de profil et à la plupart des extensions.

AudioContext porte moins d'entropie que canvas (généralement quatre à cinq bits), donc seul, il ne sort personne du lot. Sa vraie valeur pour un tracker, c'est que quasiment personne ne le contre. Canvas et WebGL captent l'attention bruyante des outils de privacy ; l'audio passe en dessous. Un script qui retrouve les mêmes hashes canvas et audio sur deux sessions place une bien plus grande confiance dans la correspondance que canvas seul ne pourrait le justifier, parce que la valeur audio ne se reproduit pratiquement jamais par hasard.

Les trois face à face

Mis côte à côte, les trois vecteurs n'ont pas les mêmes forces. Le tableau ci-dessous résume ce que chacun rapporte à un tracker, ce que la défense te coûte et à quel point cette défense reste visible.

VecteurEntropie moyennePersistanceDéfensesDéfense détectableUtilisé par
Canvas~10 bitsJusqu'à un changement de GPU, de driver ou de fontsRandomisation Brave, CanvasBlocker, image uniforme TorOui (le bruit est lui-même un signal)FingerprintJS, ThreatMetrix, Cloudflare Bot Management
WebGL~6 à 8 bits (chaîne renderer jusqu'à 10)Jusqu'à un changement de GPU ou de driverMasquer le renderer, désactiver WebGL, uniformisation TorOui (UA contre renderer signale les écarts)FingerprintJS, SDK ad-tech, plateformes anti-fraude
AudioContext~4 à 5 bitsSurvit aux redémarrages et réinstallationsRare. Extensions de bruit audio, Tor partiellementFaible (la défense est inhabituelle)FingerprintJS, fournisseurs anti-bot, suites analytics

Le schéma est constant. Chaque vecteur est difficile à neutraliser isolément, et les défenses qui marchent se remarquent. Un tracker qui voit un canvas normal, un WebGL normal et un AudioContext absent regarde une tranche minoritaire de la population, et ça aussi, c'est identifiant.

Pourquoi Tor en laisse encore fuiter un

Tor Browser est la défense grand public la plus agressive contre le fingerprinting statique. Par défaut, les lectures de canvas renvoient une image blanche uniforme (l'utilisateur est invité à confirmer avant qu'une vraie donnée ne soit laissée passer). WebGL reste activé, mais la chaîne renderer est normalisée sur une seule valeur pour toutes les installations Tor d'une même plateforme, et le rendu est arrondi pour gommer la variance des drivers. Deux des trois vecteurs sont pratiquement morts sous Tor.

AudioContext, c'est le fil qui dépasse. Le modèle de menace du Tor Project le prend en compte (le ticket tor-browser#13017 et les rapports de bug Mozilla associés traînent depuis des années), mais la sortie en virgule flottante d'un OfflineAudioContext dépend toujours de la chaîne de build. Un Tor Browser sous Linux x86_64 face à un Tor Browser sous macOS arm64 produit des hashes audio mesurablement différents, même quand les deux annoncent la même chaîne de plateforme. Des chercheurs ont publié plusieurs fois des distinguishers AudioContext qui fonctionnent sur Tor, déjà dans le papier AmIUnique d'origine et plus récemment dans des travaux académiques de suivi.

Le correctif est compliqué parce que l'alternative consiste à désactiver entièrement OfflineAudioContext, ce qui casse toute application web qui décode de l'audio en arrière-plan (lecteurs de podcasts, visioconférence, jeux dans le navigateur, outils d'accessibilité). Le Tor Project est resté prudent sur ce changement. Résultat : même le navigateur grand public le plus durci continue d'exposer un des trois.

Ce qui vient vraiment à bout des trois

Les trois vecteurs ont un point commun : ils dérivent tous du comportement matériel physique. Les défenses purement logicielles aident, mais les seules vraies réponses changent ce que la page voit de ta machine, pas ce que ta machine est en réalité.

Passer à un autre matériel physique

Un autre GPU, une autre microarchitecture CPU et une autre puce audio produisent en même temps des hashes différents sur les trois vecteurs. C'est la défense la plus forte, et aussi la moins commode. Peu de gens vont acheter un second ordinateur portable pour de la navigation sensible.

Démarrer sur une autre installation d'OS

Même sur le même matériel, une image d'OS neuve, avec d'autres versions de drivers, d'autres polices et une autre pile audio, décale chaque hash. Une clé USB Tails amorçable en est l'exemple type. Le prix à payer, c'est de vivre dans un environnement séparé, avec un état séparé : très bien pour un usage ponctuel, douloureux au quotidien.

Utiliser un navigateur distant conteneurisé

La solution la plus pratique consiste à sortir le navigateur entièrement de ta machine. Un navigateur distant en conteneur présente à la page le GPU, la pile audio et les polices du conteneur, pas les tiens. Ton matériel local ne participe pas au rendu. Chaque nouvelle session démarre sur un nouveau conteneur, donc avec un nouveau hash canvas, une nouvelle signature WebGL et une nouvelle valeur AudioContext, sans rien qui te relie à ta vraie machine. C'est le modèle de Browser.lol.

Installer une extension de bruit, sous réserves

CanvasBlocker, Trace et consorts injectent du hasard dans la lecture du canvas et, parfois, dans WebGL. Les hashes changent à chaque session, et ça suffit à semer les trackers naïfs. Le hic, c'est que « utilisateur avec randomisation canvas » constitue une catégorie en soi : un tracker avancé pourra donc malgré tout te ranger dans un sous-groupe, simplement plus petit et probablement plus intéressant. Considère les extensions comme une défense partielle, pas comme une solution.

FAQ

Peut-on désactiver le canvas dans Chrome ?

Pas proprement. Chrome n'expose aucun réglage pour désactiver le canvas, et une extension qui bloque toDataURL() casse la plupart des clients webmail, des outils de cartographie et des modules de signature. Les options réalistes sur Chrome se résument à une extension de bruit du type CanvasBlocker (avec le compromis évoqué plus haut) ou à faire passer la navigation sensible par un environnement isolé.

Un VPN change-t-il mon fingerprint ?

Non. Un VPN modifie ton IP et ta géolocalisation apparente, deux signaux utiles à un tracker, mais il ne touche ni au canvas, ni à WebGL, ni à AudioContext. Le hash que produit ta GPU reste le même, que les octets sortent par ta connexion à la maison ou par un nœud de sortie Mullvad.

Pourquoi mon fingerprint change-t-il après une mise à jour Windows ?

Les mises à jour cumulatives de Windows font souvent évoluer le driver GPU, le moteur de rastérisation DirectWrite ou le moteur audio. Chacun de ces décalages fait basculer au moins un des trois hashes. Les trackers s'y attendent et croisent les autres signaux (plage IP, cookies de connexion, schémas de comportement) pour combler le trou. Tu profites d'une courte fenêtre où tu sembles nouveau, pas d'une remise à zéro durable.

Ces fingerprints sont-ils uniques pris séparément ?

Aucun à lui seul ne suffit. Le canvas seul entre en collision pour des milliers d'utilisateurs ayant la même combinaison GPU plus driver plus OS. Le risque, c'est le recoupement : canvas plus WebGL plus AudioContext, croisés avec la taille d'écran et le fuseau horaire, ramènent la population à une poignée de personnes.

La navigation privée aide-t-elle contre l'un d'eux ?

Non. La navigation privée efface cookies et historique en fin de session, mais le matériel et les drivers sous le navigateur ne changent pas. Chaque fenêtre privée sur une machine donnée produit les mêmes valeurs canvas, WebGL et AudioContext qu'une fenêtre normale sur la même machine.

Là où ça te laisse

À eux trois, Canvas, WebGL et AudioContext dépassent dix-huit bits d'entropie sur une session classique. De quoi isoler un utilisateur parmi plus de 250 000, et tous les outils pensés pour l'ère cookie (navigation privée, VPN, la plupart des extensions de privacy) les laissent intacts. Les hashes sortent de ta GPU, de tes drivers, de tes polices et de ta pile audio : précisément la couche que ces outils n'atteignent jamais.

Défendre un vecteur à la fois se voit. Randomisation canvas, masquage WebGL et bruit audio produisent tous des anomalies détectables, et les trackers regroupent ainsi les utilisateurs « défendus » dans une catégorie plus petite et sans doute plus intéressante. Tor ferme deux des trois de manière convaincante et continue de laisser passer la signature audio. Le seul correctif qui ferme les trois en même temps change le matériel et la pile logicielle que la page a le droit de voir. En pratique, cela signifie une autre machine physique, une autre installation d'OS ou un navigateur distant conteneurisé comme Browser.lol.

Et si tu avais un vrai bureau, partout, sur n'importe quel appareil ?

Teste Browser.lol gratuitement et retrouve toute la puissance d'un PC, même depuis ton téléphone.

Ouvrir mon bureau virtuel

Rien à installer • Tous les appareils

Adopté par plus de 250 000 pros
Comme un vrai bureau
Prêt en quelques secondes

Derniers articles

Tous les articles