OTPW es un sistema de contraseñas de un solo uso desarrollado para la autenticación en sistemas operativos tipo Unix por Markus Kuhn . [ 1 ] La contraseña real de un usuario no se transmite directamente a través de la red . En cambio, se crea una serie de contraseñas de un solo uso a partir de un conjunto corto de caracteres (secreto constante) y un conjunto de tokens de un solo uso. Dado que cada contraseña de un solo uso solo puede utilizarse una vez, las contraseñas interceptadas por un analizador de contraseñas o un registrador de pulsaciones de teclas no son útiles para un atacante.
OTPW es compatible con Unix y Linux (mediante módulos de autenticación conectables ), OpenBSD , NetBSD y FreeBSD , y se puede utilizar una implementación genérica de código abierto para habilitar su uso en otros sistemas.
OTPW, al igual que otros sistemas de contraseñas de un solo uso, es vulnerable a ataques de intermediario si se utiliza de forma aislada. Esto podría solucionarse, por ejemplo, implementando un protocolo de seguridad como SSL , SPKM o similar, que autentique el servidor y proporcione seguridad punto a punto entre el cliente y el servidor.
Diseño y diferencias con otras implementaciones
A diferencia de S/KEY , OTPW no se basa en el esquema de Lamport , donde cada contraseña de un solo uso es el valor hash unidireccional de su sucesora. Las listas de contraseñas basadas en el esquema de Lamport presentan el problema de que si un atacante puede ver una de las últimas contraseñas de la lista, puede calcular todas las anteriores a partir de ella. Además, no almacena las contraseñas cifradas, como sugiere Aviel D. Rubin en Independent One-Time Passwords , para evitar que el sistema albergue archivos con información confidencial.
En OTPW, el valor hash unidireccional de cada contraseña se almacena en un archivo potencialmente legible para todos los usuarios en su directorio personal . Por ejemplo, los valores hash de 300 contraseñas (una página A4 típica) solo requieren un archivo .otpw de cuatro kilobytes , una cantidad de espacio de almacenamiento generalmente insignificante.
Las contraseñas son números aleatorios generados cuidadosamente. El generador de números aleatorios se basa en la función hash segura RIPEMD-160 y se inicializa mediante el hash de la salida de varios comandos de shell . Esto proporciona imprevisibilidad en forma de semilla de números aleatorios del sistema, tiempos de acceso a archivos importantes del sistema, historial de uso del host, etc. El estado aleatorio es la salida de 160 bits de la función hash. El estado aleatorio se itera después de cada uso concatenando el estado anterior con la salida actual del temporizador de alta resolución y aplicando el hash al resultado nuevamente. Los primeros 72 bits de la salida hash se codifican con un esquema base64 modificado para producir contraseñas legibles, mientras que los 88 bits restantes representan el estado interno confidencial del generador de números aleatorios.
En muchas fuentes, los caracteres 0 y O o 1 y l e I son difíciles de distinguir, por lo que la codificación base64 modificada reemplaza los tres caracteres 01l por los correspondientes : , = y % . Si, por ejemplo, el usuario confunde un cero con una O mayúscula, la rutina de verificación de contraseña lo corregirá automáticamente. S/KEY utiliza secuencias de palabras cortas en inglés como contraseñas. OTPW utiliza por defecto una codificación base64, ya que permite imprimir más contraseñas en una sola página, con la misma entropía de contraseña . Además, un espía humano promedio necesita más de 30 segundos para escribir una cadena aleatoria de 12 caracteres en la memoria a corto plazo, lo que proporciona una buena protección contra las miradas rápidas que un atacante podría tener a una lista de contraseñas. Por otro lado, las listas de palabras cortas son mucho más rápidas de memorizar. OTPW puede manejar algoritmos de generación de contraseñas arbitrarios, siempre que la longitud de la contraseña sea fija. En la versión actual, el programa otpw-gen puede generar contraseñas codificadas en base64 (opción -p) y en palabras de 4 letras (opción -p1) con una entropía especificada por el usuario (opción -e).
La contraseña de prefijo garantiza que ni el robo de la lista de contraseñas ni la interceptación de la comunicación por sí solas permitan el acceso no autorizado. Si bien la seguridad que ofrece OTPW no es comparable a la de un sistema de desafío-respuesta en el que el usuario dispone de una calculadora especial protegida con PIN para generar la respuesta, un trozo de papel es mucho más portátil, resistente y económico que una calculadora especial. OTPW se diseñó para una amplia base de usuarios, para quienes un dispositivo adicional con batería resulta inconveniente o poco rentable, y que, por lo tanto, siguen utilizando contraseñas Unix convencionales.
A diferencia de lo sugerido en la RFC 1938, OTPW no bloquea más de una contraseña de un solo uso a la vez. Si lo hiciera, un atacante podría agotar fácilmente su lista de contraseñas desbloqueadas y obligarlo a no iniciar sesión o a usar la contraseña de inicio de sesión Unix habitual. Por lo tanto, OTPW bloquea solo una contraseña y para todos los inicios de sesión posteriores se emite un desafío triple . Si quedan más de 100 contraseñas sin usar disponibles, entonces hay más de un millón de desafíos diferentes y un atacante tiene muy pocas posibilidades de realizar un ataque de carrera exitoso mientras el usuario autorizado termina de ingresar la contraseña.
Uso
La autenticación mediante contraseña de un solo uso con el paquete OTPW se realiza a través del archivo .otpw, ubicado en el directorio personal del usuario. No se guarda ningún estado en archivos del sistema, por lo que OTPW no introduce ningún programa root con permisos setuid . Mientras un usuario no tenga el archivo .otpw en su directorio personal, la función de contraseña de un solo uso no estará activada para él.
El usuario que desee configurar la función de contraseña de un solo uso solo tiene que ejecutar el programa otpw-gen . El programa le pedirá una contraseña de prefijo y, a continuación, escribirá una lista de contraseñas en la salida estándar. La contraseña de prefijo elegida debe memorizarse y la lista de contraseñas puede formatearse e imprimirse.
Cuando se utiliza la autenticación de contraseña de un solo uso, la solicitud de contraseña irá seguida de un número de contraseña de 3 dígitos. Introduzca primero la contraseña de prefijo que se le proporcionó a otpw-gen , seguida inmediatamente (sin pulsar Intro) de la contraseña con el número solicitado de la lista de contraseñas impresa:
Iniciar sesión: kuhn Contraseña 019: geHeimOdAkH62c
En este ejemplo, geHeim era el prefijo de la contraseña .
Un atacante astuto podría observar cómo se introduce la contraseña e intentar aprovechar que los ordenadores envían datos mucho más rápido de lo que los usuarios tardan en escribirla. En los cientos de milisegundos que el usuario necesita para pulsar la tecla Intro tras el último carácter, un atacante podría, mediante una conexión paralela al mismo ordenador, enviar el código de la tecla Intro más rápido que el usuario.
Para evitar este tipo de ataque de "carrera por la última clave" , cualquier intento de inicio de sesión que se produzca simultáneamente con otro intento requerirá que se introduzcan tres contraseñas de un solo uso, ninguna de las cuales será la contraseña que quede bloqueada por el intento de autenticación simultáneo.
Iniciar sesión: kuhn Contraseña 022/000/004: geHeimQ=XK4I7wIZdBbqyHA5z9japt
Véase también
Referencias
- ↑ Kuhn, Markus (2014-08-07). "OTPW – un paquete de inicio de sesión con contraseña de un solo uso" . Departamento de Ciencias de la Computación y Tecnología de la Universidad de Cambridge . Recuperado el 2023-09-06 .
Enlaces externos
- Software criptográfico
- autenticación de contraseña