LLAVE S / - S/KEY

S / KEY es un sistema de contraseña de un solo uso desarrollado para la autenticación en sistemas operativos similares a Unix , especialmente desde terminales tontas o computadoras públicas que no son de confianza en las que no se desea ingresar una contraseña a largo plazo. La contraseña real de un usuario se combina en un dispositivo fuera de línea con un conjunto corto de caracteres y un contador decreciente para formar una contraseña de un solo uso. Debido a que cada contraseña solo se usa una vez, son inútiles para los rastreadores de contraseñas .

Debido a que el conjunto corto de caracteres no cambia hasta que el contador llega a cero, es posible preparar una lista de contraseñas de un solo uso, en orden, que puede llevar el usuario. Alternativamente, el usuario puede presentar la contraseña, los caracteres y el valor del contador deseado a una calculadora local para generar la contraseña de un solo uso adecuada que luego se puede transmitir a través de la red sin cifrar. La última forma es más común y prácticamente equivale a la autenticación de desafío-respuesta .

S / KEY es compatible con Linux (a través de módulos de autenticación conectables ), OpenBSD , NetBSD y FreeBSD , y se puede usar una implementación genérica de código abierto para permitir su uso en otros sistemas. OpenSSH también implementa S / KEY desde la versión OpenSSH 1.2.2 lanzada el 1 de diciembre de 1999. Una implementación común se llama OPIE . S / KEY es una marca comercial de Telcordia Technologies , anteriormente conocida como Bell Communications Research (Bellcore).

S / KEY también se conoce a veces como el esquema de Lamport , en honor a su autor, Leslie Lamport . Fue desarrollado por Neil Haller, Phil Karn y John Walden en Bellcore a finales de los 80. Con la expiración de las patentes básicas sobre criptografía de clave pública y el uso generalizado de computadoras portátiles que ejecutan SSH y otros protocolos criptográficos que pueden asegurar una sesión completa, no solo la contraseña, S / KEY está cayendo en desuso. Los esquemas que implementan la autenticación de dos factores , en comparación, están creciendo en uso.

Generación de contraseña

El servidor es la computadora que realizará la autenticación.

Generación de contraseña S / KEY
  1. Esta etapa comienza con una clave secreta W . Este secreto puede ser proporcionado por el usuario o puede ser generado por una computadora. De cualquier manera, si se revela este secreto, la seguridad de S / KEY se verá comprometida.
  2. Una función hash criptográfica H se aplica n veces a W , produciendo así una cadena hash de n contraseñas de un solo uso. Las contraseñas son el resultado de la aplicación de la función hash criptográfica:
    Alto ( ancho ), alto ( alto ( ancho )), ..., alto norte ( ancho ).
  3. El secreto inicial W se descarta.
  4. El usuario recibe las n contraseñas, impresas en orden inverso:
    H n ( W ), H n -1 ( W ), ..., H ( H ( W )), H ( W ).
  5. Las contraseñas H ( W ), H ( H ( W )), ..., H n −1 ( W ) se descartan del servidor. Solo la contraseña H n ( W ), la que está en la parte superior de la lista de usuarios, se almacena en el servidor.

Autenticación

Autenticación S / KEY

Después de la generación de la contraseña, el usuario tiene una hoja de papel con n contraseñas. Si n es muy grande, almacenar todas las n contraseñas o calcular la contraseña dada a partir de H ( W ) se vuelve ineficaz. Existen métodos para calcular de manera eficiente las contraseñas en el orden requerido, utilizando solo cálculos hash por paso y almacenando contraseñas.

Más idealmente, aunque quizás con menos frecuencia en la práctica, el usuario puede llevar un dispositivo informático pequeño, portátil, seguro y no conectado a la red capaz de regenerar cualquier contraseña necesaria dada la contraseña secreta, la sal y la cantidad de iteraciones del hash requeridas. los dos últimos los proporciona convenientemente el servidor que solicita autenticación para iniciar sesión.

En cualquier caso, la primera contraseña será la misma contraseña que tiene almacenada el servidor. Esta primera contraseña no se utilizará para la autenticación (el usuario debe tachar esta contraseña en la hoja de papel), la segunda se utilizará en su lugar:

  • El usuario proporciona al servidor la segunda contraseña pwdde la lista y la borra.
  • El servidor intenta calcular H ( pwd ), donde pwd es la contraseña proporcionada. Si H ( pwd ) produce la primera contraseña (la que ha almacenado el servidor), entonces la autenticación es exitosa. El servidor almacenará pwd como referencia actual.

Para autenticaciones posteriores, el usuario proporcionará passwordi . (La última contraseña de la lista impresa, contraseña n , es la primera contraseña generada por el servidor, H ( W ), donde W es el secreto inicial). El servidor calculará H ( contraseña i ) y comparará el resultado con la contraseña i −1 , que se almacena como referencia en el servidor.

Seguridad

La seguridad de S / KEY se basa en la dificultad de revertir las funciones de hash criptográficas . Suponga que un atacante logra hacerse con una contraseña que se utilizó para una autenticación exitosa. Suponiendo que se trata de la contraseña i , esta contraseña ya es inútil para las autenticaciones posteriores, porque cada contraseña solo se puede utilizar una vez. Sería interesante para el atacante averiguar la contraseña i −1 , porque esta contraseña es la que se utilizará para la próxima autenticación.

Sin embargo, esto requeriría invertir la función hash que produjo la contraseña i −1 usando la contraseña i ( H ( contraseña i −1 ) = contraseña i ), lo cual es extremadamente difícil de hacer con las funciones hash criptográficas actuales .

Sin embargo, S / KEY es vulnerable a un ataque de hombre en el medio si se usa solo. También es vulnerable a ciertas condiciones de carrera , como cuando el software de un atacante rastrea la red para aprender los primeros N - 1 caracteres en la contraseña (donde N es igual a la longitud de la contraseña), establece su propia sesión TCP en el servidor y en forma rápida La sucesión prueba todos los caracteres válidos en la N -ésima posición hasta que uno tiene éxito. Estos tipos de vulnerabilidades se pueden evitar utilizando ssh , SSL , SPKM u otra capa de transporte cifrada.

Dado que cada iteración de S / KEY no incluye la sal o el recuento, es factible encontrar colisiones directamente sin romper la contraseña inicial. Tiene una complejidad de 2 64 , que se puede calcular previamente con la misma cantidad de espacio. La complejidad del espacio se puede optimizar almacenando cadenas de valores, aunque las colisiones pueden reducir la cobertura de este método, especialmente para cadenas largas.

Alguien con acceso a una base de datos S / KEY puede romperlos todos en paralelo con una complejidad de 2 64 . Si bien no obtendrían la contraseña original, podrían encontrar credenciales válidas para cada usuario. En este sentido, es similar a almacenar hashes de 64 bits sin sal de contraseñas sólidas y únicas.

El protocolo S / KEY puede realizar un bucle. Si se creara un bucle de este tipo en la cadena S / KEY, un atacante podría usar la clave del usuario sin encontrar el valor original y posiblemente sin avisar al usuario válido. El caso patológico de esto sería una OTP que se hash a sí misma.

Usabilidad

Internamente, S / KEY usa números de 64 bits . Para fines de usabilidad humana , cada número se asigna a seis palabras cortas, de uno a cuatro caracteres cada una, de un diccionario de 2048 palabras de acceso público. Por ejemplo, un número de 64 bits se asigna a "ROY HURT SKI FAIL GRIM KNEE".

Ver también

Referencias

enlaces externos