Google Authenticator es un autenticador basado en software (soft-token) que implementa un servicio de verificación de dos pasos (2FA). El siguiente diagrama proporciona detalles pero, ¿Cómo garantiza la seguridad?.
Hay dos etapas involucradas:
- Etapa 1: el usuario habilita la verificación en dos pasos de Google
- Etapa 2: el usuario usa el autenticador para iniciar sesión, etc.
Etapa 1
Pasos 1 y 2: Bob abre la página web para habilitar la verificación en dos pasos. El front-end solicita una clave secreta. El servicio de autenticación genera la clave secreta para Bob y la almacena en la base de datos del back-end.
Paso 3: el servicio de autenticación devuelve un URI a la interfaz. El URI está compuesto por el emisor de la clave, el nombre de usuario y la clave secreta. El URI se muestra en forma de código QR en la página web.
Paso 4: Bob luego usa Google Authenticator para escanear el código QR generado. La clave secreta se almacena en el autenticador del cliente.
Etapa 2
Pasos 1 y 2: Bob quiere iniciar sesión en un sitio web con la verificación de dos pasos de Google. Para esto, necesita la contraseña. Cada 30 segundos, Google Authenticator genera un tokende 6 dígitos mediante el algoritmo TOTP (contraseña de un solo uso basada en tiempo, según RFC 6238). Bob usa el token para ingresar al sitio web
La base del TOTP es una función hash, es decir, un procedimiento criptográfico. A partir de una contraseña secreta y de una marca de tiempo (en EPOCH – tiempo Unix) se forma una secuencia de caracteres codificada. La contraseña es conocida tanto para el usuario como para el servidor.
Pasos 3 y 4: El front-end envía la contraseña que Bob ingresa al back-end para la autenticación. El servicio de autenticación lee la clave secreta de la base de datos y genera un token de 6 dígitos utilizando el mismo algoritmo TOTP que el cliente.
Paso 5: el servicio de autenticación compara los dos token generados por el cliente y el servidor y devuelve el resultado de la comparación a la interfaz. Bob puede continuar con el proceso de inicio de sesión solo si los dos token coinciden.
¿Este mecanismo de autenticación es seguro?
¿Pueden otros obtener la clave secreta?
Necesitamos asegurarnos de que la clave secreta se transmita mediante HTTPS. El cliente del autenticador y la base de datos almacenan la clave secreta y debemos asegurarnos de que las claves secretas estén cifradas.
¿Los delincuentes informáticos pueden adivinar el token de 6 dígitos?
En principio no. El token tiene 6 dígitos, por lo que la contraseña generada tiene 1 millón de combinaciones y cambia cada 30 segundos. Si un atacante quieren adivinar el token cada 30 segundos, deben ingresar 30.000 combinaciones por segundo. Por eso, también debería haber un control de rate-limit para limitar la cantidad de intentos por segundo.