Se la password salt di bcrypt hash è memorizzata separatamente

1

Sto sostituendo un sistema di memorizzazione delle password. L'implementazione corrente utilizza TripleDES con la chiave memorizzata in testo in chiaro nei file binari e nella configurazione (nel caso in cui uno di essi non sia disponibile per qualche motivo (DSTM)), l'applicazione decodifica il valore dal database e lo confronta con il valore di testo semplice inviato dal client.

Sto proponendo di sostituire questo con BCrypt (in questo caso, BCrypt.Net). Io uso il seguente codice come esempio

int workFactor = ((DateTime.Now.Year - 2000) / 2) + 6;
string salt = BCrypt.Net.BCrypt.GenerateSalt(workFactor);
Console.WriteLine("Salt: " + salt);
string password = "some test password";
string passwordHash = BCrypt.Net.BCrypt.HashPassword(password, salt);
Console.WriteLine("PW: " + passwordHash);
Console.WriteLine("Verify: " + BCrypt.Net.BCrypt.Verify(password, passwordHash));

Un risultato potrebbe essere

Salt: $2a$14$zhJH43uFxZU3FJ9FaFQusO
PW: $2a$14$zhJH43uFxZU3FJ9FaFQusOn7bJTsXZQgXpEGYFBIygd.8lGXIcc22
Verify: True

Ho notato che non c'era alcun separatore tra il valore salt e il valore della password, quando Verify ha restituito true quando non ho specificato un salt.

Se il sale è incluso nell'output della password hash, c'è qualche valore nella memorizzazione di $2a$14$zhJH43uFxZU3FJ9FaFQusO e $2a$14$zhJH43uFxZU3FJ9FaFQusOn7bJTsXZQgXpEGYFBIygd.8lGXIcc22 separatamente?

Immagino che probabilmente vorrei generare un nuovo salt per l'utente la prossima volta che selezionano comunque una password.

    
posta Zymus 14.04.2016 - 22:03
fonte

1 risposta

2

No, come hai visto, il sale fa parte del valore hash risultante (i 22 caratteri dopo il fattore di costo). La funzione BCrypt.Verify () estrae il sale dall'hash memorizzato, quindi non ha senso memorizzarlo separatamente.

Puoi chiamare la funzione con un solo parametro, la libreria genererà quindi un salt e il fattore di costo da solo:

string passwordHash = BCrypt.HashPassword(password);
// or if you want to specify the cost factor
passwordHash = BCrypt.HashPassword(password, 12);
    
risposta data 14.04.2016 - 22:28
fonte

Leggi altre domande sui tag