Se necesita una opinión de cifrado de contraseña de la base de datos SQL

4

Estoy tratando de entender si la estructura de cifrado de la contraseña de mi base de datos es buena o no tiene mucho uso.

Entonces, cuando me registre, el php generará una clave aleatoria de 50 caracteres, y esa clave se colocará en una tabla de db llamada hash tagged contra el ID de usuario, luego el hash se usará para cifrar AES la contraseña y la contraseña Se almacenará en otra tabla.

Cuando un usuario inicie sesión, el hash se extraerá y se usará para el descifrado. Y si el inicio de sesión es exitoso, la clave de hash será reemplazada por una nueva generada para el próximo uso, etc.

No estoy seguro de si es una buena idea o no, ¡cualquier comentario es bueno, gracias!

    
pregunta John 12.09.2016 - 11:58
fuente

4 respuestas

34

No , ¡no es una buena idea! Como Lukas señaló en un comentario, usted desea hash una contraseña , ¡nunca la cifres! Con su esquema, sería posible obtener las contraseñas de texto sin formato de un volcado de base de datos sin ningún esfuerzo. ¡No dejes que eso suceda!

    
respondido por el Josef 12.09.2016 - 12:16
fuente
10

No, esto no es bueno en absoluto.

En primer lugar, existe una gran confusión sobre la terminología.

Una función hash asigna entradas arbitrarias a un conjunto fijo. El beneficio aquí es que son de una manera, por lo que se pueden usar para almacenar contraseñas para la autenticación sin almacenar la contraseña real, y sin la posibilidad de recuperar la contraseña real.

El cifrado por otro lado es bidireccional: si tienes la clave, el descifrado es trivial.

Lo que llamas "hash" no parece ser un hash, parece ser una clave simétrica, que se utiliza para cifrar y descifrar.

Todo su esquema no proporciona ningún beneficio al almacenar contraseñas en texto plano. Si un atacante tiene acceso de lectura a la base de datos y, por lo tanto, puede leer las contraseñas cifradas, también puede leer la clave, haciendo que el cifrado sea inútil.

Generalmente, cuando encripta algo almacenado en una base de datos, no desea almacenar la clave de encriptación en la misma base de datos. Pero en este caso no importa, ya que están en hash, no encriptadas .

    
respondido por el tim 12.09.2016 - 12:31
fuente
1

Hay algo llamado "descifrado" para el cifrado, pero no existe tal cosa como "descifrar". Por lo tanto, puede agregar la contraseña o usar la función password_hash incorporada.

    
respondido por el mzcoxfde 12.09.2016 - 13:41
fuente
1

Otra razón por la que esto podría no ser seguro, además de todo el problema de cifrado de hash! =, es la forma en que se genera la contraseña. Su "clave" o "hash" como la llama, es básicamente esto: Una contraseña generada automáticamente.
Ahora, si el algoritmo que genera dicha contraseña hace esto de manera predecible, y el atacante puede acceder a este. Entonces, es posible que un atacante prediga la contraseña para todos los usuarios, ¡incluso si está correctamente hash!

Recomiendo leer un poco más sobre los ataques de tiempo y asegurarte de que utilizas una fuente aleatoria adecuada para este tipo de generaciones de contraseñas / claves.

    
respondido por el ChristianF 13.09.2016 - 16:58
fuente

Lea otras preguntas en las etiquetas