Pour protéger vos échanges, votre appareil et le serveur VPN doivent disposer d'un secret commun. Mais comment peuvent-ils l'établir sans le transmettre sur Internet, où quelqu'un pourrait l'intercepter ? La réponse repose sur une astuce mathématique particulièrement ingénieuse.

Lorsque vous activez votre VPN, votre ordinateur ou votre smartphone commence par communiquer avec un serveur distant. En quelques instants, une connexion chiffrée s'établit entre les deux machines, qui peuvent alors échanger des données à l'abri des regards indiscrets. Seulement voilà, pour chiffrer les informations à l'envoi et les déchiffrer à l'arrivée, elles ont besoin de clés cryptographiques. Tant que la connexion n'est pas sécurisée, impossible de simplement se les envoyer en clair. Car si une personne surveillait le réseau au moment de cet échange, elle pourrait récupérer les clés et les utiliser pour déchiffrer les communications suivantes. Les protocoles VPN modernes contournent donc le problème d'une manière assez étonnante : plutôt que de transmettre directement un secret commun, ils permettent aux deux machines de le calculer chacune de leur côté. Une idée qui ne date pas d'hier.
Deux machines, un même secret, sans jamais se l'envoyer
En 1976, les cryptographes Whitfield Diffie et Martin Hellman publient une méthode permettant à deux correspondants d'établir un secret commun sur un canal de communication non sécurisé. Leur idée repose sur une particularité des mathématiques : à partir d'un nombre secret, il est facile de calculer une valeur que l'on peut partager publiquement. En revanche, retrouver le nombre secret à partir de cette seule valeur est si difficile qu'un ordinateur classique ne pourrait pas y parvenir dans un délai raisonnable.
Vous n'êtes pas mathématicien et vous commencez à décrocher ? C'est normal. On va tenter d'éclairer cette première explication à l'aide du fameux exemple des couleurs, grand classique pour comprendre Diffie-Hellman. Sortez les pots de peinture.
Deux personnes cherchent à obtenir exactement la même couleur, sans se révéler leurs mélanges secrets. Elles choisissent d'abord une couleur de départ, connue de tous. Puis chacune y ajoute, à l'abri des regards, une couleur de son choix et transmet son mélange à l'autre.
À réception, chacune ajoute sa propre couleur secrète au mélange reçu. Les deux personnes obtiennent alors exactement la même teinte, puisqu'elles ont utilisé les mêmes couleurs, mais sans jamais s'être communiqué leurs ingrédients secrets.
Et si quelqu'un avait observé toute l'opération ? Il aurait vu la couleur de départ et les deux mélanges échangés, sans pouvoir facilement retrouver les couleurs secrètes utilisées.
Alors, évidemment, les véritables échanges Diffie-Hellman ne reposent pas sur un nuancier Pantone, mais sur des nombres et des calculs mathématiques. Chaque machine dispose d'une valeur privée, à partir de laquelle elle calcule une information publique qu'elle transmet à l'autre. Elle combine ensuite l'information reçue avec sa propre valeur privée, et les deux machines aboutissent au même secret partagé.
Et voilà le travail ! Les informations publiques circulent sur le réseau, mais jamais le secret qui servira à protéger les communications. Même en enregistrant l'intégralité des échanges, une personne extérieure ne pourrait pas en déduire ce secret. Les deux machines peuvent alors établir une communication chiffrée, sans avoir eu besoin de s'envoyer leur clé.
Comment les VPN utilisent Diffie-Hellman pour protéger vos échanges
Ce principe imaginé par Diffie et Hellman fête cette année ses 50 ans, et il n'a pas pris une ride. On le retrouve aujourd'hui dans plusieurs protocoles VPN, parmi lesquels OpenVPN, IKEv2/IPsec et le désormais incontournable WireGuard. Mais tous ne l'utilisent pas exactement de la même façon, et chacun lui associe un système d'authentification pour vérifier l'identité des correspondants et empêcher qu'un intrus puisse se faire passer pour l'un d'eux.
Avec IKEv2/IPsec, votre appareil et le serveur commencent par s'échanger des valeurs publiques, calculées à partir de leurs secrets respectifs. Chacun combine ensuite la valeur reçue avec son propre secret et obtient le même résultat que l'autre. Du Diffie-Hellman tout ce qu'il y a de plus classique. Ce premier échange permet de calculer des clés qui protègent la suite de la négociation, c'est-à-dire les échanges au cours desquels les deux machines s'accordent sur la sécurité de leur connexion. Elles peuvent alors vérifier leur identité respective et calculer, chacune de leur côté, exactement les mêmes clés dont IPsec aura besoin pour chiffrer les données du VPN.
OpenVPN utilise également Diffie-Hellman, mais procède en deux temps. Votre appareil et le serveur commencent par établir une connexion TLS, comme celle qui protège les sites HTTPS. Pour sécuriser cet échange, ils calculent un secret commun grâce à Diffie-Hellman, tandis que les certificats permettent de vérifier l'identité du serveur. Une fois ce premier canal chiffré, OpenVPN peut y faire circuler les informations secrètes nécessaires à la création des clés du tunnel VPN sans les exposer aux personnes qui surveillent le réseau.
WireGuard n'utilise pas TLS. Il s'appuie sur Noise, un ensemble de règles qui définit dans quel ordre les deux machines doivent échanger leurs informations et effectuer leurs calculs cryptographiques. L'objectif est toujours d'établir des secrets communs tout en vérifiant l'identité des correspondants. Pour y parvenir, WireGuard fait lui aussi appel à une variante de Diffie-Hellman, qui offre un niveau de sécurité comparable à celui de la méthode classique, mais avec des clés beaucoup plus courtes.
Avant la connexion, votre appareil et le serveur disposent chacun d'une clé privée et connaissent la clé publique de l'autre, dont l'authenticité doit être assurée. Lorsque vous activez votre VPN, ils utilisent également des clés temporaires et combinent leurs secrets privés avec les informations publiques échangées. Du Diffie-Hellman en bonne et due forme : les deux machines obtiennent les mêmes secrets sans se les transmettre. Elles en tirent ensuite les deux mêmes clés de session, une pour les données envoyées vers le serveur, l'autre pour les réponses. WireGuard utilise enfin ChaCha20-Poly1305 pour chiffrer les paquets et vérifier qu'ils n'ont pas été modifiés.
Bien évidemment, la solidité de tout ce système suppose que les protocoles soient correctement implémentés et que les appareils ne soient pas compromis. Un logiciel malveillant pourrait toujours récupérer des données avant leur chiffrement ou accéder à des clés encore présentes en mémoire. Mais le problème de départ est résolu : votre appareil et le serveur VPN peuvent disposer des mêmes clés pour protéger leurs échanges, sans jamais les exposer en clair sur Internet. Et sans même avoir besoin de se les envoyer, puisque chaque machine les calcule de son côté.




