En criptografía , una función de derivación de claves ( KDF ) es una función hash criptográfica que deriva una o más claves secretas de un valor secreto como una clave principal, una contraseña o una frase de contraseña utilizando una función pseudoaleatoria . [1] [2] 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 usar con AES . Funciones hash criptográficas con claveson ejemplos populares de funciones pseudoaleatorias utilizadas para la derivación de claves. [3]
Derivación de claves
El uso original de un KDF es la derivación de claves, la generación de claves a partir de contraseñas o frases secretas. Las variaciones sobre este tema incluyen:
- Junto con parámetros no secretos para derivar una o más claves a partir de un valor secreto común (que a veces también se denomina " diversificación de claves "). Dicho uso puede evitar que un atacante que obtenga una clave derivada obtenga información útil sobre el valor secreto de entrada o cualquiera de las otras claves derivadas. También se puede utilizar un KDF para garantizar que las claves derivadas tengan otras propiedades deseables, como evitar las "claves débiles" en algunos sistemas de cifrado específicos.
- Como componentes de protocolos de acuerdos de claves entre varias partes . Ejemplos de tales funciones de derivación de claves incluyen KDF1 , definido en IEEE Std 1363-2000 , y funciones similares en ANSI X9.42 .
- Para derivar claves de contraseñas secretas o frases de contraseña (un KDF basado en contraseña ).
- Para derivar claves de diferente longitud de las proporcionadas: un ejemplo de KDF diseñado para este propósito es HKDF .
- Estiramiento y fortalecimiento de claves.
Estiramiento y fortalecimiento de claves
Las funciones de derivación de claves también se utilizan en aplicaciones para derivar claves de contraseñas o frases de contraseña secretas, que normalmente no tienen las propiedades deseadas para ser utilizadas directamente como claves criptográficas. En tales aplicaciones, generalmente se recomienda que la función de derivación de claves se haga deliberadamente lenta para frustrar un ataque de fuerza bruta o un ataque de diccionario sobre la contraseña o el valor de entrada de la frase de contraseña.
Tal uso puede ser expresado como DK = KDF (clave, sal, iteraciones) , donde DK es la clave derivada, KDF es la derivación de claves función , clave es la clave original o contraseña, la 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 es fijo) se almacenan con la contraseña hash o se envían como texto sin cifrar (sin cifrar) con un mensaje cifrado. [4]
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 precalifiquen un diccionario de claves derivadas. [4]
Un enfoque alternativo, llamado fortalecimiento de clave , extiende la clave con una sal aleatoria, pero luego (a diferencia del estiramiento de clave) elimina de forma segura la sal. [5] Esto obliga tanto al atacante como a los usuarios legítimos a realizar una búsqueda por fuerza bruta del valor de la sal. [6] Aunque el artículo que introdujo el estiramiento de claves [7] se refería a esta técnica anterior y eligió intencionalmente un nombre diferente, el término "fortalecimiento de claves" ahora se usa a menudo (posiblemente incorrectamente) para referirse al estiramiento de claves.
Hash de contraseña
A pesar de su uso original para la derivación de claves, los KDF son posiblemente más conocidos por su uso en el hash de contraseñas ( verificación de contraseñas mediante comparación de hash ), tal como lo utilizan el archivo passwd o el archivo de contraseñas ocultas. Las funciones de hash de contraseña deberían ser relativamente caras de calcular en caso de ataques de fuerza bruta, y el estiramiento de claves de los KDF proporciona esta característica. [ cita requerida ] Los parámetros no secretos se denominan " sal " en este contexto.
En 2013 , se anunció un concurso de hash de contraseñas para elegir un nuevo algoritmo estándar para el hash de contraseñas. El 20 de julio de 2015 finalizó la competición y se anunció que Argon2 era el ganador final. Otros cuatro algoritmos recibieron un reconocimiento especial: Catena, Lyra2, Makwa y yescrypt. [8]
Historia
La primera [ cita necesaria ] función de derivación de clave basada en contraseña deliberadamente lenta (extensión de clave) se llamó " cripta " (o "cripta (3)" después de su página de manual ), y fue inventada por Robert Morris en 1978. Encriptaría un constante (cero), utilizando los primeros 8 caracteres de la contraseña del usuario como clave, realizando 25 iteraciones de un algoritmo de cifrado DES modificado (en el que se utiliza un número de 12 bits leído del reloj de la computadora en tiempo real para perturbar los cálculos ). El número de 64 bits resultante se codifica como 11 caracteres imprimibles y luego se almacena en el archivo de contraseña de Unix . [9] Si bien fue un gran avance en ese momento, los aumentos en las velocidades del procesador desde la era PDP-11 han hecho factibles los ataques de fuerza bruta contra la cripta, y los avances en el almacenamiento han hecho que la sal de 12 bits sea inadecuada. El diseño de la función de cripta también limita la contraseña del usuario a 8 caracteres, lo que limita el espacio de teclas y hace que las contraseñas seguras sean imposibles. [ cita requerida ]
Aunque el alto rendimiento es una propiedad deseable en las funciones hash de propósito general, ocurre lo contrario en las aplicaciones de seguridad de contraseñas en las que la defensa contra el craqueo por fuerza bruta es una preocupación principal. El uso creciente de hardware masivamente paralelo, como GPU, FPGA e incluso ASIC para el craqueo por fuerza bruta, ha hecho que la selección de un algoritmo adecuado sea aún más crítica porque el buen algoritmo no solo debería imponer una cierta cantidad de costo computacional, no solo en CPU, pero también resisten las ventajas de costo / rendimiento de las plataformas modernas masivamente paralelas para tales tareas. Se han diseñado varios algoritmos específicamente para este propósito, incluidos bcrypt , scrypt y, más recientemente, Lyra2 y Argon2 (este último es el ganador del Concurso de hash de contraseñas ). La violación de datos a gran escala de Ashley Madison en la que los atacantes robaron aproximadamente 36 millones de hashes de contraseñas ilustró la importancia de la selección de algoritmos para proteger las contraseñas. Aunque se empleó bcrypt para proteger los hash (haciendo que el craqueo por fuerza bruta a gran escala sea costoso y requiera mucho tiempo), una parte significativa de las cuentas en los datos comprometidos también contenían un hash de contraseña basado en el rápido algoritmo MD5 de propósito general , que hizo es posible que se descifren más de 11 millones de contraseñas en cuestión de semanas. [10]
En junio de 2017, el Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST) emitió una nueva revisión de sus pautas de autenticación digital, NIST SP 800-63B-3, [11] : 5.1.1.2 que indica que: "Los verificadores DEBEN almacenar secretos memorizados [ es decir, contraseñas] en una forma que sea resistente a ataques fuera de línea. Los secretos memorizados DEBEN ser salados y hash utilizando una función de derivación de clave unidireccional adecuada. Las funciones de derivación de clave toman una contraseña, una sal y un factor de costo como entradas y luego generan una contraseña hash. Su propósito es hacer que cada prueba de adivinación de contraseña por parte de un atacante que haya obtenido un archivo hash de contraseña sea costosa y, por lo tanto, el costo de un ataque de adivinación sea alto o prohibitivo ".
Las funciones modernas de derivación de claves basadas en contraseñas, como PBKDF2 (especificado en RFC 2898), se basan en un hash criptográfico reconocido, como SHA-2 , usan más sal (al menos 64 bits y se eligen al azar) y un alto recuento de iteraciones. NIST recomienda un recuento mínimo de iteraciones de 10,000. [11] : 5.1.1.2 "Para claves especialmente críticas, o para sistemas muy potentes o sistemas donde el rendimiento percibido por el usuario no es crítico, un recuento de iteraciones de 10,000,000 puede ser apropiado". [12] : 5.2
Referencias
- ^ Bezzi, Michele; et al. (2011). "Privacidad de datos" . En Camenisch, Jan; et al. (eds.). Gestión de la privacidad y la identidad de por vida . Saltador. págs. 185-186. ISBN 9783642203176.
- ^ Kaliski, Burt; Laboratorios RSA . "RFC 2898 - PKCS # 5: Especificación de criptografía basada en contraseña, versión 2.0" . IETF .
- ^ Zdziarski, Jonathan (2012). Hackear y proteger aplicaciones IOS: robo de datos, secuestro de software y cómo prevenirlo . O'Reilly Media. págs. 252-253. ISBN 9781449318741.
- ^ a b "Hashing de contraseñas saladas - hacerlo bien" . CrackStation.net . Consultado el 29 de enero de 2015 .
- ^ Abadi, Martın, T. Mark A. Lomas y Roger Needham. "Fortalecimiento de contraseñas". Centro de Investigación de Sistemas Digitales, Tech. Rep 33 (1997): 1997.
- ^ U. Manber, "Un esquema simple para hacer contraseñas basadas en funciones unidireccionales mucho más difíciles de descifrar", Computadoras y seguridad, v.15, n.2, 1996, pp.171-176.
- ^ Aplicaciones seguras de claves de baja entropía , J. Kelsey , B. Schneier , C. Hall y D. Wagner (1997)
- ^ "Concurso de hash de contraseñas"
- ^ Morris, Robert; Thompson, Ken (3 de abril de 1978). "Seguridad de contraseña: historia de un caso" . Bell Laboratories . Archivado desde el original el 22 de marzo de 2003 . Consultado el 9 de mayo de 2011 .
- ^ Goodin, Dan (10 de septiembre de 2015). "Una vez visto como a prueba de balas, más de 11 millones de contraseñas de Ashley Madison ya se han descifrado" . Ars Technica . Consultado el 10 de septiembre de 2015 .
- ^ a b Grassi Paul A. (junio de 2017). SP 800-63B-3: Directrices de identidad digital, autenticación y gestión del ciclo de vida . NIST. doi : 10.6028 / NIST.SP.800-63b .
- ^ Meltem Sönmez Turan, Elaine Barker, William Burr y Lily Chen (diciembre de 2010). SP 800-132: Recomendación para la derivación de claves basada en contraseña, Parte 1: Aplicaciones de almacenamiento (PDF) . NIST. doi : 10.6028 / NIST.SP.800-132 .CS1 maint: varios nombres: lista de autores ( enlace )
Otras lecturas
- Percival, Colin (mayo de 2009). "Derivación de claves más fuerte a través de funciones secuenciales de memoria dura" (PDF) . Presentación BSDCan'09 . Consultado el 19 de mayo de 2009 .
- Funciones de derivación clave