Comment ça fonctionne ?

Cette section explique le fonctionnement de Ceno et de Ouinet à partir d’une série de scénarios. La terminologie et les concepts importants pour Ouinet seront présentés (en caractères gras) et utilisés par la suite par efficacité et pour éviter toute confusion.

Accéder directement au contenu

Le Navigateur Ceno est un exemple d’application qui utilise la technologie Ouinet pour récupérer et partager du contenu Web. Nous appelons ce type d’application un client Ouinet. Quand vous utilisez votre client (c.-à-d. Ceno) pour essayer d’accéder à un contenu X hébergé sur un serveur Web (que nous appellerons le serveur d’origine de X), votre client essaie de contacter le serveur d’origine sur Internet, soit directement soit par l’intermédiaire d’une autre machine configurée pour contacter les serveurs Web pour les autres (ce que l’on appelle un serveur mandataire), et demande ensuite le contenu souhaité. Ce mode de fonctionnement n’est pas différent de celui de n’importe quel navigateur Web normal.

Note technique : Il y a en fait un petit inconvénient. Dans la mesure où le client agit comme mandataire HTTP sur votre appareil, pour que le client puisse déchiffrer les demandes de contenu HTTPS et y et donner suite, l’application qui utilise le client (c.-à-d. la partie navigateur Web, Firefox dans Ceno) doit accepter un certificat spécial émis par le client même (et utilisé seulement sur votre appareil). Le Navigateur Ceno se charge déjà de configurer ce certificat pour son usage privé, afin que vous n’ayez pas à vous en soucier.

Il se peut toutefois que ces chemins directs ne soient pas accessibles. Par exemple, votre fournisseur d’accès à Internet (FAI) pourrait bloquer l’accès au serveur d’origine de X ou le mandataire en raison d’une injonction du gouvernement (même si le reste du trafic est toujours autorisé). En tant qu’utilisateur du client en haut à gauche illustré ci-dessous, les deux tentatives d’accès au contenu X (le petit document proche de son serveur d’origine) échoueraient pour vous. Vous aurez peut-être aussi remarqué le nœud « injecteur » sur le diagramme. Nous l’expliquerons dans un instant.

Figure: Le client ne peut pas directement atteindre le contenu

Avec un navigateur normal, vous n’y arriveriez pas. Cependant, avec Ouinet, vous pouvez demander leur copie du contenu X à d’autres clients, s’ils en ont déjà une. Découvrons comment Ouinet effectue cette demande.

Chercher du contenu partagé

L’ensemble des contenus stockés par les clients Ouinet est appelé cache distribué, c.-à-d. un magasin qui ne se trouve pas en un seul endroit. Mais comment votre client peut-il savoir quels autres clients formant le cache ont le contenu souhaité ?

Pour accéder au contenu X, un navigateur Web doit connaître son [adresse URL][Adresse URL] (URL), l’adresse qui apparaît dans la barre d’adresse du navigateur, p. ex. https://exemple.com/foo/x. À partir de cette URL, un navigateur normal déduirait qu’il doit contacter le serveur Web exemple.com en utilisant le protocole HTTP (le langage utilisé pour échanger des ressources Web) par SSL/TLS (une couche de sécurité sur TCP, les règles d’Internet pour que les programmes puissent communiquer entre eux) et demander la ressource /foo/x.

Ouinet recherche le contenu d’une manière différente. Il utilise un index semblable à la table des matières d’un livre : dans l’index du cache distribué de Ouinet, vous cherchez l’URL complète du contenu et obtenez une liste des clients qui en détiennent une copie. L’index même est distribué, les clients devant annoncer aux autres le contenu qu’ils possèdent. En fait, seul un indice de chaque URL est annoncé : si quelqu’un espionne le trafic de votre appareil il ne peut pas savoir quel contenu vous avez, et si quelqu’un cherche un contenu particulier, il peut suivre les indices jusqu’à votre client.

Note technique : L’une des méthodes de mise en œuvre de l’index consiste à utiliser la [table de hachage distribuée][Table de hachage distribuée] (THD) de [BitTorrent][BitTorrent] pour obtenir les adresses (IP et port) des clients qui offrent le contenu. La THD utilise une [fonction de hachage cryptographique][Fonction de hachage cryptographique] pour calculer la clé de la table à partir de l’URL du contenu, ainsi que d’autres paramètres tels que la clé de l’injecteur (voir ci-dessous), afin que plusieurs index puissent coexister.

De plus, le Navigateur Ceno n’annonce pas l’URL de chaque ressource qu’il détient : les pages modernes ayant des dizaines ou des centaines de composants (images, feuilles de style, scripts…), cela créerait un trafic important. Les ressources sont plutôt regroupées sous l’URL de la page qui les tirent et seule cette URL est annoncée. Cela se fait à l’aide d’une extension de navigateur ad hoc (décrite plus loin).

Les clients qui proposent un contenu particulier grâce au cache distribué lepropagent, en sont les propagateurs (ces termes proviennent du monde du partage de fichiers pair à pair). Pour en revenir à notre scénario-exemple, deux clients propagent un contenu. Malheureusement, l’un d’eux propage le contenu Y et l’autre le contenu Z, et votre client ne trouverait donc aucune entrée pour le contenu X dans l’index du cache distribué, comme illustré ci-dessous :

Figure: Contenu introuvable dans le cache distribué

Heureusement, Ouinet offre un moyen de récupérer un tel contenu et en plus de l’offrir aux autres clients du cache distribué. Continuez à lire pour savoir comment.

Partager un nouveau contenu

Mandataires dopés aux stéroïdes

Dans Ouinet, nous trouvons des serveurs mandataires spéciaux appelés injecteurs qui se trouvent (avec un peu de chance) du côté libre d’Internet et qui s’efforcent de rester accessibles malgré les mesures de blocage :

  • Tout d’abord, les connexions entre les clients et les injecteurs sont chiffrées (grâce au SSL/TLS normal, tel que HTTPS) afin d’éviter que des assaillants n’identifient les injecteurs en écoutant le trafic Web.D’ailleurs, les certificats des injecteurs sont intégrés au Navigateur Ceno, ce qui lui permet de détecter les assaillants qui tenteraient de se faire passer pour des injecteurs.

  • Si le chiffrement ne suffit pas, les connexions aux injecteurs peuvent utiliser des techniques d’obscurcissement spécifiques (telles qu’I2P et les transports enfichables de Tor) pour compliquer encore l’identification.

  • Même si un injecteur a été identifié et que son accès a été bloqué par votre FAI, il en existe plusieurs et votre client peut contacter n’importe lequel sur Internet.

    • Certains ou tous les injecteurs peuvent être bloqués, mais l’ensemble des injecteurs peut varier dans le temps (et de nouveaux être ajoutés).Votre client n’a pas à connaître leurs adresses Internet à l’avance ; il effectue plutôt une recherche dans l’essaim d’injecteurs* (autre terme provenant du partage de fichiers pair à pair), un index distribué à entrée unique semblable à l’index du cache distribué, qui fournit les adresses des injecteurs accessibles actuellement.

    • Enfin, même si votre client n’arrive pas à atteindre un injecteur, d’autres clients pourraient. Si un client est en mesure d’atteindre un injecteur et pense être accessible par d’autres clients, il devient un client pont et ajoute sa propre adresse Internet à l’essaim de ponts*, un autre index distribué à entrée unique.Votre client peut donc chercher une telle adresse, se connecter au pont sous-jacent et lui demander d’établir pour lui une autre connexion vers un injecteur, créant ainsi un tunnel entre votre client et l’injecteur. Une connexion peut alors être établie entre eux à l’intérieur du tunnel.

    Dans la mesure où les connexions entre clients et injecteurs sont chiffrées, les ponts ne peuvent voir l’information qui circule entre eux.

Un injecteur peut se comporter comme un serveur mandataire normal (bien que très accessible), et c’est en fait ce que les clients Ouinet (dont le Navigateur Ceno) font actuellement quand ils tentent d’accéder à un contenu par l’intermédiaire d’un mandataire. Dans ce cas, l’injecteur ne pourra pas non plus voir l’information qui circule entre votre client et le serveur d’origine (à moins que ce ne soit une simple connexion HTTP non chiffrée).

Mais il existe d’autres outils qui vous permettent d’atteindre des mandataires dans des conditions d’interférence draconienne du réseau. En quoi les injecteurs de Ouinet sont-ils si particuliers ?

Faire confiance au contenu partagé

Et bien, un injecteur ne se contente pas de récupérer du contenu au nom de votre client, il vous permet aussi de partager ultérieurement ce contenu avec d’autres, même si l’injecteur ou à la majeure partie d’internet ne sont plus accessibles.

Vous pourriez bien sûr télécharger une page de votre navigateur et en copier les fichiers pour d’autres personnes, ce qui ne poserait pas de problème si vous vous connaissez. Mais que se passerait-il si vous receviez ces fichiers d’une personne inconnue ? Comment pourriez-vous savoir si le contenu provient vraiment du site Web en question, qu’il a été récupéré à une certaine date ou que l’information qu’il comprend n’a pas été manipulée ?

Nous voulons que l’utilisation de Ceno et de Ouinet augmente et qu’elle fournisse autant de contenu que possible au plus grand nombre. C’est pourquoi nous voulons que vous puissiez recevoir du contenu de personnes que vous ne connaissez pas. Afin de vous permettre d’accepter de tels contenus, Ouinet fait appel à la signature du contenu : votre client est configuré pour faire confiance aux contenus signés à l’aide d’une clé spéciale appartenant aux injecteurs. Si un client demande à un injecteur de récupérer un contenu Web pour le partager, l’injecteur le récupère du serveur d’origine, utilise la clé pour le signer et renvoie le contenu signé au client.

Note technique : En fait, l’injecteur signe les blocs de données individuels au fur et à mesure qu’ils arrivent, et si la connexion est coupée lors de la récupération d’un gros fichier, les données téléchargées peuvent ainsi être encore partagées par le client qui les a reçues.

Différents injecteurs peuvent avoir des clés différentes et vous pouvez donc choisir les injecteurs auxquels faire confiance. Imaginez la situation ainsi : vous pourriez faire confiance à un document signé par un notaire de votre pays, peu importe qui vous l’aurait donné (quelqu’un de votre pays ou d’un autre), mais vous ne seriez pas tenu d’accepter un document signé par un notaire d’un autre pays. Le Navigateur Ceno est déjà configuré pour faire confiance à un ensemble d’injecteurs exploités par eQualitie.

Note technique : Les injecteurs utilisent une biclé publique et privée pour créer des signatures Ed25519 ; les clés publiques sont suffisamment petites pour être envoyées avec les signatures, et elles sont encodées en 64 caractères hexadécimaux ou en 52 caractères Base32. Elles pourraient même être échangées sur le téléphone ou écrites sur un morceau de papier.

Injection de contenu

Souvenez-vous que dans notre scénario-exemple, votre client avait déjà tenté en vain de récupérer le contenu X directement du serveur d’origine et d’autres clients. Le client joue sa dernière carte Ouinet et tente de contacter un injecteur de confiance pour obtenir une copie signée du contenu qu’il pourra partager avec d’autres clients.

L’illustration ci-dessous présente le résultat possible de cette opération : le client tente d’abord de contacter l’injecteur directement (p. ex. en utilisant une adresse Internet obtenue de l’essaim d’injecteurs), mais elles est malheureusement déjà bloquée par votre FAI ; heureusement, l’essaim de ponts offre les adresses Internet de deux autres clients qui peuvent encore atteindre un injecteur. Votre client ouvre un tunnel vers l’injecteur grâce à l’un de ces clients, de sorte que votre client demande le contenu X à l’injecteur, qui le demande à son tour à son serveur d’origine.

Figure: Le client tente d’atteindre l’injecteur

Quand le contenu X est reçu par l’injecteur, il le signe avec sa clé, ajoute la signature au contenu et le renvoie à votre client dans le tunnel par lequel il est arrivé (disons, grâce au client situé par-delà le blocage). Une fois que le contenu atteint votre client, il accomplit trois choses :

  1. Il vous le remet (dans le cas de Ceno, il affiche le contenu dans le navigateur).
  2. Il enregistre le contenu sur votre appareil pour le propager ultérieurement vers d’autres clients. Il y restera pendant une durée configurable ou jusqu’à ce que vous décidiez d’effacer tout le contenu enregistré.
  3. Il annonce dans l’index du cache distribué qu’il possède un exemplaire de ce contenu, afin que d’autres clients puissent le trouver.

L’opération combinée d’extraction, de signature, de stockage et d’annonce est ce que nous appelons l’injection de contenu, comme illustré ci-dessous.

Figure: Le client reçoit le contenu signé de l’injecteur

Notez que le mécanisme décrit ci-dessus demande quand même qu’un chemin existe à travers le blocage et vers le reste d’internet. Mais parfois, ce chemin sera aussi absent : pensez aux déconnexions internationales complètes, aux catastrophes naturelles, ou simplement à une congestion excessive des quelques chemins existants (car tout le monde tente de les emprunter). C’est là que toute la puissance du cache distribué entre en jeu.

Imaginons qu’après avoir récupéré le contenu X de l’injecteur, une catastrophe isole votre région du reste du monde. Il s’avère que le contenu X devient particulièrement pertinent puisqu’il décrit des moyens d’aider votre communauté dans une telle situation.

À ce moment-là, une deuxième personne qui utilise le Navigateur Ceno tente également d’obtenir ce contenu. L’accès au serveur d’origine ou à tout ce qui se trouve par-delà votre région est impossible. Ceno vérifie donc si ce contenu est présent dans l’index du cache distribué et constate que votre appareil le propage. Ceno récupère votre adresse Internet dans l’index, s’y connecte et demande le contenu comme illustré ci-dessous.

Figure: Le client reçoit le contenu signé du client

Maintenant, ce deuxième appareil détient aussi un exemplaire du contenu X et l’annonce donc dans l’index du cache distribué, devenant ainsi propagateur. Si une troisième personne intéressée par ce contenu utilise le Navigateur Ceno pour le récupérer, Ceno verra alors deux adresses pour ce contenu dans l’index : celle de votre appareil et celle du deuxième utilisateur. Si le contenu est volumineux (p. ex. une vidéo), ce troisième appareil pourrait tenter d’en obtenir la moitié de chacun des autres appareils (comme illustré ci-dessous), accélérant ainsi le téléchargement et réduisant le trafic utilisé.

Figure: Le client reçoit du contenu signé de plusieurs clients

Pour terminer, la situation pourrait encore s’aggraver et toutes les infrastructures de réseau commerciales et nationales pourraient être coupées. Le case échéant, Ouinet et le Navigateur Ceno offre aussi le partage de contenu d’appareil à appareil, entre deux clients situés sur le même réseau local (p. ex. connectés au même point d’accès Wi-Fi), même si le réseau ne peut pas accéder à d’autres.

[Adresse URL] : https://fr.wikipedia.org/wiki/Uniform_Resource_Locator [Fonction de hachage cryptographique] : https://fr.wikipedia.org/wiki/Fonction_de_hachage_cryptographique [BitTorrent] : https://fr.wikipedia.org/wiki/BitTorrent [Table de hachage distribuée] : https://fr.wikipedia.org/wiki/Table_de_hachage_distribu%C3%A9e