stringtranslate.com

PBKDF2

En criptografía , PBKDF1 y PBKDF2 ( Función 1 y 2 de derivación de claves basada en contraseña ) son funciones de derivación de claves con un costo computacional variable, que se utilizan para reducir la vulnerabilidad a ataques de fuerza bruta . [1]

PBKDF2 es 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 de Internet Engineering Task Force. Reemplaza a PBKDF1, que solo podía producir claves derivadas de hasta 160 bits de largo. [2] RFC 8018 (PKCS #5 v2.1), publicado en 2017, recomienda PBKDF2 para el hash de contraseñas. [3]    

Objeto y funcionamiento

PBKDF2 aplica una función pseudoaleatoria , como un 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 salt 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 hace que descifrar contraseñas sea mucho más difícil y se conoce como estiramiento de claves .

Cuando se escribió el estándar en el año 2000, el número mínimo recomendado de iteraciones era 1000, pero se pretende que el parámetro aumente con el tiempo a medida que aumenta la velocidad de la CPU. Un estándar Kerberos de 2005 recomendaba 4.096 iteraciones; [1] Según se informa , Apple utilizó 2.000 para iOS 3 y 10.000 para iOS 4 ; [4] mientras que LastPass en 2011 utilizó 5.000 iteraciones para clientes JavaScript y 100.000 iteraciones para hash del lado del servidor. [5] En 2023, OWASP recomendó utilizar 600.000 iteraciones para PBKDF2-HMAC-SHA256 y 210.000 para PBKDF2-HMAC-SHA512. [6]

Representación algorítmica del proceso iterativo de la Función 2 de derivación de claves basada en contraseña.

Agregar sal a la contraseña reduce la capacidad 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

La función de derivación de claves PBKDF2 tiene cinco parámetros de entrada: [9]

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

dónde:

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

DK = T 1 + T 2 + ⋯ + T dklen / hlen
T i = F ( contraseña , sal , c , i )

La función F es el xor ( ^ ) de c iteraciones de PRF encadenados. La primera iteración de PRF utiliza Contraseña como clave PRF y Salt concatenado con i codificado como un entero big-endian de 32 bits como entrada. (Tenga en cuenta que i es un índice basado en 1). Las iteraciones posteriores de PRF utilizan Contraseña como clave de PRF y la salida del cálculo de PRF anterior como entrada:

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

dónde:

U 1 = PRF( Contraseña , Salt + 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, frase de 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 anterior ) . La clave se extrae como los primeros bits dkLen del hash final, por lo que existe un límite de tamaño. [9]

Colisiones HMAC

PBKDF2 tiene una propiedad interesante cuando se utiliza HMAC como función pseudoaleatoria. Es posible construir trivialmente 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 primero se convierte previamente en un resumen y ese resumen se utiliza como contraseña. Por ejemplo, la siguiente contraseña es demasiado larga:

por lo tanto, cuando se usa HMAC-SHA1, se realiza un hash previo usando SHA-1 en:

El cual se puede representar en ASCII como:

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

Por ejemplo, usando:

Las siguientes dos llamadas a funciones:

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

generará los mismos bytes de clave derivados ( 17EB4014C8C461C300E9B61518B9A18B). Estas colisiones de claves derivadas no representan una vulnerabilidad de seguridad, ya que aún es necesario 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 utilicen aplicaciones integradas específicas. Circuitos o unidades de procesamiento de gráficos relativamente baratos. [12] La función de hash de contraseñas de bcrypt requiere una mayor cantidad de RAM (pero aún no se puede ajustar por separado, es decir, fijada para una cantidad determinada de tiempo de CPU) y es ligeramente más fuerte contra tales ataques, [13] mientras que la función de derivación de claves de scrypt más moderna Puede utilizar cantidades arbitrariamente grandes de memoria y, por lo tanto, es más resistente a los ataques de ASIC y GPU. [12]

En 2013, se llevó a cabo el Concurso 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 PHC, con un reconocimiento especial otorgado a otros cuatro esquemas de hash de contraseñas: Catena, Lyra2 , yescrypt y Makwa. [14] Otra alternativa es el hashing de globos , que se recomienda en las pautas 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 dañar la confidencialidad de la contraseña. Esto se puede hacer usando una función pseudoaleatoria ajena para reforzar la contraseña . [16] Esto puede hacerse como alternativa o como paso adicional dentro de un PBKDF.

Ver también

Referencias

  1. ^ ab Raeburn, Kenneth (2005). "Cifrado del estándar de cifrado avanzado (AES) para Kerberos 5". herramientas.ietf.org . doi : 10.17487/RFC3962 . RFC  3962 . Consultado el 23 de octubre de 2015 .
  2. ^ Kaliski, Burt (2000). "PKCS n.° 5: especificación de criptografía basada en contraseñas, versión 2.0". herramientas.ietf.org . doi : 10.17487/RFC2898 . RFC 2898 . Consultado el 23 de octubre de 2015 . 
  3. ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (ed.). "PKCS n.° 5: especificación de criptografía basada en contraseñas, versión 2.1". herramientas.ietf.org . doi :10.17487/RFC8018. RFC 8018. 
  4. ^ "Ciencia forense de teléfonos inteligentes: descifrar contraseñas de respaldo de BlackBerry". Desciframiento avanzado de contraseñas: Insight . 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 para el almacenamiento de contraseñas". Serie de hojas de referencia de OWASP . 15 de agosto de 2021. Archivado desde el original el 23 de enero de 2023 . Consultado el 23 de enero de 2023 .
  7. ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (ed.). "PKCS n.º 5: Especificación de criptografía basada en contraseñas, versión 2.1: Sección 4. Recuento de iteraciones y sal". herramientas.ietf.org . doi :10.17487/RFC8018. RFC 8018 . Consultado el 24 de enero de 2018 . 
  8. ^ Sönmez Turan, Meltem; Barker, Elaine; Rebabas, William; Chen, Lirio. "Recomendación para la derivación de claves basada en contraseñas, parte 1: aplicaciones de almacenamiento" (PDF) . NIST . SP800-132 .Consultado el 20 de diciembre de 2018 . 
  9. ^ ab Especificación de criptografía basada en contraseña RFC  2898
  10. ^ Bynens, Mathías. "Explicación de las colisiones de hash PBKDF2 + HMAC". mathiasbynens.be .
  11. ^ "Resistencia a colisiones: ¿por qué HMAC-SHA1 todavía se considera seguro?". cripto.stackexchange.com .
  12. ^ ab Colin Percival . cifrar. Como se presenta en "Derivación de claves más sólida mediante funciones secuenciales de memoria dura". presentado en BSDCan'09, mayo de 2009.
  13. ^ "El nuevo monstruo de 25 GPU devora contraseñas en segundos". El libro mayor de seguridad. 4 de diciembre de 2012 . Consultado el 7 de septiembre de 2013 .
  14. ^ "Concurso de hash de contraseñas"
  15. ^ "Sección 5.1.1.2 de gestión del ciclo de vida y autenticación de directrices de identidad digital" (PDF) . NIST . SP800-63B .Consultado el 18 de junio de 2021 . 
  16. ^ Ford, W.; Kaliski, BS (2000). "Generación asistida por el servidor de un secreto seguro a partir de una contraseña". Actas del noveno taller internacional de IEEE sobre tecnologías habilitadoras: infraestructura para empresas colaborativas (WET ICE 2000) . págs. 176–180. doi :10.1109/ENABL.2000.883724. ISBN 0-7695-0798-0. S2CID  1977743.

enlaces externos