im utilizzando HMACSHA256 per generare l'hash della password e memorizzarlo. l'obiettivo qui è quello di autenticare gli utenti, ad esempio - salvare le password con hash e convalidare gli utenti ogni volta che è necessario utilizzando le password con hash
// salt is a guid we store seperately, its the id of the user
byte[] GetHash(byte[] password, byte[] salt)
{
byte[] saltAndPassword = salt.Concat(password).ToArray();
var hmac = HMACSHA256();
hmac.Key = password;
var hash = hmac.ComputeHash(saltAndPassword);
return hash;
}
nota che la chiave è password e l'hash è generato su salt + password
possiamo avere la password come chiave per hash la password di sale +, che comprenderà la sicurezza? quando usi HMACSHA256, dobbiamo necessariamente avere una gestione delle chiavi inorder per usare chiavi separate piuttosto che password?
Inoltre, i tasti devono essere unici in HMACSHA256?
So che le persone spesso suggeriscono funzioni lente come - PBKDF2, Scrypt ecc.
ma usa anche HMACSHA256 sicuro? le persone usano effettivamente un hmac per l'hashing e la memorizzazione delle password? quale sarebbe l'approccio raccomandato per l'hashing e la memorizzazione delle password (se tutto ciò che hai sono password e sali unici)?
scuse per la sfilata di domande :) grazie in anticipo
Modifica
Non sono riuscito a trovare un modo per commentare né la domanda né la risposta (stackexchange mi richiede di avere un rappresentante 50). quindi sto postando il mio commento qui:
@CodesInChaos ciao, grazie per la risposta.
HMAC(password, salt + password)
This is silly but harmless. 1) It uses a variable length value as key. HMAC has some >weird properties when doing that. 2) Why input the password twice?
Hmm, dovremmo fare qualcosa al riguardo?, per renderlo un valore di lunghezza costante (eventuali raccomandazioni)?
Ho pensato che l'hash (sale + password) è sempre meglio dell'hash (password) // l'unico scopo della salatura ??
ma da quello che vedo dalla tua risposta, HMACSHA256 fa cose simili usando la chiave in dotazione?
If you use HMAC for hashing passwords, I'd use the password as message and the salt as >key. This matches HKDF-Extract.
ma, nel nostro caso salt è l'userid, sono esposti, va bene usare salt come chiave che è facile da sapere?.