L'hashing della password + il metodo salt è il modo più sicuro possibile? [duplicare]

0

Mi sto solo chiedendo cosa pensano gli esperti di sicurezza del mio metodo per l'hashing delle password. Voglio proporre un metodo che possa essere utilizzato per tutti i miei futuri progetti di sviluppo web.

Per prima cosa creo un sale casuale basato su un array a 32 byte:

RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
byte[] randomNumber = new byte[32];
provider.GetBytes(randomNumber);
string salt = System.Text.Encoding.UTF8.GetString(randomNumber);

Quindi lo memorizzerei nella riga del database dell'utente.

Per cancellare la password, vorrei usare:

// Create a new instance of the RijndaelManaged
// class. This generates a new key and initialization
// vector (IV).
using (RijndaelManaged myRijndael = new RijndaelManaged())
{
myRijndael.GenerateKey();
myRijndael.GenerateIV();
// Encrypt the string to an array of bytes.
byte[] encrypted = EncryptStringToBytes(salt + password, myRijndael.Key, myRijndael.IV);
string encryptedPassword = System.Text.Encoding.UTF8.GetString(encrypted);
}

I metodi EncryptStringToBytes e DecryptStringFromBytes possono essere visualizzati qui: link

Se qualcuno potesse esaminare questo aspetto e farmi conoscere eventuali vulnerabilità o luoghi in cui potrei rafforzarlo, lo apprezzerei molto! Grazie!

Modifica

Ho implementato una versione di BCrypt qui:

        string myPassword = "password";

        string mySalt = BCrypt.GenerateSalt();

        string myHash = BCrypt.HashPassword(myPassword, mySalt);
    
posta Chrisgozd 14.10.2013 - 04:50
fonte

1 risposta

11

No, no, no, no, no. La crittografia non è hashing .

Devi invece utilizzare un algoritmo di hashing strong come bcrypt o pbkdf2 . Puoi utilizzare una libreria come Bcrypt.Net .

Con la libreria, l'hashing di una password è semplicemente una questione di chiamata,

BCrypt.Net.BCrypt.HashPassword(password, workFactor);

La verifica è altrettanto semplice,

BCrypt.Net.BCrypt.Verify(password, hashed_password);

Se non vuoi una dipendenza aggiuntiva nel tuo progetto, cerca di utilizzare il Rfc2898DeriveBytes invece.

    
risposta data 14.10.2013 - 04:57
fonte

Leggi altre domande sui tag