¿Este método de hashing + salt de contraseña es la forma más segura posible? [duplicar]

0

Me pregunto qué piensan todos los expertos en seguridad de mi método para el hashing de contraseñas. Quiero encontrar un método que pueda usar para todos mis futuros proyectos de desarrollo web.

Primero creo una sal aleatoria basada en una matriz de 32 bytes:

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

Luego almacenaría esa sal en la fila de la base de datos del usuario.

Para codificar la contraseña, usaría:

// 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);
}

Los métodos EncryptStringToBytes y DecryptStringFromBytes se pueden ver aquí: link

Si alguien pudiera ver esto y hacerme saber sobre cualquier vulnerabilidad o lugar donde pudiera fortalecerlo, ¡lo apreciaría enormemente! Gracias!

Editar

He implementado una versión de BCrypt aquí:

        string myPassword = "password";

        string mySalt = BCrypt.GenerateSalt();

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

1 respuesta

11

No, no, no, no, no. El cifrado no es hashing .

En su lugar, debes usar un algoritmo de hashing fuerte como bcrypt o pbkdf2 . Puede utilizar una biblioteca como Bcrypt.Net .

Con la biblioteca, el hashing de una contraseña es simplemente una cuestión de llamada,

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

La verificación es igual de fácil,

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

Si no desea una dependencia adicional en su proyecto, busque en el uso de Rfc2898DeriveBytes en su lugar.

    
respondido por el Ayrx 14.10.2013 - 04:57
fuente

Lea otras preguntas en las etiquetas