Per password di hash sicure, algoritmi come PBKDF2 eseguono molte iterazioni di un hash comune come SHA1. Ci sono alcuni modi in cui queste iterazioni devono essere fatte per essere al sicuro?
In particolare, da 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');
}
}
È un modo sicuro per cancellare la password? Posso immaginare che se hai un algoritmo come questo che fa:
HMAC(HMAC(HMAC(password)))
quindi esiste una funzione più veloce
HMAC3(password)
che dà lo stesso risultato. È questo il caso?