¿Almacenar contraseñas como hash unidireccional, o simplemente usarlo como clave AES?

0

Quiero almacenar algunos datos para que el único que pueda acceder a ellos sea el propio usuario. Aquí está mi idea: cuando el usuario se registre, su contraseña se incluirá en SHA256 (para que encaje como una clave AES), y cifre los datos usándolos como una clave AES 256 .

Si es así, puedo renunciar a la sección de contraseñas en la base de datos, no necesitaré cifrar la contraseña, crear sal, etc. Solo puedo intentar descifrar los datos. Si es así, la contraseña es correcto.

Entonces, ¿qué se considera más seguro? Hash unidireccional usando password_hash de PHP con una sal fuerte, o simplemente hash la contraseña usando SHA256 y úsala como una clave AES ( que no estará encriptando la contraseña en sí)?

Después de todo, he leído que AES 256 es lo suficientemente seguro como para cifrar la información de TOP SECRET, así que estoy bastante seguro de que es difícil averiguar cuál es la clave. E incluso si de alguna manera se apoderan de la llave, tendrán que forzar a la SHA256 a acceder a la contraseña.

¡Gracias!

    
pregunta VladGincher 22.05.2016 - 13:27
fuente

2 respuestas

4

No utilice SHA256 para hash de contraseñas. SHA256 es un algoritmo de resumen de mensajes. Está diseñado para ser muy rápido. Utilice un algoritmo diseñado de manera intencional para ser lento y difícil de implementar en hardware especializado. ¿Por qué? Debido a que los algoritmos rápidos permiten a un atacante forzar una gran cantidad de contraseñas hasta que encuentran una que funciona. "Aún tendrán que aplicar fuerza bruta al SHA256 para acceder a la contraseña" no es un gran obstáculo. Un cracker SHA256 que se ejecuta en una GPU de nivel de consumidor puede calcular los hashes de millones de contraseñas por segundo .

Bcrypt (que es utilizado por el password_hash de PHP) es uno de esos algoritmos, pero cuando desea convertir una contraseña en una clave de cifrado, no es la elección correcta porque no está diseñada para este propósito. El término de búsqueda que está buscando es " Derivación de claves ". Una solución estándar es scrypt que tiene varias ventajas sobre su método:

  • Hashea cada contraseña con un salt único. Eso significa que dos usuarios con la misma contraseña tendrán hashes diferentes. Eso significa que el atacante debe forzar cada contraseña de forma individual y no puede ejecutar su cracker en toda la base de datos hasta que encuentre una contraseña que se ajuste al hash de alguien .
  • Puede generar claves de cualquier longitud que desee. Por lo tanto, obtiene más flexibilidad con respecto a la longitud de su cifrado.
  • Su función de hash está diseñada intencionalmente de manera que se adapta muy mal a la implementación con hardware especializado de procesamiento de números paralelos como GPU, FPGA o ASIC.
respondido por el Philipp 22.05.2016 - 15:00
fuente
2

Para cifrar datos, generalmente se recomienda almacenar una clave aleatoria y cifrar esto con la contraseña con la sal correspondiente. Esto significa que si / cuando el usuario cambia su contraseña, solo necesita descifrar y volver a cifrar su clave, y no todos sus datos.

    
respondido por el Someone Somewhere 22.05.2016 - 23:00
fuente

Lea otras preguntas en las etiquetas