robot de la enciclopedia para niños

Función de derivación de clave para niños

Enciclopedia para niños

Una función de derivación de clave (conocida como KDF por sus siglas en inglés) es una herramienta especial usada en criptografía. Su trabajo es crear una o más claves secretas a partir de un valor secreto inicial. Este valor puede ser una clave maestra, una contraseña o una frase de contraseña. Para hacer esto, la KDF usa una función que genera números de forma que parecen aleatorios.

Las KDF pueden hacer que las claves sean más largas o que tengan un formato específico. Por ejemplo, pueden convertir un resultado de un proceso de intercambio de claves en una clave simétrica lista para usarse en sistemas de seguridad como el AES. Las funciones hash criptográficas son un tipo común de funciones que parecen aleatorias y se usan mucho para derivar claves.

Usos de las KDF

Las funciones de derivación de clave tienen varios usos importantes en el mundo de la seguridad digital:

  • Crear claves diferentes: Se usan junto con información que no es secreta para generar varias claves a partir de un mismo valor secreto. Esto ayuda a que un atacante no pueda descubrir el valor secreto original o las otras claves si logra obtener una de ellas. También aseguran que las claves creadas sean fuertes y no tengan "puntos débiles" que puedan ser aprovechados.
  • Proteger contraseñas: Uno de los usos más comunes de las KDF es transformar las contraseñas en un formato seguro para su verificación. Esto se hace en sistemas donde se guardan las contraseñas, como en los archivos de usuario de un sistema operativo. Aunque las KDF no fueron creadas solo para esto, tienen las características ideales para "hashear" contraseñas. La información no secreta que se usa en este proceso se llama "sal".
    En 2013, se organizó una competencia para elegir un nuevo método estándar para hashear contraseñas. El 20 de julio de 2015, se anunció que Argon2 fue el ganador. Otros métodos importantes que recibieron reconocimiento fueron Catena, Lyra2, Makwa y yescrypt.
  • Parte de protocolos de seguridad: Son componentes clave en los sistemas que permiten a dos o más partes establecer una clave secreta de forma segura. Ejemplos de estas funciones se encuentran en estándares como IEEE Std 1363-2000 y ANSI X9.42.
  • Generar claves de contraseñas: Se utilizan para crear claves a partir de contraseñas o frases de contraseña secretas que las personas recuerdan.
  • Cambiar la longitud de las claves: Permiten obtener claves de una longitud diferente a la del valor inicial. Un ejemplo de KDF diseñada para esto es HKDF.
  • Hacer claves más fuertes: Ayudan a que las claves sean más resistentes a los ataques.

Fortalecimiento de claves

Las funciones de derivación de clave también se usan para crear claves a partir de contraseñas o frases de contraseña que las personas eligen. Estas contraseñas, por sí solas, a menudo no son lo suficientemente complejas para usarse directamente como claves criptográficas. En estos casos, se recomienda que la KDF funcione de manera intencionalmente lenta. Esto hace que sea mucho más difícil para los atacantes intentar adivinar la contraseña usando ataques de fuerza bruta (probando muchas combinaciones) o ataques de diccionario (probando palabras comunes).

Este proceso se puede describir con una fórmula: la clave derivada (DK) se obtiene aplicando la KDF a la clave o contraseña original (key), una "sal" (salt) que es un número aleatorio, y un número de "iteraciones" (iterations). La clave derivada es la que se usa en el sistema, en lugar de la contraseña original. La sal y el número de iteraciones (si no es fijo) se guardan junto con la contraseña transformada o se envían de forma abierta con un mensaje cifrado.

Cuantas más iteraciones se realicen, más difícil será para un atacante adivinar la clave. Sin embargo, hay un límite práctico: los usuarios no quieren esperar mucho tiempo para iniciar sesión o para que un mensaje se descifre. El uso de la sal evita que los atacantes preparen una lista de claves derivadas de antemano.

Existe otra técnica llamada fortalecimiento de clave, que añade una sal aleatoria a la clave y luego borra la sal de forma segura. Esto obliga tanto a los atacantes como a los usuarios legítimos a buscar el valor de la sal. Aunque esta técnica es diferente a la extensión de clave, a veces se usa el término "fortalecimiento de clave" para referirse a la extensión de clave.

Historia de las KDF

La primera función de derivación de clave basada en contraseña que fue diseñada para ser lenta se llamó "crypt" (o "crypt(3)"). Fue creada por Robert Morris en 1978. Esta función cifraba una constante usando los primeros 8 caracteres de la contraseña del usuario como clave. Realizaba 25 repeticiones de un algoritmo de cifrado modificado. El resultado se guardaba en el archivo de contraseñas de Unix. Aunque fue un gran avance en su momento, el aumento en la velocidad de los procesadores ha hecho que los ataques de fuerza bruta contra "crypt" sean posibles. Además, la sal de 12 bits que usaba ya no es suficiente, y limitaba las contraseñas a 8 caracteres, lo que no permite usar frases de contraseña fuertes.

Las funciones de derivación de clave modernas, como PBKDF2 (descrita en RFC 2898), usan un hash criptográfico más avanzado, como SHA-2. También utilizan una sal más larga (por ejemplo, 64 bits o más) y un número muy alto de iteraciones (a menudo decenas o cientos de miles).

El NIST (una organización de estándares en Estados Unidos) recomienda usar al menos 128 bits de sal aleatoria y una función criptográfica aprobada, como la serie SHA o AES. Aunque las funciones hash generales buscan ser rápidas, para la seguridad de contraseñas se necesita lo contrario: que sean lentas para defenderse de los ataques de fuerza bruta. El uso creciente de equipos que pueden realizar muchos cálculos al mismo tiempo, como GPUs, FPGAs e incluso ASICs, ha hecho que elegir el algoritmo adecuado sea aún más importante. Un buen algoritmo no solo debe requerir mucho trabajo de las CPUs, sino también resistir las ventajas de costo y rendimiento de estas plataformas paralelas. Se han diseñado varios algoritmos específicamente para esto, incluyendo bcrypt, scrypt y, más recientemente, Argon2 (el ganador de la competencia de hash de contraseñas).

Un ejemplo de la importancia de elegir un buen algoritmo ocurrió en una gran filtración de datos donde se robaron millones de contraseñas transformadas. Aunque se usó bcrypt para proteger muchas de ellas (haciendo los ataques de fuerza bruta muy costosos), una parte significativa de las cuentas tenía contraseñas basadas en un algoritmo más antiguo y rápido, lo que permitió que millones de contraseñas fueran descubiertas en pocas semanas.

En junio de 2017, el NIST publicó nuevas guías para la autenticación digital. En ellas, se indica que los sistemas deben guardar las contraseñas de forma que sean resistentes a ataques sin conexión. Las contraseñas deben ser transformadas usando una sal y una función de derivación de clave adecuada. Estas funciones toman la contraseña, una sal y un factor de costo como entradas, y generan una versión transformada de la contraseña. Su propósito es hacer que cada intento de adivinar una contraseña por parte de un atacante sea muy costoso, aumentando el precio de estos ataques. También se especifica que la sal debe tener al menos 32 bits de longitud y ser elegida al azar para evitar que coincida con otras contraseñas transformadas.

Véase también

Kids robot.svg En inglés: Key derivation function Facts for Kids

kids search engine
Función de derivación de clave para Niños. Enciclopedia Kiddle.