¿Cómo sabe Google Authenticator exactamente qué código liberar tu cuenta?

Rene Fraga
17 minutos de lectura

Principales destacados

  • Google Authenticator no recibe un nuevo código de Google por internet cada vez que intentas iniciar sesión.
  • La aplicación y el servicio protegido comparten un secreto creado durante la configuración y usan la hora para calcular el código correcto.
  • Los números cambian regularmente porque el cálculo depende de una ventana de tiempo. Por eso, un código válido hoy deja de funcionar rápidamente.

Abres Google Authenticator, miras la pantalla y encuentras seis números que parecen completamente aleatorios. Escribes esa secuencia en el sitio o aplicación en la que estás intentando iniciar sesión y, unos segundos después, recibes la confirmación de que el código es correcto.

Pero existe una pregunta bastante curiosa detrás de este proceso: ¿cómo sabe Google que esos seis números son exactamente los mismos que aparecieron en tu celular?

La respuesta es más interesante que simplemente decir que la aplicación “envía el código a Google”.

En realidad, en una configuración tradicional basada en TOTP, el teléfono y el servicio pueden llegar al mismo resultado usando información que fue acordada previamente. No es necesario que Google envíe el número al teléfono en el momento en que estás iniciando sesión.

Por eso, incluso, Google Authenticator puede generar códigos aunque el dispositivo no tenga conexión a internet o servicio móvil.

Todo comienza cuando configuras Authenticator

Para entender su funcionamiento, hay que retroceder un poco, hasta el momento en que agregas una cuenta a Google Authenticator.

Durante esa configuración, la aplicación y el servicio que quieres proteger deben establecer una información secreta compartida. Esa información funciona como una especie de ingrediente secreto usado en la generación de los códigos.

Es común que esta configuración se realice mediante un código QR. Apuntas la cámara del celular al código y Authenticator pasa a tener la información necesaria para generar los códigos de esa cuenta.

A partir de ahí, la aplicación no necesita consultar un servidor cada vez que abres la pantalla.

Este detalle es fundamental.

Si Authenticator tuviera que contactar a un servidor cada vez que mostrara un código, sería necesario tener conexión a internet. Pero no es así como funciona este modelo.

La aplicación ya posee la información necesaria para realizar el cálculo localmente.

Del otro lado, el servicio que protege la cuenta también tiene los datos necesarios para verificar si el código presentado por el usuario corresponde al que debería estar mostrándose en ese momento.

Es como si dos personas recibieran la misma fórmula secreta. No necesitan hablar todo el tiempo. Si usan los mismos ingredientes y la misma referencia de tiempo, pueden llegar al mismo resultado.

Y ahí es justamente donde entra una de las partes más interesantes del sistema.

El reloj es una pieza fundamental

Google Authenticator utiliza un mecanismo conocido como TOTP, sigla en inglés de “Time-Based One-Time Password”, o contraseña de un solo uso basada en el tiempo.

El estándar técnico de este sistema fue documentado por el IETF en la RFC 6238. Define un método en el que un secreto compartido se combina con un valor calculado a partir de la hora actual.

En la configuración estándar descrita por TOTP, el tiempo se divide en intervalos de 30 segundos.

Esto significa que el reloj no está ahí solo para mostrar una cuenta regresiva junto a los números. Participa activamente en la generación del código.

De forma simplificada, podemos imaginar el proceso así:

secreto compartido + intervalo de tiempo actual = cálculo criptográfico = código

El proceso real es matemáticamente más complejo que esta representación, pero la idea central es esa.

La aplicación observa la hora actual, identifica en qué intervalo de tiempo se encuentra y combina esa información con el secreto asociado a la cuenta.

El resultado pasa por operaciones criptográficas y, al final, se convierte en una secuencia corta de números fácil de escribir.

El estándar TOTP define precisamente esta relación entre el secreto y un contador derivado del tiempo.

Por eso el código parece aleatorio.

No fue elegido manualmente ni es simplemente un número generado al azar por el teléfono.

Hay un cálculo detrás.

Pero ¿cómo puede Google saber el mismo número?

Esta es la parte que suele parecer mágica.

Imagina que Authenticator muestra:

482 731

Escribes esos seis números en la pantalla de inicio de sesión.

Google no necesita preguntarle a tu teléfono:

“¿Acabas de mostrar 482731?”

En su lugar, el sistema de autenticación puede realizar el cálculo correspondiente usando el secreto asociado a la configuración y el intervalo de tiempo actual.

Si el resultado esperado es 482731, el código se acepta.

El servidor no está “adivinando” el número.

Está verificando matemáticamente si el número que presentaste coincide con el resultado esperado.

Esta diferencia es importante porque ayuda a entender por qué el sistema puede funcionar sin que el código tenga que transmitirse por internet.

El teléfono calcula de un lado.

El servicio calcula del otro.

Ambos llegan al mismo resultado.

Es un poco como dos calculadoras que reciben exactamente los mismos datos y realizan la misma operación. Si nada está mal, el resultado será igual.

Solo que aquí hablamos de algoritmos criptográficos diseñados para hacer extremadamente difícil descubrir el secreto solo observando los códigos generados.

¿Por qué el código cambia todo el tiempo?

Ahora es fácil entender por qué ese número que aparece en tu celular desaparece poco después.

El código depende del intervalo de tiempo actual.

Cuando el período cambia, el valor usado en el cálculo también cambia. En consecuencia, el resultado final cambia.

Esto crea una característica importante: el código es temporal.

Puedes mirar Authenticator y ver un número válido en ese instante. Poco después, aparecerá otro.

El estándar TOTP establece 30 segundos como valor por defecto para el intervalo de tiempo, aunque los parámetros pueden variar según la implementación.

En la práctica, esto significa que alguien que vea un código antiguo no podrá reutilizarlo indefinidamente.

Ese es justamente uno de los objetivos de la autenticación basada en códigos temporales.

Incluso si una secuencia es descubierta, pierde utilidad cuando su ventana de validez termina.

Google recomienda que, cuando un código no funcione, el usuario verifique si fue ingresado antes de expirar y si la hora del dispositivo está correcta y sincronizada.

¿Y si el celular no tiene internet?

Aquí hay otra característica que suele sorprender.

Puedes poner el celular en modo avión, abrir Google Authenticator y, dependiendo de la configuración, seguirás viendo códigos generándose.

Esto ocurre porque la generación del código no depende de recibir un mensaje de Google en ese momento.

La aplicación ya tiene el secreto necesario y utiliza el reloj del dispositivo para determinar el intervalo actual.

Google informa que Authenticator puede generar códigos sin conexión a internet o servicio móvil.

Esto también explica una diferencia importante entre Authenticator y un código recibido por SMS.

Cuando recibes un código por mensaje de texto, existe comunicación con un sistema externo para que ese mensaje llegue a tu teléfono.

En Authenticator, el código puede calcularse directamente en el dispositivo.

Es una de las razones por las que la aplicación es tan útil cuando estás en un lugar sin señal o sin acceso a internet.

¿Qué pasa si el reloj del celular está mal?

Este es un detalle pequeño, pero muy importante.

Si el código depende del tiempo, el reloj también debe ser correcto.

Imagina que el servidor trabaja con un intervalo de tiempo, mientras tu celular cree que está en otro momento. Ambos pueden hacer cálculos diferentes.

Resultado: el código mostrado en el dispositivo puede no ser aceptado.

Por eso, Google recomienda verificar que la hora del dispositivo esté sincronizada cuando un código de Authenticator no funcione.

En versiones más recientes de la aplicación, la opción específica de corrección de hora dejó de existir en la versión 7.0, y Authenticator pasó a usar la configuración de hora del propio sistema operativo.

Esto hace aún más importante mantener la fecha y la hora del dispositivo correctamente configuradas.

El código QR no es el código de acceso

Otro punto que puede confundir a quienes empiezan a usar Authenticator es el código QR.

Al configurar una cuenta, normalmente escaneas un código QR. Después de eso, la aplicación comienza a mostrar números que cambian regularmente.

Es tentador pensar que el QR contiene una lista de todos los códigos futuros.

No es la mejor forma de entender el proceso.

El código QR sirve para transportar la información necesaria para configurar el autenticador, incluyendo el secreto que se usará para generar los códigos.

A partir de ahí, la aplicación puede calcularlos a medida que pasa el tiempo.

Esto también explica por qué no existe una lista simple de “próximos códigos” dentro de la aplicación.

Los números se derivan durante el proceso.

¿Y por qué suelen ser seis números?

Existe una enorme cantidad de posibilidades que podrían usarse para representar el resultado de un cálculo criptográfico.

Pero pedirle a alguien que escriba una secuencia larga de caracteres sería muy incómodo.

Por eso, el sistema convierte el resultado en un código numérico corto.

El resultado es un equilibrio entre seguridad y practicidad.

Si fuera demasiado largo, sería difícil de escribir. Si fuera demasiado corto, habría menos combinaciones posibles.

En el modelo TOTP, el resultado criptográfico pasa por un proceso de truncamiento y se convierte en un valor numérico adecuado para autenticación. La especificación permite diferentes cantidades de dígitos, aunque los códigos de seis dígitos son muy comunes.

Así, esos seis números aparentemente simples son solo la parte visible de un proceso matemático mucho mayor.

El código no es tu segunda contraseña permanente

También es importante no tratar el código de Authenticator como si fuera una contraseña común.

Una contraseña tradicional puede permanecer igual durante meses o años, hasta que decidas cambiarla.

El código de Authenticator es diferente.

Es temporal y de un solo uso dentro de esa ventana de tiempo.

En la verificación en dos pasos, funciona como una segunda prueba de que la persona que intenta acceder tiene acceso al dispositivo o al autenticador configurado.

Google explica que la verificación en dos pasos añade una capa de seguridad en caso de que la contraseña sea robada.

Así, incluso si alguien descubre tu contraseña, todavía puede existir una barrera adicional para acceder a la cuenta.

Esa es justamente la idea de los “dos factores”: no depender de una sola información para probar quién eres.

Google Authenticator también ha cambiado con el tiempo

El funcionamiento actual de la aplicación tiene otro detalle importante.

Google permite la sincronización de los códigos de Authenticator entre dispositivos cuando el usuario inicia sesión en su cuenta de Google. Según la documentación de la empresa, los códigos están cifrados en tránsito y en reposo dentro de sus sistemas.

Esto resuelve un problema común: cambiar de teléfono y descubrir que los códigos quedaron atrapados en el dispositivo antiguo.

Aun así, existen opciones para usar Authenticator sin una cuenta de Google, manteniendo los códigos solo en el dispositivo.

La elección depende de cómo cada persona prefiera administrar sus códigos y del nivel de comodidad que desee.

Google también recomienda mantener métodos adicionales de verificación configurados para evitar perder el acceso a la cuenta.

¿Y si alguien ve el código?

Aquí está una de las mayores limitaciones del sistema.

El hecho de que el código cambie constantemente no significa que sea imposible de robar.

Si alguien logra convencerte de que le des el código mientras aún es válido, puede intentar usarlo en un ataque.

Por eso, Google advierte que nunca se deben compartir códigos de verificación y afirma que no llama para solicitarlos.

Este tipo de estafa puede ocurrir cuando alguien se hace pasar por una empresa, soporte técnico o incluso un conocido.

La persona puede decir algo como: “Te enviaré un código para confirmar tu identidad. Pásame los números que te aparezcan”.

El problema es que ese código puede estar siendo usado por un atacante en un intento de inicio de sesión.

Por eso, la regla es simple: el código de verificación es información privada y no debe compartirse.

Entonces, hay una pequeña “magia” matemática detrás de la pantalla

Al final, Google Authenticator no necesita saber de antemano qué código vas a usar.

Lo calcula.

El servicio que protege la cuenta también lo calcula.

Ambos utilizan información previamente establecida y una referencia de tiempo común. Cuando los resultados coinciden, el sistema entiende que el código es válido.

La gran idea es hacer esto de una forma simple para el usuario, pero muy difícil de reproducir para alguien que no tiene el secreto necesario.

Detrás de una pantalla muy simple existe una combinación de criptografía, sincronización de tiempo y algoritmos matemáticos.

Y quizá esta sea la parte más curiosa: cuando abres la aplicación y ves seis números cambiando en la pantalla, tu teléfono no está recibiendo una contraseña lista desde Google.

Está calculando, en ese mismo instante, una respuesta que el sistema de autenticación también puede calcular.

Por eso el número puede parecer aleatorio, cambiar constantemente y aun así ser exactamente el código que Google espera.

Una pequeña secuencia de seis dígitos, en realidad, esconde una operación mucho más sofisticada de lo que parece.

Seguir:
Renê Fraga es fundador de Google Discovery y editor en jefe de Eurisko, un ecosistema editorial independiente dedicado a la tecnología, la ciencia y la innovación. Profesional del marketing digital, con posgrado por la ESPM, sigue de cerca a Google desde la década de 2000 y escribe desde hace más de 20 años sobre tecnología, productos digitales e inteligencia artificial. Fundó Google Discovery en 2006, convirtiéndolo en uno de los principales sitios especializados en Google en Brasil, y fue columnista de TechTudo (Globo.com).
No hay comentarios