PowerScan
FR

Chaînes de moteur de rendu WebGL et signaux matériels : ce que votre GPU dit de vous

Empreintes de navigateur · 6 min de lecture · par PowerScan

Photo : Unsplash

Le matériel sur lequel tourne un navigateur fuit dans la page de plusieurs petites façons. Aucune ne nomme la machine, mais ensemble elles la décrivent assez précisément pour la distinguer de la plupart des autres.

La chaîne du moteur de rendu

WebGL expose une extension appelée WEBGL_debug_renderer_info avec deux valeurs : le fabricant non masqué et le moteur de rendu non masqué. Sous Windows avec Chromium, le moteur de rendu ressemble généralement à ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 SUPER (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11). Cette seule ligne donne le fabricant du GPU, le modèle exact, son identifiant de périphérique PCI, l'API graphique et le modèle de shader, ce qui constitue aussi un indice fort sur le système d'exploitation, car cette chaîne n'existe que sous Windows.

Firefox et Safari ont, à divers moments, masqué ou généralisé cette chaîne ; Chromium l'expose. Un navigateur qui la masque renvoie une valeur générique, et un diagnostic affiche « informations du moteur de rendu masquées » plutôt que de deviner.

Nombres et tailles

navigator.hardwareConcurrency renvoie le nombre de threads logiques du processeur. navigator.deviceMemory renvoie une quantité approximative de RAM, arrondie à un petit ensemble de valeurs et plafonnée à 8 dans Chromium, de sorte qu'une machine de 32 Go déclare 8. screen.width et screen.height donnent la taille de l'affichage, availWidth et availHeight déduisent la barre des tâches, et devicePixelRatio révèle la mise à l'échelle. screen.colorDepth vaut presque toujours 24. navigator.maxTouchPoints sépare les appareils tactiles des autres.

Certains de ces éléments ont un pouvoir d'identification inhabituellement élevé au regard de leur apparente innocuité. Le nombre de threads n'a qu'une poignée de valeurs courantes, mais c'est l'un des champs qu'un service commercial d'empreinte bien connu pondère fortement, précisément parce qu'il est peu coûteux et stable. La taille d'écran combinée au rapport de pixels et à la hauteur disponible cerne une machine davantage qu'un user agent.

Périphériques multimédias

navigator.mediaDevices.enumerateDevices() renvoie les caméras, microphones et haut-parleurs du système. Sans autorisation, les navigateurs modernes renvoient les types et les nombres mais des étiquettes vides ; une page apprend donc « une caméra, un microphone, une sortie » et rien de plus. Accorder l'accès à un site, quel qu'il soit, révèle les étiquettes. Un diagnostic qui n'affiche que les nombres se comporte comme le ferait une page sans autorisation.

L'angle de la cohérence, encore

Les signaux matériels sont l'endroit où l'usurpation tourne le plus souvent mal. Un profil qui se prétend un MacBook avec un moteur de rendu NVIDIA Direct3D, 24 threads et un écran de 1366×768 décrit une machine qui n'existe pas. Les sites n'ont pas besoin d'une base de données pour s'en apercevoir ; quelques règles suffisent. Si un profil modifie l'une de ces valeurs, il doit toutes les modifier vers une combinaison qu'un vrai appareil est réellement livré avec, et la conserver ainsi d'une visite à l'autre.

Quoi vérifier

Lisez la chaîne du moteur de rendu et demandez-vous si elle correspond au système d'exploitation du user agent. Lisez la taille d'écran et demandez-vous si elle correspond au rapport de pixels et à la hauteur disponible. Lisez le nombre de threads et la mémoire et demandez-vous si le couple est plausible pour ce GPU. Un diagnostic les présente côte à côte précisément dans ce but ; le jugement vous appartient.

Tous les articles · Lancer l'analyse