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 deployableUne 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.