En seguridad informática , la autenticación desafío-respuesta es una familia de protocolos en los que una parte presenta una pregunta ("desafío") y la otra parte debe proporcionar una respuesta válida ("respuesta") para ser autenticada . [1]
El ejemplo más simple de un protocolo desafío-respuesta es la autenticación de contraseña , donde el desafío consiste en solicitar la contraseña y la respuesta válida es la contraseña correcta.
Un adversario que puede espiar una autenticación de contraseña puede autenticarse a sí mismo reutilizando la contraseña interceptada. Una solución es emitir múltiples contraseñas, cada una de ellas marcada con un identificador. El verificador puede entonces presentar un identificador y el verificador debe responder con la contraseña correcta para ese identificador. Suponiendo que las contraseñas se eligen de forma independiente, un adversario que intercepta un par de mensajes de desafío-respuesta no tiene pistas que le ayuden con un desafío diferente en un momento diferente.
Por ejemplo, cuando no hay otros métodos de seguridad de las comunicaciones disponibles, el ejército estadounidense utiliza el sistema de cifrado numérico TRIAD AKAC-1553 para autenticar y cifrar algunas comunicaciones. TRIAD incluye una lista de códigos de desafío de tres letras, que el verificador debe elegir al azar, y respuestas aleatorias de tres letras a dichos códigos. Para mayor seguridad, cada conjunto de códigos solo es válido durante un período de tiempo determinado, que normalmente es de 24 horas.
Otra técnica básica de desafío-respuesta funciona de la siguiente manera. Bob controla el acceso a algún recurso y Alice busca entrar. Bob lanza el desafío "52w72y". Alice debe responder con la cadena de caracteres que "encaje" con el desafío lanzado por Bob. El "ajuste" se determina mediante un algoritmo definido de antemano y conocido tanto por Bob como por Alice. La respuesta correcta podría ser tan simple como "63x83z", con el algoritmo cambiando cada carácter del desafío utilizando un cifrado César . En realidad, el algoritmo sería mucho más complejo. Bob lanza un desafío diferente cada vez y, por lo tanto, conocer una respuesta correcta anterior (incluso si no está ofuscada por los medios de comunicación) no permite que un adversario determine la respuesta correcta actual.
Los protocolos de desafío-respuesta también se utilizan en aplicaciones no criptográficas. Los CAPTCHA , por ejemplo, están pensados para permitir que los sitios web y las aplicaciones determinen si una interacción fue realizada por un usuario genuino en lugar de un web scraper o un bot . En los primeros CAPTCHA, el desafío enviado al usuario era una imagen distorsionada de un texto, y el usuario respondía transcribiendo el texto. La distorsión fue diseñada para dificultar el reconocimiento óptico de caracteres (OCR) automatizado y evitar que un programa informático se hiciera pasar por un humano.
La autenticación no criptográfica era generalmente adecuada en los días anteriores a Internet , cuando el usuario podía estar seguro de que el sistema que solicitaba la contraseña era realmente el sistema al que intentaba acceder y de que era probable que nadie estuviera espiando el canal de comunicación . Para abordar el problema del canal inseguro, es necesario un enfoque más sofisticado. Muchas soluciones criptográficas implican una autenticación bidireccional; tanto el usuario como el sistema deben verificar que conocen el secreto compartido (la contraseña), sin que el secreto se transmita nunca sin cifrar a través del canal de comunicación.
Una forma de hacerlo implica usar la contraseña como clave de cifrado para transmitir alguna información generada aleatoriamente como el desafío , tras lo cual el otro extremo debe devolver como respuesta un valor cifrado similar que es una función predeterminada de la información ofrecida originalmente, probando así que fue capaz de descifrar el desafío. Por ejemplo, en Kerberos , el desafío es un entero cifrado N , mientras que la respuesta es el entero cifrado N + 1 , lo que demuestra que el otro extremo fue capaz de descifrar el entero N. También se puede aplicar una función hash a una contraseña y un valor de desafío aleatorio para crear un valor de respuesta. Otra variación utiliza un modelo probabilístico para proporcionar desafíos aleatorios condicionados a la entrada del modelo. [2]
Estos intercambios cifrados o encriptados no revelan directamente la contraseña a un espía. Sin embargo, pueden proporcionar suficiente información para permitirle deducir cuál es la contraseña, utilizando un ataque de diccionario o un ataque de fuerza bruta . El uso de información que se genera aleatoriamente en cada intercambio (y donde la respuesta es diferente del desafío) protege contra la posibilidad de un ataque de repetición , donde un intermediario malicioso simplemente registra los datos intercambiados y los retransmite en un momento posterior para engañar a un extremo y hacerlo creer que ha autenticado un nuevo intento de conexión del otro.
Los protocolos de autenticación suelen emplear un nonce criptográfico como desafío para garantizar que cada secuencia de desafío-respuesta sea única. Esto protege contra el espionaje con un ataque de repetición posterior . Si no es práctico implementar un nonce verdadero, un generador de números pseudoaleatorios criptográficamente seguro y una función hash criptográfica pueden generar desafíos que es muy poco probable que ocurran más de una vez. A veces es importante no utilizar nonces basados en el tiempo, ya que pueden debilitar servidores en diferentes zonas horarias y servidores con relojes inexactos. También puede ser importante utilizar nonces basados en el tiempo y relojes sincronizados si la aplicación es vulnerable a un ataque de mensaje retrasado. Este ataque ocurre cuando un atacante copia una transmisión mientras bloquea su llegada al destino, lo que le permite reproducir la transmisión capturada después de un retraso de su elección. Esto se logra fácilmente en canales inalámbricos. El nonce basado en el tiempo se puede utilizar para limitar al atacante a reenviar el mensaje, pero restringido por un tiempo de expiración de quizás menos de un segundo, probablemente sin efecto sobre la aplicación y, por lo tanto, mitigando el ataque.
La autenticación mutua se realiza mediante un protocolo de enlace de desafío-respuesta en ambas direcciones; el servidor se asegura de que el cliente conozca el secreto, y el cliente también se asegura de que el servidor conozca el secreto, lo que protege contra un servidor fraudulento que se hace pasar por el servidor real.
La autenticación de desafío-respuesta puede ayudar a resolver el problema de intercambiar claves de sesión para el cifrado. Mediante una función de derivación de clave , el valor del desafío y el secreto se pueden combinar para generar una clave de cifrado impredecible para la sesión. Esto es particularmente eficaz contra un ataque de intermediario, porque el atacante no podrá derivar la clave de sesión del desafío sin conocer el secreto y, por lo tanto, no podrá descifrar el flujo de datos.
dónde
Este ejemplo en particular es vulnerable a un ataque de reflexión .
Para evitar el almacenamiento de contraseñas, algunos sistemas operativos (por ejemplo, los de tipo Unix ) almacenan un hash de la contraseña en lugar de almacenar la contraseña en sí. Durante la autenticación, el sistema solo necesita verificar que el hash de la contraseña ingresada coincida con el hash almacenado en la base de datos de contraseñas. Esto hace que sea más difícil para un intruso obtener las contraseñas, ya que la contraseña en sí no se almacena y es muy difícil determinar una contraseña que coincida con un hash determinado. Sin embargo, esto presenta un problema para muchos algoritmos de desafío-respuesta (pero no todos), que requieren que tanto el cliente como el servidor tengan un secreto compartido. Dado que la contraseña en sí no se almacena, un algoritmo de desafío-respuesta generalmente tendrá que usar el hash de la contraseña como secreto en lugar de la contraseña en sí. En este caso, un intruso puede usar el hash real, en lugar de la contraseña, lo que hace que los hashes almacenados sean tan sensibles como las contraseñas reales. SCRAM es un algoritmo de desafío-respuesta que evita este problema.
Ejemplos de algoritmos de desafío-respuesta más sofisticados son:
Algunas personas consideran que el CAPTCHA es un tipo de autenticación de desafío-respuesta que bloquea los robots de spam . [4]
{{cite web}}
: CS1 maint: copia archivada como título ( enlace )