Questa è una domanda teorica: ha senso ed è sicuro?
Il mio obiettivo è rafforzare la passphrase. Il flusso è il seguente:
- Inserisco una pssphrase
admin1234
. Questa passphrase verrà utilizzata per ricavare una chiave per la crittografia / decrittografia simmetrica. - Una passphrase entra nella classe sottostante. Viene fuori la quantità desiderata di byte.
L'implementazione PBKDF2 a cui mi riferisco è fornita all'interno dello spazio dei nomi 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;
}
}
Ciò di cui sono preoccupato è la scelta della funzione di hash. Le mie domande:
- Ha senso scegliere la funzione di hash in base alla quantità desiderata di byte derivati?
- In caso contrario, ha senso scegliere la funzione di hash basata su qualche altro parametro per renderlo automatico?
Sento che la risposta è no per entrambi, ma una parte di me vuole vedere un senso al suo interno. Come scegliere la funzione di hash altrimenti?