¿Qué es PBKDF2?
PBKDF2 (Password-Based Key Derivation Function 2) es un algoritmo de derivación de claves definido en el RFC 8018 que aplica una función pseudoaleatoria —normalmente HMAC-SHA-256— de forma iterativa a una contraseña y un salt para producir una clave derivada que es computacionalmente costosa de forzar por fuerza bruta.
También conocido como: Password-Based Key Derivation Function 2, PBKDF, RFC 8018
PBKDF2 funciona aplicando repetidamente un código de autenticación de mensajes basado en hash (HMAC) a la combinación de una contraseña y un valor de salt aleatorio. El número de iteraciones controla cuántas veces se realiza esta operación: más iteraciones significan más tiempo de CPU por cada intento de derivación de clave, lo que aumenta directamente el coste para un atacante que intente adivinar la contraseña.
El salt es un valor aleatorio único para cada operación de derivación de claves. Evita los ataques de búsqueda precalculada (tablas arcoíris) al garantizar que la misma contraseña produzca claves derivadas diferentes cuando se utilizan salts distintos. El salt no necesita ser secreto: normalmente se almacena junto a la clave derivada o al texto cifrado.
PBKDF2 se estandarizó en el año 2000 y sigue teniendo un amplio soporte, especialmente en los navegadores a través de la Web Crypto API. Aunque KDF más recientes como Argon2 ofrecen mayor resistencia frente a ataques con GPU y ASIC al requerir grandes cantidades de memoria, PBKDF2 sigue siendo una opción sólida para aplicaciones basadas en navegador donde la compatibilidad con la Web Crypto API es esencial y el número de iteraciones puede fijarse lo bastante alto como para proporcionar una seguridad adecuada.
Cómo usa Vaulted PBKDF2
Vaulted utiliza PBKDF2 a través de la Web Crypto API cuando se añade una frase de contraseña a un secreto. La implementación usa 100.000 iteraciones con HMAC-SHA-256 y un salt aleatorio de 16 bytes. La clave derivada de 256 bits se utiliza como clave de envoltura AES-KW para cifrar la clave AES-256-GCM principal. El salt se incluye en el fragmento de la URL junto a la clave envuelta para que el destinatario pueda volver a derivar la misma clave de envoltura a partir de la frase de contraseña.