La estructura de iteración de PBKDF2 tiene este aspecto ( enlace ):
U_1 = PRF (P, S || INT (i))
U_2 = PRF (P, U_1)
...
U_{c - 1} = PRF(P, U_{c - 2})
U_c = PRF (P, U_{c-1})
Donde:
- PRF es la función pseudoaleatoria (es decir, la función hash subyacente)
- P es la contraseña
- S es la sal
- i es el número de bloque
Dado U_ {c - 1} y U_c, podría intentar encontrar P tal que U_c = PRF (P, U_ {c-1}) en lugar de tener que iterar 1000 veces como normalmente tendrías que hacerlo con PBKDF2 .
Esto esencialmente derrota al tener múltiples iteraciones en el KDF, reduciendo el número de llamadas al PRF de 1000 veces por intento a la menor diferencia entre el recuento de iteraciones de dos hashes.
Una mejora si necesita múltiples PBKDF2 con un recuento de iteraciones diferente de la misma contraseña, es variar el Salt.