Surfer anonymement, vraiment ?
Nous utilisons des navigateurs pour consulter le web. Si nous souhaitons rester relativement anonymes (modulo les informations que nous transmettons volontairement), nous pouvons refuser les cookies ou, car cela signifie parfois que le site consulté devient inutilisable, accepter les cookies mais ne pas les mémoriser (ce qui revient à transformer tous les cookies en cookies de session).
Bien sûr, le serveur que nous consultons connaît notre adresse IP, donc nous pouvons utiliser TOR ou d'autres systèmes de relayage afin d'occulter cette origine.
Mais cela suffit-il vraiment ?
Informations transmises
En-têtes HTTP
Lorsqu'un navigateur envoie une requête vers un serveur, il incorpore diverses informations dans l'en-tête de la requête (voir le site du W3C pour plus d'informations et de détails), dont les plus connues sont :
- User-Agent : identification du navigateur
- Accept : types de réponses qui seront acceptables par le navigateur.
Voici un exemple des en-têtes (interceptés par TamperData) :
Ces informations sont reçues par le serveur web. Elles peuvent par exemple servir à adapter les informations produites, à établir des statistiques, etc. Elles permettent aussi d'identifier votre navigateur et donc, indirectement, vous-même.
Informations indirectes
D'autres informations peuvent être transmises, sur demande, par votre navigateur. Il suffit d'un peu de JavaScript, envoyé par le site que vous visitez et poliment exécuté par votre navigateur.
Conséquences
Les informations transmises implicitement par votre navigateur contiennent des bribes de données indirectement identifiantes. Unitairement, chacune de ces pièces est insuffisante pour identifier un navigateur. Toutefois, lorsqu'elles sont réunies, cela peut amener à un ensemble unique d'informatoins qui identifie le navigateur - et donc, indirectement, son utilisateur.
Consolidation des informations
L'Electronic Frontier Foundation (EFF) a mis en place un site spécifique, Panopticlick, qui permet de mesurer l'anonymat tout à fait relatif des mesures évoquées précédemment (pas de cookies ou cookies de session, relais anonymisant). Uniquement à partir des informations que le navigateur accepte d'envoyer au serveur, Panopticlick calcul le nombre de bits discriminants dont le serveur dispose pour distinguer votre navigateur d'un autre navigateur.
Sans JavaScript
Voici par exemple le résultat de la collecte et analyse d'informations, suite à l'utilisation de Panopticlick avec un navigateur dans lequel nous avons désactivé Javascript.
Le premier test a été réalisé en 2010, peu de temps après la mise en ligne de Panopticlick :
La signature de notre navigateur, c'est-à-dire l'ensemble des informations transmises par celui-ci au site visité, est unique. Ces informations suffisent à identifier ce navigateur parmi tous les autres. Notez toutefois le faible nombre de navigateurs testés à ce moment (un peu plus de 200000). Une base aussi faible de comparaison peut expliquer le résultat.
Trois années plus tard, voici ce que cela donne :
La situation s'est marginalement améliorée : la signature de notre navigateur n'est plus unique et correspond statistiquement à celle d'un navigateur sur cent mille. Le nombre de bits d'informations identifiantes envoyés par le navigateur a baissé d'un point.
Avec JavaScript
Avec le même navigateur, JavaScript ayant été activé.
En 2010, les bits d'informations identifiants sont passés de 17.65 à 17.67, une augmentation somme toute limitée. Le navigateur peut toujours être distingué par rapport à tous les autres.
En 2013 :
Là, on revient à une signature unique, donc une identification pratiquement certaine de ce navigateur bien précis, pari près de trois millions d'autres navigateurs. Le nombre de bits d'informations identifiantes est passé de 17,6 (en 2010 et 2013) à 21,45. C'est une augmentation particulièrement notable.
Eléments discriminants
D'où viennent les informations complémentaires, lorsque JavaScript est activé, qui permettent au site Web d'identifier de manière plus précise le navigateur ? Voici le détail (en 2013) pour le navigateur sans JavaScript :
Et voici, toujours en 2013, le détail pour le même navigateur avec JavaScript :
La pertinence de l'en-tête User Agent, par rapport à l'identification du navigateur, reste la même et c'est normal. La pertinence de l'en-tête HTTP_ Accept est légèrement diminuée. Par contre, JavaScript permet d'énumérer les greffons présents dans le navigateur (Browser Plugin Détail), et on passe de 1,79 bits d'informations discriminantes à 9,17. L'augmentation est moins sensible pour les caractéristiques de l'écran (Screen size and color depth) et pour les polices de caractères installées (System Fonts), mais reste quand même très significative dans les deux cas.
Bilan de l'identification indirecte
Les résultats sont intéressants, et peu surprenants : le navigateur envoie assez d'informations pour qu'un serveur vous identifie presque à coup sûr. Dans les deux exemples précédents, en 2010 et 2013, si JavaScript est activé, les informations envoyées par le navigateur sont suffisantes pour l'identifier de façon unique. Si JavaScript est désactivé, la situation en 2013 semble un peu meilleure qu'en 2010 (peut-être est-ce simplement dû au plus grand nombre d'utilisateurs de Panopticlick en 2013) : le navigateur n'est que un parmi cent mille.
Paradoxalement, nous avons là (du moins par rapport aux tests que nous avons réalisés) une conséquence négative de nos efforts de sécurisation : plus nous travaillons à éliminer des éléments indésirables, et plus nous obtenons des configurations qui se révèlent relativement uniques. A l'inverse, plus la plate-forme utilisée est générique, plus la probabilité augmente que vous ne soyez pas le seul avec une certaine configuration de navigateur. Tout est ensuite à ramener à la fréquentation du site web concerné.
Dans tous les cas, il reste possible de réaliser un profil de l'internaute à partir de ce que le navigateur "veut bien dire" au serveur. Avec suffisamment de recoupements, notamment comportementaux (créneaux temporels d'utilisation, langues préférées, etc.), le profilage peut aller assez loin.
Solutions
Il n'existe pas de bonne solution, qui soit réellement fiable.
Vous pouvez désactivez JavaScript et faites mentir vos navigateurs. Des greffons Firefox permettent cela. Vous pouvez aussi utiliser un relais de navigation qui altère les en-têtes et filtre les informations envoyées par votre navigateur. Filtrer le JavaScript que vous recevez est envisageable, mais au-delà d'un filtre global accepter/refuser (ce que fait le greffon NoScript, par exemple), cela va devenir très difficile.
Vous pouvez aussi utiliser un environnement (machine virtuelle, compte spécifique...) composé spécialement pour surfer, avec aussi peu d'éléments "exotiques" que possible.
Cependant, votre navigateur enverra toujours des informations aux sites que vous visitez, informations pouvant identifier, partiellement au moins, le navigateur.