Estoy escribiendo una aplicación de administrador de contraseñas de WPF para practicar la programación, hasta ahora este es el esquema que pretendo usar para almacenar la contraseña maestra y la contraseña individual del sitio:
Contraseña maestra:
- Genera una sal aleatoria.
- Hash la contraseña maestra + salt con SHA256
- Almacena el hash y la sal en DB como texto.
Para cada contraseña individual del sitio:
- Genera una sal aleatoria.
- Contraseña maestra de hash + sal con SHA256
- Use el hash como clave de cifrado AES256 para cifrar la contraseña del sitio.
- Almacene la contraseña del sitio encriptado como blob binario y la sal como texto en la base de datos.
Obviamente, para que esto funcione, el usuario tendrá que volver a escribir la contraseña maestra cada vez que quiera descifrar la contraseña del sitio, o tendré que almacenar la contraseña maestra en la memoria.
Ahora a mi pregunta:
- ¿Debo usar la misma función de hash mientras hasheado la contraseña maestra y al crear la clave de cifrado, o deberían usarse 2 funciones de hash diferentes?
- ¿Tiene sentido la forma en que manejo la contraseña del sitio individual?