Uso las siguientes entradas para cifrar usando AES:
- Contraseña de usuario (texto sin formato)
- SecretKey
- RandomIV
Uso las siguientes entradas para cifrar usando SHA512:
- Contraseña de usuario (texto sin formato)
- RandomSalt
Me gustaría mejorar los dos métodos de cifrado anteriores mediante el uso de la funcionalidad de derivación de claves. Usaré la clase .NET Rfc2898DeriveBytes que requiere lo siguiente:
- MasterPassword
- sal
- Iteraciones
Para AES:
¿Debo usar la clave secreta de AES para el parámetro de contraseña maestra de PBKDF? Actualmente genero un AES RandomIV y almaceno el IV + CIPHER en la base de datos, cuando la actualización para usar PBKDF es correcto hacer lo siguiente:
- No generar un AES RandomIV
- Genere una nueva sal aleatoria para el PBKDF
- Use los primeros x bits de DerivedKey como AES SecretKey
- Utilice los segundos x bits de DerivedKey como AES RandomIV
- Almacene el 'nuevo Salt aleatorio' + CipherText en la base de datos
- Tanto AES Encrypt & Los métodos de descifrado tendrán un parámetro de sal de PBKDF en lugar de un parámetro de AES IV (ignore el hecho de que ambos son solo byte [] 's)
Para SHA512:
-
¿Es correcto usar UserPassword (texto sin formato) para el parámetro PBKDF MasterPassword (en lugar de almacenar de forma segura una MasterPassword secreta como AES)?
-
¿Debo usar la SHA512 RandomSalt como la sal PBKDF?
-
Al llamar al método SHA.computehash, ¿debería solo DerivedKey by hased, o debería agregarse el salt al DK?
-
¿Cuántos bytes de DerivedKey deben cifrarse, 64?