Función de derivación de clave


En criptografía , una función de derivación de clave ( KDF ) es un algoritmo criptográfico que deriva una o más claves secretas a partir de un valor secreto, como una clave principal, una contraseña o una frase de contraseña mediante una función pseudoaleatoria (que normalmente utiliza una función hash criptográfica o cifrado en bloque ). [1] [2] [3] Los KDF se pueden usar para estirar claves en claves más largas o para obtener claves de un formato requerido, como convertir un elemento de grupo que es el resultado de un intercambio de claves Diffie-Hellman en una clave simétrica para utilizar con AES .Las funciones hash criptográficas con clave son ejemplos populares de funciones pseudoaleatorias utilizadas para la derivación de claves. [4]

El uso original de un KDF es la derivación de claves, la generación de claves a partir de contraseñas o frases de contraseña secretas. Las variaciones sobre este tema incluyen:

Las funciones de derivación de claves también se utilizan en aplicaciones para derivar claves de contraseñas secretas o frases de contraseña, que normalmente no tienen las propiedades deseadas para usarse directamente como claves criptográficas. En tales aplicaciones, generalmente se recomienda que la función de derivación de clave se haga deliberadamente lenta para frustrar un ataque de fuerza bruta o un ataque de diccionario en el valor de entrada de contraseña o frase de contraseña.

Dicho uso puede expresarse como DK = KDF(clave, sal, iteraciones) , donde DK es la clave derivada, KDF es la función de derivación de clave , clave es la clave o contraseña original, sal es un número aleatorio que actúa como sal criptográfica , e iteraciones se refiere al número de iteraciones de una subfunción. La clave derivada se utiliza en lugar de la clave o contraseña original como clave del sistema. Los valores de la sal y el número de iteraciones (si no está fijo) se almacenan con la contraseña hash o se envían como texto sin cifrar (sin cifrar) con un mensaje cifrado. [5]

La dificultad de un ataque de fuerza bruta aumenta con el número de iteraciones. Un límite práctico en el recuento de iteraciones es la falta de voluntad de los usuarios para tolerar un retraso perceptible al iniciar sesión en una computadora o ver un mensaje descifrado. El uso de sal evita que los atacantes calculen previamente un diccionario de claves derivadas. [5]

Un enfoque alternativo, llamado fortalecimiento de clave , extiende la clave con una sal aleatoria, pero luego (a diferencia del estiramiento de clave) elimina la sal de forma segura. [6] Esto obliga tanto al atacante como a los usuarios legítimos a realizar una búsqueda de fuerza bruta del valor salt. [7] Aunque el documento que introdujo el estiramiento de teclas [8] se refirió a esta técnica anterior e intencionalmente eligió un nombre diferente, el término "fortalecimiento de teclas" ahora se usa a menudo (posiblemente incorrectamente) para referirse al estiramiento de teclas.