Blog

Por qué tu inicio de sesión es un número, no un correo electrónico

La cuenta que no necesitas es un número de 128 bits, emitido por una máquina que estructuralmente no puede abrir tu túnel. Esto es por qué ambas cosas tienen que ser ciertas a la vez.

Publicado el 5 de septiembre de 2026 · Actualizado el 16 de octubre de 2026

La mayoría de las apps piden un correo electrónico antes de preguntar para qué has venido en realidad. ForestVPN no pide ni correo electrónico ni contraseña: ábrela, pulsa conectar. Si quieres una suscripción en más de un dispositivo, en su lugar obtienes un número de 32 caracteres, mostrado una sola vez, y eso es todo el sistema de inicio de sesión.

No es una cuestión de estilo. Es lo que queda cuando dos requisitos chocan entre sí, y lo interesante es cuál de los dos gana.

Dónde suele vivir el inicio de sesión

Un botón de «Iniciar sesión con Apple» o «Iniciar sesión con Google» es una redirección al dominio de otra empresa — appleid.apple.com, accounts.google.com, un inquilino de *.auth0.com. En un teléfono con una ruta abierta hacia esos hosts, esa redirección es fontanería invisible.

No podemos dar por hecho que esa ruta está abierta, porque parte del trabajo de este producto es seguir funcionando en redes que solo dejan a un dispositivo llegar a una lista corta y fija de hosts. Todo el modelo de seguridad de nuestro propio proxy de relé es esa lista — tres nombres, api., sess. y catalog.fvpn.net, con coincidencia exacta. Ampliarla para admitir un proveedor de identidad tras una CDN significa admitir un proveedor cuya misma CDN da la cara por una gran parte de internet, lo que convierte un relé estrecho en uno de propósito general. Y en iOS, en concreto, la vista web de inicio de sesión de un proveedor de identidad externo se ejecuta fuera de proceso — un ajuste de proxy a nivel de app no tiene forma de alcanzarla y enrutarla a través de nada que operemos nosotros. La redirección falla precisamente en el lugar donde más falta le hace funcionar.

Así que el número no es la opción amigable que elegimos en lugar de la habitual. Es la opción que sigue funcionando bajo la restricción que más importaba.

La otra mitad: nadie que tenga el número puede ver tu tráfico

Dicho de otra forma: el número de cuenta es una credencial acuñada por un servicio que se ejecuta en Cloudflare Workers — ejecución acotada a cada solicitud, sin proceso de larga duración, sin sockets en bruto, con un techo de memoria por aislado de dos dígitos de megabytes. Nada de eso es una limitación que sorteamos. Es la razón por la que se puede confiar en ese servicio para guardar tu derecho de uso:

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

Una máquina construida así no puede terminar un túnel UDP con estado — no es «todavía no», es estructural. Así que los servidores que realmente transportan tu tráfico son una flota separada, en infraestructura separada, y los dos lados se encuentran a través de exactamente una cosa: un ticket. Tu dispositivo le pide uno al lado de Workers y recibe un valor firmado pero no leído — la firma se produce sobre un número que quien firma nunca llega a ver, así que el ticket que presentas después no se puede rastrear hasta la solicitud que lo acuñó. Demuestra qué nivel lo pagó. No dice qué dispositivo, y no dice quién eres tú.

Eso es lo que hace que el número de cuenta sea aburrido de la forma en que necesita serlo. No hay ninguna columna en este sistema que guarde el número de cuenta junto a un servidor de salida o una dirección desde la que te conectaste — no es que «elijamos no mirar», la columna no existe, y una comprobación de compilación falla si se añade una. Hay una excepción más estrecha y deliberada, y tiene que ver con el dispositivo, no con el número: mientras un ticket está activo, una fila registra el hash de la clave de tu dispositivo junto al hash de la sesión a la que pertenece, que es lo que permite cargar un ticket gastado contra tu cuota y cortar un dispositivo revocado a mitad de sesión. Esa fila se elimina en torno a un día después de que termine la sesión, antes si se liquida rápido, y no tiene ningún campo para una salida o una dirección — solo dispositivo y sesión, nada más. Si has vinculado un dispositivo a una cuenta, ese vínculo es hasta dónde llega el alcance; el propio número de cuenta nunca toca una fila de sesión. El servicio que sí ve tu tráfico nunca llega a conocer el número, para empezar.

Lo que cuesta, dicho y no escondido

Nada de esto sale gratis. El número se muestra una sola vez y no se guarda en ningún sitio de nuestro lado; si lo pierdes sin que ningún dispositivo siga vinculado a él, no hay nada con qué recuperarlo, porque no existe ninguna otra cosa que te identifique contra la que recuperarlo. Un vínculo se puede deshacer: un dispositivo puede cerrar sesión por sí mismo y cualquier otro dispositivo de la cuenta puede quitarlo (una cuenta admite hasta diez dispositivos; un dispositivo que se unió en los últimos 7 días no puede quitar los más antiguos, y un router no puede quitar otros dispositivos). Lo que no se puede deshacer es perder el número: no existe el restablecimiento de contraseña, porque eso necesitaría una forma de demostrar que la solicitud vino del verdadero propietario de la cuenta, y todo el sentido del diseño era no recopilar jamás nada que pudiera demostrarlo.

Es una concesión real, no una nota al pie, y preferimos que lo sepas de antemano a que lo descubras justo en el momento en que importa.

Todas las entradas

Español
Pregúntanos lo que sea