En la criptografía , PBKDF1 y PBKDF2 ( contraseña-Based de derivación de claves de función 1 y 2 ) son funciones de derivación de claves con un coste computacional de deslizamiento, que se utilizan para reducir la vulnerabilidad de ataques de fuerza bruta .
PBKDF2 es parte de RSA Laboratories ' Estándares de criptografía de clave pública serie (PKCS), específicamente PKCS # 5 v2.0, también publicado como Internet Engineering Task Force ' s RFC 2898. Se sustituye PBKDF1, que sólo podía producir derivados claves de hasta 160 bits de largo. [1] RFC 8018 (PKCS # 5 v2.1), publicado en 2017, recomienda PBKDF2 para el hash de contraseñas. [2]
Objeto 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 de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces para producir una clave derivada , que luego se puede utilizar como clave criptográfica en operaciones posteriores. El trabajo computacional adicional hace que el descifrado de 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 aumentan las velocidades de la CPU. Un estándar de Kerberos en 2005 recomendó 4096 iteraciones; [3] Según los informes, Apple usó 2000 para iOS 3, y10 000 para iOS 4; [4] mientras que LastPass en 2011 utilizó 5000 iteraciones para clientes JavaScript y100 000 iteraciones para el hash del lado del servidor. [5]
Tener una sal agregada a la contraseña reduce la capacidad de usar hashes precalculados ( tablas de arco iris ) para ataques, y significa que varias contraseñas deben probarse individualmente, no todas a la vez. El estándar recomienda una longitud de sal de al menos 64 bits. [6] El Instituto Nacional de Estándares y Tecnología de EE. UU. Recomienda una longitud de sal de 128 bits. [7]
Proceso de derivación de claves
La función de derivación de clave PBKDF2 tiene cinco parámetros de entrada: [8]
DK = PBKDF2 (PRF, contraseña, Salt, c, dkLen)
dónde:
- PRF es una función pseudoaleatoria de dos parámetros con 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 deseadas
- dkLen es la longitud de bits deseada de la clave derivada
- DK es la clave derivada generada
Cada bloque de hLen -bit T i 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, Salt, c, i)
La función F es el xor (^) de c iteraciones de PRF encadenadas. La primera iteración de PRF usa Password como la 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 la contraseña como clave PRF y la salida del cálculo 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) es creada por PRF(Password + Salt)
, y las siguientes son simplemente . La clave se extrae como los primeros bits dkLen del hash final, por lo que hay un límite de tamaño. [8]PRF(Uprevious)
Colisiones HMAC
PBKDF2 tiene una propiedad interesante cuando se usa HMAC como su función pseudoaleatoria. Es posible construir trivialmente cualquier número de pares de contraseñas diferentes con colisiones dentro de cada par. [9] 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 pre-hash en un resumen, y ese resumen se usa en su lugar como contraseña. Por ejemplo, la siguiente contraseña es demasiado larga:
- Contraseña:
plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
por lo tanto (cuando, por ejemplo, se usa HMAC-SHA1) se realiza un hash previo con SHA-1 en:
- SHA1 (hexadecimal):
65426b585154667542717027635463617226672a
Que 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, usando:
- PRF : HMAC-SHA1
- Sal: A009C1A485912C6AE630D3E744240B04
- Iteraciones: 1.000
- Longitud de la clave derivada: 16 bytes
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 se debe conocer la contraseña original para generar el hash de la contraseña. [10]
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 cálculo, 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. [11] La función hash de contraseña de bcrypt requiere una mayor cantidad de RAM (pero aún no se puede ajustar por separado, es decir, fija para una cantidad determinada de tiempo de CPU) y es un poco más fuerte contra tales ataques, [12] mientras que la función de derivación de clave scrypt más moderna Puede usar cantidades de memoria arbitrariamente grandes y, por lo tanto, es más resistente a los ataques de ASIC y GPU. [11]
En 2013, se llevó a cabo un Concurso de hash 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. [13] Otra alternativa es el hash de globo , que se recomienda en las pautas de contraseñas del NIST . [14]
Ver también
Referencias
- ^
, Burt Kaliski. @rsasecurity.com>"PKCS # 5: Especificación de criptografía basada en contraseña, versión 2.0" . tools.ietf.org . Consultado el 23 de octubre de 2015 . - ^ "PKCS # 5: Especificación de criptografía basada en contraseña, versión 2.1" . tools.ietf.org .
- ^ Kenneth Raeburn. "Cifrado estándar de cifrado avanzado (AES) para Kerberos 5" . tools.ietf.org . Consultado el 23 de octubre de 2015 .
- ^ "Análisis forense de teléfonos inteligentes: descifrar contraseñas de copia de seguridad de BlackBerry" . Descifrado avanzado de contraseñas - Insight (ElcomSoft) . 30 de septiembre de 2010 . Consultado el 23 de octubre de 2015 .
- ^ "Notificación de seguridad de LastPass" . El blog de LastPass . 5 de mayo de 2011 . Consultado el 23 de octubre de 2015 .
- ^ K. Moriarty; et al. "RFC 8018 - PKCS # 5: Especificación de criptografía basada en contraseña, versión 2.1" . tools.ietf.org . Consultado el 24 de enero de 2018 .
- ^ Meltem Sönmez Turan, Elaine Barker, William Burr y Lily Chen. "NIST SP 800-132, Recomendación para la derivación de claves basada en contraseña, parte 1: Aplicaciones de almacenamiento" (PDF) . www.nist.gov . Consultado el 20 de diciembre de 2018 .CS1 maint: varios nombres: lista de autores ( enlace )
- ^ a b RFC 2898
- ^ "Explicación de las colisiones hash PBKDF2 + HMAC · Mathias Bynens" .
- ^ "Resistencia a colisiones: ¿por qué el HMAC-SHA1 todavía se considera seguro?" .
- ^ a b Colin Percival. scrypt . Como se presenta en "Derivación de claves más fuerte a través de funciones secuenciales de memoria dura" . presentado en BSDCan'09, mayo de 2009.
- ^ "Nuevo monstruo de 25 GPU devora contraseñas en segundos" . El libro mayor de seguridad. 2012-12-04 . Consultado el 7 de septiembre de 2013 .
- ^ "Concurso de hash de contraseñas"
- ^ NIST SP800-63B Sección 5.1.1.2
enlaces externos
- RSA PKCS # 5 - RSA Laboratories PKCS # 5 v2.1.
- 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ña