PBKDF2 es una función de hashing de contraseña (*); utiliza un número configurable de iteraciones (para hacerlo tan lento como sea apropiado) y una sal (para disuadir todo tipo de paralelismo en los ataques). Para verificar una contraseña, el hash se vuelve a calcular y debe producir el mismo valor. Para realizar este nuevo cálculo, debe utilizar el mismo número de iteraciones y el mismo valor de sal; de lo contrario, obtendrás una salida distinta y no serás más sabio.
Se generará un nuevo salt para cada nueva contraseña registrada (por ejemplo, cada vez que se crea una nueva cuenta de usuario y también cuando un usuario cambia su contraseña), por lo que debe almacenarse junto con el valor de hash.
El recuento de iteraciones también debe almacenarse, ya que puede modificarse en algún momento. En el código al que se vincula, el recuento es una constante ( static final
), pero su función conceptual es contrarrestar el aumento del rendimiento de las computadoras a lo largo del tiempo: se utiliza el número de iteraciones para hacer que cada una El hash de contraseñas es tan lento como puede tolerar, porque también lo hará lento para el atacante. Cuando compra un servidor nuevo y más rápido, es posible que desee aumentar el recuento de iteraciones (es decir, modificar el código fuente y volver a compilar la aplicación, con un recuento más alto). Sin embargo, en ese caso, no desea invalidar las contraseñas de hash almacenadas existentes. Por lo tanto, debe saber, para cada hash almacenado, cuántas iteraciones se usaron para ese hash específico. Esta es la razón por la que el recuento de iteraciones se almacena junto con la sal y el valor de hash en sí.
(*) Estrictamente hablando, una función de derivación de clave basada en contraseña, pero seamos sencillos.