Podemos utilizar MAC (código de autenticación de mensajes) en lugar de simplemente almacenar el hash de la frase de contraseña en la base de datos.
Generación de MAC
Una vez que la clave está encriptada, se genera MAC. Seguimos el mecanismo Encrypt-then-MAC
.
Puedes generar un tag = MAC(m, k)
donde
-
m
es la clave encriptada
-
k
es la clave que utiliza para cifrar la clave de los usuarios (frase de contraseña)
Este tag
se almacena en el DB en lugar del hash de la frase de contraseña.
Comprobando la frase de paso
Para verificar si la frase de contraseña es correcta o no, podemos verificarla fácilmente generando el MAC nuevamente de manera similar, con la clave como frase de contraseña del usuario. Ahora, la etiqueta generada y la etiqueta almacenada en la base de datos se comprueban, si son iguales.
Si es igual, es una frase de contraseña válida y el descifrado de la clave cifrada puede continuar. De lo contrario, podemos enviar un mensaje al usuario que la frase de contraseña es incorrecta.
Algoritmos de MAC
Puede usar HMAC (MAC basado en Hash) Desde OpenSSL para manejar las tareas de generación de etiquetas MAC. Los enlaces apropiados estarían disponibles para cualquier idioma que esté utilizando en su aplicación.
editar: Asegúrese de elegir un algoritmo de hashing fuerte como SHA256 o SHA512 para la generación HMAC (y no MD5 o SHA1 como se muestra en los ejemplos en el enlace anterior)