Esta es una pregunta teórica: ¿esto tiene sentido y es seguro?
Mi objetivo es fortalecer la frase de contraseña. El flujo es el siguiente:
- Ingresé un pssphrase
admin1234
. Esta frase de contraseña se utilizará para obtener una clave para el cifrado / descifrado simétrico. - Una frase de contraseña ingresa a la clase a continuación. Sale la cantidad deseada de bytes.
La implementación de PBKDF2 a la que me refiero se proporciona dentro del espacio de nombres Microsoft.AspNetCore.Cryptography.KeyDerivation
.
public static class Pbkdf2
{
public static byte[] DeriveBytes(string passphrase, byte[] salt, int iterations, int amountOfBytes)
{
var prf = DeterminePrfForAmountOfBytes(amountOfBytes);
return KeyDerivation.Pbkdf2(passphrase, salt, prf, iterations, amountOfBytes);
}
private static KeyDerivationPrf DeterminePrfForAmountOfBytes(int amountOfBytes)
{
if (amountOfBytes < 1)
throw new ArgumentOutOfRangeException(nameof(amountOfBytes));
if (amountOfBytes <= 32)
return KeyDerivationPrf.HMACSHA256;
return KeyDerivationPrf.HMACSHA512;
}
}
Lo que me preocupa es la elección de la función hash. Mis preguntas:
- ¿Tiene sentido elegir la función hash en función de la cantidad deseada de bytes derivados?
- Si no, ¿tiene sentido elegir la función hash basada en algún otro parámetro para que sea automática?
Siento que la respuesta es no para ambos, pero una parte de mí quiere ver algo en ella. ¿Cómo elegir la función hash de otra manera?