Articulo de referencia

PBKDF2

En criptografía , PBKDF1 y PBKDF2 ( Password-Based Key Derivation Function 1 y 2 ) son funciones de derivación de claves con un costo computacional variable, utilizadas para red...

En criptografía , PBKDF1 y PBKDF2 ( Password-Based Key Derivation Function 1 y 2 ) son funciones de derivación de claves con un costo computacional variable, utilizadas para reducir la vulnerabilidad a los ataques de fuerza bruta . [ 1 ]

PBKDF2 forma parte de la serie de estándares de criptografía de clave pública (PKCS) de RSA Laboratories , específicamente PKCS #5 v2.0, también publicado como RFC 2898 del Grupo de Trabajo de Ingeniería de Internet. Reemplaza a PBKDF1, que solo podía producir claves derivadas de hasta 160 bits de longitud. [ 2 ] El RFC 8018 (PKCS #5 v2.1), publicado en 2017, recomienda PBKDF2 para el hash de contraseñas. [ 3 ]    

Propósito y funcionamiento

PBKDF2 aplica una función pseudoaleatoria , como el código de autenticación de mensajes basado en hash (HMAC), a la contraseña o frase de contraseña ingresada junto con un valor de sal , y repite el proceso muchas veces para producir una clave derivada , que luego puede usarse como clave criptográfica en operaciones posteriores. El trabajo computacional adicional dificulta mucho el descifrado de contraseñas y se conoce como extensión de clave .

Si bien el número mínimo de iteraciones recomendado era 1000 cuando se redactó el estándar en el año 2000, se pretende que el parámetro aumente con el tiempo a medida que aumenten las velocidades de la CPU. Un estándar de Kerberos en 2005 recomendaba 4096 iteraciones; [ 1 ] Apple supuestamente usó 2000 para iOS 3 y 10 000 para iOS 4 ; [ 4 ] mientras que LastPass en 2011 usó 5000 iteraciones para clientes JavaScript y 100 000 iteraciones para el hash del lado del servidor. [ 5 ] En 2023, OWASP recomendó usar 600 000 iteraciones para PBKDF2-HMAC-SHA256 y 220 000 para PBKDF2-HMAC-SHA512. [ 6 ]

Representación algorítmica del proceso iterativo de PBKDF2.

Agregar un valor aleatorio (salt) a la contraseña reduce la posibilidad de usar hashes precalculados ( tablas arcoíris ) para ataques, y significa que se deben probar varias contraseñas individualmente, no todas a la vez. El estándar de criptografía de clave pública recomienda una longitud de sal de al menos 64 bits. [ 7 ] El Instituto Nacional de Estándares y Tecnología de EE. UU. recomienda una longitud de sal de al menos 128 bits. [ 8 ]

Proceso de derivación de claves

PBKDF2 tiene cinco parámetros de entrada: [ 9 ]

DK = PBKDF2(PRF, Contraseña , Salt , c , dkLen )

dónde:

  • PRF es una función pseudoaleatoria de dos parámetros con una longitud de salida hLen (por ejemplo, un HMAC con clave).
  • La contraseña es la contraseña maestra a partir de la cual se genera una clave derivada.
  • La sal es una secuencia de bits, conocida como sal criptográfica.
  • c es el número de iteraciones deseado
  • dkLen es la longitud de bits deseada de la clave derivada.
  • DK es la clave derivada generada.

Cada bloque de hLen bits T i de la clave derivada DK se calcula de la siguiente manera (con + marcando la concatenación de cadenas):

DK = T 1 + T 2 + ⋯ + T dkLen / hLen
T i = F( Contraseña , Sal , c , i )

La función F es la operación XOR ( ^ ) de c iteraciones de PRF encadenadas. La primera iteración de PRF utiliza Password como clave PRF y Salt concatenado con i codificado como un entero de 32 bits en formato big-endian como entrada. (Tenga en cuenta que i es un índice basado en 1). Las iteraciones subsiguientes de PRF utilizan Password como clave PRF y el resultado del cálculo PRF anterior como entrada:

F( Contraseña , Sal , c , i ) = U 1 ^ U 2 ^ ⋯ ^ U c

dónde:

U 1 = PRF( Contraseña , Sal + INT_32_BE( i ))
U 2 = PRF( Contraseña , U 1 )
U c = PRF( Contraseña , U c -1 )

Por ejemplo, WPA2 utiliza:

DK = PBKDF2(HMAC-SHA1, contraseña , SSID , 4096, 256)

PBKDF1 tenía un proceso más simple: la U inicial (llamada T en esta versión) se crea mediante PRF( Password + Salt ) , y las siguientes son simplemente PRF( U previous ) . La clave se extrae como los primeros dkLen bits del hash final, razón por la cual existe un límite de tamaño. [ 9 ]

colisiones HMAC

PBKDF2 tiene una propiedad interesante cuando usa HMAC como su función pseudoaleatoria. Es posible construir fácilmente cualquier número de pares de contraseñas diferentes con colisiones dentro de cada par. [ 10 ] Si una contraseña proporcionada es más larga que el tamaño de bloque de la función hash HMAC subyacente, la contraseña se pre-hashea en un resumen, y ese resumen se usa como contraseña. Por ejemplo, la siguiente contraseña es demasiado larga:

  • Contraseña:plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd

Por lo tanto, al usar HMAC-SHA1, se aplica un pre-hash utilizando SHA-1 en:

  • SHA1 (hexadecimal):65426b585154667542717027635463617226672a

Lo cual se puede representar en ASCII como:

  • SHA1 (ASCII):eBkXQTfuBqp'cTcar&g*

Esto significa que, independientemente de la sal o las iteraciones, PBKDF2-HMAC-SHA1 generará los mismos bytes de clave para las contraseñas:

  • "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd"
  • "eBkXQTfuBqp'cTcar&g*"

Por ejemplo, utilizando:

  • PRF : HMAC-SHA1
  • Sal: A009C1A485912C6AE630D3E744240B04
  • Iteraciones: 1.000
  • Longitud de la clave derivada: 16 bytes

Las dos siguientes llamadas a funciones:

PBKDF2 - HMAC - SHA1 ( "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd" , ... ) PBKDF2 - HMAC - SHA1 ( "eBkXQTfuBqp'cTcar&g*" , ... )

generará los mismos bytes de clave derivada ( 17EB4014C8C461C300E9B61518B9A18B). Estas colisiones de clave derivada no representan una vulnerabilidad de seguridad, ya que aún se debe conocer la contraseña original para generar el hash de la contraseña. [ 11 ]

Alternativas a PBKDF2

Una debilidad de PBKDF2 es que, si bien su número de iteraciones se puede ajustar para que requiera una cantidad arbitrariamente grande de tiempo de computación, se puede implementar con un circuito pequeño y muy poca RAM, lo que hace que los ataques de fuerza bruta que utilizan circuitos integrados específicos de la aplicación o unidades de procesamiento gráfico sean relativamente baratos. [ 12 ] La función de hash de contraseña bcrypt requiere una mayor cantidad de RAM (pero aún no se puede ajustar por separado, es decir, está fija para una cantidad determinada de tiempo de CPU) y es significativamente más fuerte contra tales ataques, [ 13 ] mientras que la función de derivación de clave scrypt más moderna puede usar cantidades arbitrariamente grandes de memoria y, por lo tanto, es más resistente a los ataques ASIC y GPU. [ 12 ]

En 2013, se celebró la Competencia de Hashing de Contraseñas (PHC) para desarrollar un enfoque más resistente. El 20 de julio de 2015, Argon2 fue seleccionado como el ganador final de la PHC, con un reconocimiento especial para otros cuatro esquemas de hash de contraseñas: Catena, Lyra2 , yescrypt y Makwa. [ 14 ] Otra alternativa es el hash Balloon , que se recomienda en las directrices de contraseñas del NIST . [ 15 ]

Para limitar un ataque de fuerza bruta , es posible hacer que cada intento de contraseña requiera una interacción en línea, sin comprometer la confidencialidad de la misma. Esto se puede lograr utilizando una función pseudoaleatoria que no se dañe para reforzar la seguridad de la contraseña . [ 16 ] Esto puede hacerse como alternativa o como un paso adicional en un PBKDF.

Véase también

Referencias

  1. ^ a b Raeburn, Kenneth (2005). "Cifrado estándar de cifrado avanzado (AES) para Kerberos 5" . tools.ietf.org . doi : 10.17487/RFC3962 . RFC  3962. Recuperado el 23 de octubre de 2015 .
  2. ^ Kaliski, Burt (2000). "PKCS #5: Especificación de criptografía basada en contraseña, versión 2.0" . tools.ietf.org . doi : 10.17487/RFC2898 . RFC 2898. Recuperado el 23 de octubre de 2015 .  
  3. ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (ed.). "PKCS #5: Especificación de criptografía basada en contraseña, versión 2.1" . tools.ietf.org . doi : 10.17487/RFC8018 . RFC 8018.  
  4. ^ "Análisis forense de teléfonos inteligentes: cómo descifrar las contraseñas de copias de seguridad de BlackBerry" . Descifrado avanzado de contraseñas: información clave . ElcomSoft. 30 de septiembre de 2010. Consultado el 23 de octubre de 2015 .
  5. ^ "Notificación de seguridad de LastPass" . El blog de LastPass . 5 de mayo de 2011. Consultado el 31 de enero de 2023 .
  6. ^ "Hoja de referencia rápida para el almacenamiento de contraseñas" . Serie de hojas de referencia rápida de OWASP . 15 de agosto de 2021. Archivado del original el 23 de enero de 2023. Consultado el 23 de enero de 2023 .
  7. ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (ed.). "PKCS #5: Especificación de criptografía basada en contraseña, versión 2.1: Sección 4. Sal y recuento de iteraciones" . tools.ietf.org . doi : 10.17487/RFC8018 . RFC 8018. Recuperado el 24 de enero de 2018 .  
  8. ^ Sönmez Turan, Meltem; Barker, Elaine; Burr, William; Chen, Lily. "Recomendación para la derivación de claves basada en contraseñas, parte 1: aplicaciones de almacenamiento" (PDF) . NIST . SP 800-132 . Consultado el 20 de diciembre de 2018 . 
  9. ^ a b Especificación de criptografía basada en contraseñas RFC 2898 
  10. ^ Bynens, Mathias. "Colisiones de hash PBKDF2+HMAC explicadas" . mathiasbynens.be .
  11. ^ "Resistencia a las colisiones: ¿Por qué HMAC-SHA1 todavía se considera seguro?" . crypto.stackexchange.com .
  12. ^ a b Colin Percival . scrypt . Como se presenta en "Stronger Key Derivation via Sequential Memory-Hard Functions" . presentado en BSDCan'09, mayo de 2009.
  13. ^ "Nuevo monstruo de 25 GPU devora contraseñas en segundos" . The Security Ledger. 4 de diciembre de 2012. Consultado el 7 de septiembre de 2013 .
  14. ^ "Competencia de Hashing de Contraseñas"
  15. ^ "Directrices de identidad digital Autenticación y gestión del ciclo de vida Sección 5.1.1.2" (PDF) . NIST . SP 800-63B . Consultado el 18 de junio de 2021 . 
  16. ^ Ford, W.; Kaliski, BS (2000). "Generación de un secreto fuerte a partir de una contraseña mediante asistencia del servidor". Actas del 9.º Taller Internacional IEEE sobre Tecnologías Facilitadoras: Infraestructura para Empresas Colaborativas (WET ICE 2000) . págs.  176–180 . doi : 10.1109/ENABL.2000.883724 . ISBN 0-7695-0798-0. S2CID  1977743 .
  • "PKCS  #5 v2.1" (PDF) . RSA Laboratories . Archivado del original (PDF) el 11 de abril de 2017.
  • RFC  2898 – Especificación de PKCS  #5 v2.0.
  • RFC  6070 – Vectores de prueba para PBKDF2 con HMAC-SHA1.
  • Recomendación de la publicación especial 800-132 del NIST para la derivación de claves basada en contraseñas.
Obtenido de " https://en.wikipedia.org/w/index.php?title=PBKDF2&oldid=1361993709 "