Blog

Pourquoi votre identifiant est un numéro, pas un e-mail

Le compte dont vous n'avez pas besoin est un numéro de 128 bits, délivré par une machine qui, structurellement, ne peut pas ouvrir votre tunnel. Voici pourquoi ces deux faits doivent être vrais ensemble.

Publié le 5 septembre 2026 · Mis à jour le 16 octobre 2026

La plupart des applications demandent une adresse e-mail avant de demander ce pour quoi vous êtes réellement venu. ForestVPN ne demande ni e-mail ni mot de passe — ouvrez-la, appuyez sur connexion. Si vous voulez un même abonnement sur plusieurs appareils, vous recevez à la place un numéro de 32 caractères, affiché une seule fois, et c'est tout le système de connexion.

Ce n'est pas un choix de style. C'est ce qu'il reste une fois que deux exigences entrent en collision, et la partie intéressante est de savoir laquelle l'emporte.

Où la connexion vit habituellement

Un bouton « Se connecter avec Apple » ou « Se connecter avec Google » est une redirection vers le domaine de quelqu'un d'autre — appleid.apple.com, accounts.google.com, un tenant *.auth0.com. Sur un téléphone ayant un chemin ouvert vers ces hôtes, cette redirection est une plomberie invisible.

Nous ne pouvons pas supposer que ce chemin est ouvert, car une partie du rôle de ce produit est de continuer à fonctionner sur des réseaux qui ne laissent un appareil atteindre qu'une liste courte et fixe d'hôtes. Tout le modèle de sécurité de notre propre proxy relais tient dans cette liste — trois noms, api., sess. et catalog.fvpn.net, correspondant exactement. L'élargir pour admettre un fournisseur d'identité hébergé derrière un CDN reviendrait à admettre un fournisseur dont ce même CDN héberge aussi une large part d'Internet, ce qui transformerait un relais étroit en relais généraliste. Et sur iOS en particulier, la vue web de connexion d'un fournisseur d'identité tiers s'exécute hors processus — un réglage de proxy au niveau de l'application n'a aucun moyen d'y accéder pour la faire passer par quoi que ce soit que nous exploitions. La redirection échoue précisément là où elle a le plus besoin de fonctionner.

Le numéro n'est donc pas l'option conviviale que nous aurions choisie à la place de l'option familière. C'est l'option qui continue de fonctionner sous la contrainte qui comptait le plus.

L'autre moitié : personne qui détient le numéro ne peut voir votre trafic

Dites le numéro de compte autrement : c'est un identifiant émis par un service qui tourne sur Cloudflare Workers — exécution limitée à la durée de la requête, aucun processus de longue durée, aucun socket brut, un plafond mémoire par isolat de l'ordre de quelques dizaines de mégaoctets. Rien de tout cela n'est une limitation que nous contournons. C'est la raison pour laquelle ce service peut être digne de confiance pour détenir votre droit d'accès :

no raw UDP or TCP sockets
no long-lived process — execution is request-scoped
128 MB per isolate
a few MB, compressed, is the entire deployable

Une machine construite ainsi ne peut pas terminer un tunnel UDP à état — pas « pas encore », structurellement. Les serveurs qui transportent réellement votre trafic forment donc une flotte séparée, sur une infrastructure séparée, et les deux côtés se rencontrent à travers une seule chose : un ticket. Votre appareil en demande un au service Workers et reçoit en retour une valeur signée mais non lue — la signature est produite sur un numéro que le signataire ne voit jamais, si bien que le ticket que vous présentez plus tard ne peut pas être relié à la requête qui l'a délivré. Il prouve quel palier l'a acheté. Il ne dit pas quel appareil, et il ne dit pas qui vous êtes.

C'est ce qui rend le numéro de compte aussi anodin qu'il doit l'être. Il n'existe aucune colonne dans ce système qui associe le numéro de compte à un serveur de sortie ou à une adresse depuis laquelle vous vous êtes connecté — pas « nous choisissons de ne pas regarder » : la colonne n'existe pas, et une vérification de build échoue si l'une est ajoutée. Il existe une exception plus étroite et délibérée, et elle concerne l'appareil, pas le numéro : tant qu'un ticket est actif, une ligne associe le hash de la clé de votre appareil à un hash de la session à laquelle il appartient, ce qui permet de décompter un ticket utilisé de votre quota et de couper un appareil révoqué en pleine session. Cette ligne est supprimée environ un jour après la fin de la session, plus tôt si elle se solde rapidement, et elle ne comporte aucun champ pour une sortie ou une adresse — appareil et session, rien d'autre. Si vous avez associé un appareil à un compte, cette association est la limite de la portée ; le numéro de compte lui-même ne touche jamais une ligne de session. Le service qui voit réellement votre trafic n'apprend jamais le numéro, tout simplement.

Ce que cela coûte, dit plutôt que caché

Rien de tout cela n'est gratuit. Le numéro est affiché une seule fois et n'est stocké nulle part de notre côté ; le perdre alors qu'aucun appareil ne l'a plus rattaché signifie qu'il n'existe rien pour le récupérer, car rien d'autre ne vous identifie pour le récupérer. Une association peut être défaite : un appareil peut se déconnecter lui-même du compte, et tout autre appareil du compte peut le retirer (un compte accepte jusqu'à dix appareils ; un appareil arrivé depuis moins de 7 jours ne peut pas retirer les plus anciens, et un routeur ne peut pas retirer d'autres appareils). Ce qui ne se défait pas, c'est la perte du numéro : il n'existe pas de réinitialisation de mot de passe, car elle nécessiterait de prouver que la demande vient bien du véritable titulaire du compte, et tout l'objectif de conception était de ne jamais collecter quoi que ce soit qui puisse le prouver.

C'est un vrai compromis, pas une note de bas de page, et nous préférons que vous le sachiez dès le départ plutôt que vous ne le découvriez au moment où cela compte.

Tous les articles

Français
Posez-nous vos questions