Estoy creando una aplicación que necesita almacenar datos confidenciales localmente, que se encripta con el SHA-256 de una contraseña proporcionada por el usuario. Utiliza AES para el cifrado.
Me preocupa que algunos usuarios puedan optar por usar una contraseña débil, que podría ser impuesta por un atacante que obtiene ese archivo y quiere leer el contenido.
Estoy pensando que, para obtener el hash, se debe adjuntar un nonce a esa contraseña, y el primer nonce para el cual el hash tiene los primeros X bits establecidos en cero, esa es la clave que se debe usar. Si X se establece en 20, alrededor de 1 millón de hash deben calcularse en promedio para obtener la clave válida de la contraseña proporcionada por el usuario.
De esta manera, el usuario puede tardar 1 segundo en calcular la clave (dependiendo de su máquina), haciendo que sea extremadamente más difícil forzarla bruscamente al adivinar las contraseñas.
Por supuesto, esto es algo que se me ocurrió, y supongo que eso es por qué no debería usarlo . ¿Existe alguna alternativa ampliamente probada para esto?