¿Cómo funciona la contraseña de un solo uso (OTP)?
En este artículo, presentaremos dos métodos diferentes de contraseña de un solo uso: correo electrónico/teléfono + código de verificación y código dinámico.
A medida que ha evolucionado internet, hemos estado utilizando una amplia gama de servicios en línea para satisfacer casi todas nuestras necesidades. El primer paso para usar estos servicios es a menudo el registro y el inicio de sesión. Cuando se trata de registro e inicio de sesión, la autenticación con ID de usuario y contraseña sigue siendo ampliamente utilizada, incluso después de más de tres décadas desde los días de usar computadoras de escritorio independientes que no podían conectarse a internet.
En el pasado, quizás solo necesitábamos recordar la contraseña de nuestra cuenta de correo electrónico, pero ahora a menudo utilizamos docenas o incluso cientos de servicios en línea, y no podemos usar la misma contraseña para todos ellos (si se compromete la contraseña de una cuenta, todas las cuentas que usan la misma contraseña estarán en riesgo). Como resultado, el inicio de sesión sin contraseña se está volviendo cada vez más popular y gradualmente se está convirtiendo en el enfoque principal.
Hay muchos métodos diferentes para autenticación sin contraseña, incluidos, entre otros, el inicio de sesión social, el correo electrónico/teléfono + código de verificación y el uso de aplicaciones autenticadoras con contraseñas dinámicas. Estos dos últimos métodos pueden clasificarse como contraseñas de un solo uso (OTPs).
¿Qué es la contraseña de un solo uso (OTP)?
Una OTP es una secuencia de caracteres generada automáticamente que solo es válida para una única sesión de inicio de sesión o un período corto de tiempo. Debido a que una OTP solo puede usarse una vez, puede prevenir el riesgo de fuga de credenciales, como una contraseña perdida o robada.
En teoría, una OTP puede ser una cadena aleatoria de caracteres de cierta longitud, incluyendo letras mayúsculas y minúsculas, e incluso símbolos especiales. Pero por el bien de la experiencia del usuario, la mayoría de los servicios usan solo números cuando utilizan OTPs.
Correo electrónico / teléfono + código de verificación
Muchos sitios web requieren que verifiques tu identidad enviando un código de verificación (o código de acceso) al correo electrónico o número de teléfono que has registrado.
Imagina que Jack y Joe están jugando a un juego de adivinanzas, donde Jack piensa en un número entre 0 y 999, y le da a Joe tres oportunidades para adivinar el número en un minuto. Aparte de conocer el rango del número, Joe no tiene otra información.
Todos sabemos que es casi imposible para Joe adivinar el número correctamente en un minuto usando solo tres intentos.
Correo electrónico / teléfono + código de verificación funciona bajo el mismo principio: el código de verificación es generalmente válido durante un período muy corto, generalmente no más de 10 minutos (similar a Jack dando a Joe "un minuto" para adivinar el número). Además, la API o método para verificar el código de verificación generalmente tiene un límite de tasa para prevenir ataques de fuerza bruta en el código de acceso (como Jack solo dando a Joe "tres oportunidades").
Para los posibles atacantes, es casi imposible descifrar este método. Sin embargo, el sistema le dice al usuario el código de verificación a través de un canal de confianza (correo electrónico o teléfono), permitiendo al usuario verificarlo directamente.
Código dinámico
El código dinámico, también conocido como OTP basado en el tiempo (TOTP), es "dinámico" en el sentido de que cambia con el tiempo. Generalmente, si una aplicación web utiliza TOTP, seguirá RFC6238 - TOTP: Algoritmo de Contraseña de Un Solo Uso Basado en el Tiempo.
Contraseña de un solo uso basada en hash
Antes de introducir TOTP, necesitamos explicar brevemente RFC4226 - HOTP: Un Algoritmo de Contraseña de Un Solo Uso Basado en HMAC (HMAC es un algoritmo de hash). El algoritmo HOTP funciona de la siguiente manera:
-
Secreto: HOTP requiere una clave secreta compartida K, que es la misma entre el servidor y el cliente.
-
Contador: El núcleo de HOTP es un contador C, que se incrementa cada vez que se genera una nueva contraseña.
-
Cálculo HMAC:
-
Usar HMAC-SHA-1 (u otras funciones de hash) para calcular el código de autenticación:
-
Aquí, H es un valor hash de 160 bits.
-
-
Truncamiento: Extraer una parte del valor hash H para generar la OTP. Suponiendo que queremos una OTP de 6 dígitos, el proceso es el siguiente:
- Extraer el último byte de H como el truncamiento de desplazamiento O.
- Extraer los 4 bytes comenzando desde O, convertirlos en un entero T.
- Tomar los últimos d dígitos de T, es decir, OTP = T mod 10^d.
En resumen, la fórmula de HOTP es:
donde d es la longitud deseada de la OTP (generalmente 6-8 dígitos).
Contraseña de un solo uso basada en el tiempo
TOTP es una extensión de HOTP, donde el contador se reemplaza con un paso de tiempo. Utiliza el tiempo actual para generar un código de verificación dinámico, por lo que la OTP expirará automáticamente con el tiempo. El principio de funcionamiento es el siguiente:
-
Paso de tiempo: TOTP utiliza el tiempo actual T en lugar del contador HOTP C. El paso de tiempo es un intervalo de tiempo fijo establecido (generalmente 30 segundos).
- Por ejemplo, suponiendo que el paso de tiempo es de 30 segundos, y la marca de tiempo Unix actual es T. El contador TOTP se calcula como: T' = T / paso_de_tiempo
- Donde T′ es el contador de paso de tiempo, en unidades de 30 segundos.
-
Generar OTP: Sustituir T′ en el algoritmo HOTP para generar la OTP:
-
Actualización dinámica: Dado que TOTP se basa en el paso de tiempo, el OTP cambia con el tiempo, por lo que el servidor puede verificar su validez siempre que el OTP esté dentro de la ventana de tiempo válida.
En resumen, la fórmula de TOTP es:
Basado en nuestra experiencia usando aplicaciones autenticadoras, podemos sincronizar el valor secreto entre el dispositivo y el servidor escaneando un código QR o copiando y pegando directamente, y luego necesitamos ingresar el código dinámico actual una vez para asegurar que el valor secreto sea el mismo.
En los primeros días de uso de dispositivos móviles, podríamos encontrar que el tiempo en diferentes dispositivos no era el mismo, y tendríamos que ajustar manualmente el tiempo en los dispositivos periódicamente. En los últimos años, casi todos los dispositivos utilizan el servicio de tiempo de red (NTP) para sincronizar y actualizar regularmente el tiempo del dispositivo. Incluso si el reloj del dispositivo no es completamente preciso, las actualizaciones frecuentes pueden asegurar que el tiempo sea razonablemente consistente entre diferentes dispositivos. Basado en esta suposición, el código dinámico aún puede usarse incluso si el dispositivo está desconectado, mientras que sería difícil recibir un código de verificación en un estado offline.
Notas finales
En este artículo, hemos presentado dos métodos diferentes de contraseña de un solo uso: correo electrónico/teléfono + código de verificación y código dinámico.
Correo electrónico/teléfono + código de verificación se basa en la infraestructura de comunicación y el servicio de correo electrónico o mensajes cortos (SMS) de terceros para implementarse; el código dinámico no depende de servicios externos e instalaciones de comunicación, y puede usarse offline.
Logto, como un servicio IAM (Gestión de Identidad y Acceso) popular, poderoso y altamente extensible, admite ambos métodos OTP, permitiendo a los usuarios elegir la solución que mejor se adapte a sus necesidades desde una perspectiva empresarial.