¿Qué es Derivación de claves?
La derivación de claves es el proceso de transformar un valor de origen —normalmente una contraseña, una frase de contraseña o un secreto compartido— en una o más claves criptográficas mediante un algoritmo determinista diseñado para producir material de clave de alta entropía.
Las contraseñas elegidas por personas son intrínsecamente débiles como claves criptográficas. Son cortas, tienen conjuntos de caracteres limitados y siguen patrones predecibles. Una función de derivación de claves (KDF) salva esta brecha procesando la contraseña a través de un algoritmo computacionalmente intensivo que produce una clave de longitud fija apta para el cifrado.
Las funciones de derivación de claves se diseñan deliberadamente para ser lentas y exigentes en recursos. Esto resulta contraintuitivo para la mayoría del software, donde se valora la velocidad, pero para las KDF la lentitud es una característica de seguridad. Un atacante que intente forzar una contraseña por fuerza bruta debe ejecutar la KDF en cada intento. Si la KDF tarda 100 milisegundos por intento, probar mil millones de contraseñas llevaría más de tres años, frente a segundos con una función hash rápida.
Las KDF comunes incluyen PBKDF2, bcrypt, scrypt y Argon2. Cada una equilibra distintos recursos (tiempo de CPU, memoria, paralelismo) para resistir diferentes estrategias de ataque. La elección de la KDF depende del entorno: las aplicaciones basadas en navegador suelen usar PBKDF2 porque está disponible a través de la Web Crypto API, mientras que las aplicaciones del lado del servidor pueden preferir Argon2 por su dureza de memoria.
Cómo usa Vaulted Derivación de claves
Cuando estableces una frase de contraseña opcional en un secreto, Vaulted utiliza la derivación de claves para convertir esa frase de contraseña en una clave de envoltura. En concreto, ejecuta PBKDF2 con 100.000 iteraciones, SHA-256 y un salt aleatorio de 16 bytes a través de la Web Crypto API. La clave derivada se utiliza con AES-KW para envolver la clave de cifrado AES-256-GCM original. El destinatario debe introducir la misma frase de contraseña para derivar la misma clave de envoltura y desenvolver la clave de cifrado antes de descifrar el secreto.