Para las contraseñas de hash de forma segura, los algoritmos como PBKDF2 realizan muchas iteraciones de un hash común como SHA1. ¿Hay ciertas formas en que estas iteraciones deben realizarse para estar seguros?
En particular, de password-hash.js :
function generateHash(algorithm, salt, password, iterations) {
iterations = iterations || 1;
try {
var hash = password;
for(var i=0; i<iterations; ++i) {
hash = crypto.createHmac(algorithm, salt).update(hash).digest('hex');
}
return algorithm + '$' + salt + '$' + iterations + '$' + hash;
} catch (e) {
throw new Error('Invalid message digest algorithm');
}
}
¿Es esta una forma segura de hash la contraseña? Puedo imaginar que si tienes un algoritmo como este que tiene:
HMAC(HMAC(HMAC(password)))
entonces existe una función más rápida
HMAC3(password)
que da la misma salida. ¿Es este el caso?