Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: MiguelCanellas en 4 Septiembre 2019, 06:20



Título: [Resuelto] [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MiguelCanellas en 4 Septiembre 2019, 06:20
Buenas noches!
sencillamente eso, ¿cifrar contraseñas con "sha-512" es una forma segura de guardar las claves de los usuarios? Caso contrario ¿Cual me podrían recomendar ya que no tengo mucha idea sobre el cifrado de datos?

¡Muchas gracias!


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: engel lex en 4 Septiembre 2019, 07:22
primero que nada, sha no es un cifrado, es un hash

segundo sha 256 es mas que suficiente y te ahorras la mitad de ese espacio en base de datos

por ultimo, lo recomendable es usar hash+salt

especialmente php tiene una función segura para guardar y comprobar la contraseña en hash blowfish

https://www.php.net/manual/es/function.password-hash.php
y
https://www.php.net/manual/es/function.password-verify.php


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MinusFour en 4 Septiembre 2019, 18:06
No uses SHA-512. Usa una función como bcrypt, scrypt, Argon2, PBKDF2, etc.

El problema con algoritmos como SHA-512 y similares es que un atacante puede precalcular millones de contraseñas rápidamente. Por lo menos un salt aleatorio por cada contraseña es MUY importante... Para que no te saquen TODAS tus contraseñas de una sola rainbow table.

Edit: Exagero un poco con "TODAS" porque no todo mundo elige contraseña débiles, pero te sorprendería saber cuantas si lo hacen.


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MiguelCanellas en 4 Septiembre 2019, 19:25
¿Vendría siendo esta la función bcrypt?
https://www.php.net/manual/es/function.password-hash.php
uno de los parametros que se le pueden poner es:

Según como esta en el manual oficial de PHP:
PASSWORD_BCRYPT - Usar el algoritmo CRYPT_BLOWFISH para crear el hash. Producirá un hash estándar compatible con crypt() utilizando el identificador "$2y$". El resultado siempre será un string de 60 caracteres, o FALSE en caso de error.

Mientras tanto voy a seguir buscando.


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: engel lex en 4 Septiembre 2019, 19:32
es ese, no es necesario pasar ese parametro, ese es por defecto...

y eso es uno de los modos mas seguros que puedes buscar


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MiguelCanellas en 4 Septiembre 2019, 19:40
es ese, no es necesario pasar ese parametro, ese es por defecto...

y eso es uno de los modos mas seguros que puedes buscar

¡Les agradezco mucho a los dos!

EDIT: Testee la función y veo que el hasheado es aleatorio a medida que actualizo la pagina o ejecuto el código independientemente si cambia o no el dato que estoy intentando hashear me va a dar siempre códigos diferentes aunque el dato sea el mismo.

¿Como podría aplicar esto a un login?
Porque cuando se usa sha-512 por ejemplo el hasheado es siempre el mismo para x dato/string que le pase, entonces lo que hago o hacía era hashear con el sha-512 la contraseña que el usuario ingresaba en el formulario login y despues una vez hashaeada la contraseña ingresada la comparaba con la contraseña que estaba en la base de datos (contraeña que esta hasheada)

Pero en este caso como podría hacer porque siempre me va a dar diferentes, aunque el dato sea el mismo.


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MinusFour en 5 Septiembre 2019, 01:55
¡Les agradezco mucho a los dos!

EDIT: Testee la función y veo que el hasheado es aleatorio a medida que actualizo la pagina o ejecuto el código independientemente si cambia o no el dato que estoy intentando hashear me va a dar siempre códigos diferentes aunque el dato sea el mismo.

¿Como podría aplicar esto a un login?
Porque cuando se usa sha-512 por ejemplo el hasheado es siempre el mismo para x dato/string que le pase, entonces lo que hago o hacía era hashear con el sha-512 la contraseña que el usuario ingresaba en el formulario login y despues una vez hashaeada la contraseña ingresada la comparaba con la contraseña que estaba en la base de datos (contraeña que esta hasheada)

Pero en este caso como podría hacer porque siempre me va a dar diferentes, aunque el dato sea el mismo.

Lo que está pasando es que password_hash está generando un salt aleatorio por cada vez que lo llamas. Lo que significa que tienes 2 salts diferentes y por ende 2 hashes diferentes para un determinado string. Si le entregas el mismo salt a la función entonces recibes el mismo resultado. No te tienes que preocupar por eso porque puedes usar la función password_verify que hace todo por tí, extrae el salt del hash, vuelve a recalcularlo y hasta compara los strings en tiempo constante.


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MiguelCanellas en 5 Septiembre 2019, 02:52
¿Me podrías dar algún código como referencia?


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MinusFour en 5 Septiembre 2019, 03:49
No hay nada complicado con estas funciones.

Código
  1. $pass = 'micontraseña';
  2. $mihash = password_hash($pass); //si viene de la DB obviamente no usas password_hash porque ya es un hash.
  3. password_verify($pass, $mihash); //true


Título: Re: [Pregunta]: ¿cifrar contraseñas con "SHA-512" es una forma segura?
Publicado por: MiguelCanellas en 5 Septiembre 2019, 05:42
Ya pude comprender mejor, gracias.