Como cifrar contraseñas con SHA-1 en PHP???

Iniciado por shamaka, 5 Diciembre 2010, 22:45 PM

0 Miembros y 1 Visitante están viendo este tema.

shamaka

Hola amigos.

Soy administrador de una Web que acepta registros.

Unos días atrás me concentre tanto en buscar una solución a la seguridad de mi Web. Que me he topado con sistema de funciones hash criptográficas "SHA-1".

Había publicado un post de como cifrar las contraseñas usando MD5, pero descubrí que este es vulnerable ataques de Fuerza bruta. Entonces, mi pregunta es, como puedo cifrar mi contraseña de administrador de una Web y la de los usuarios que se registran usando SHA-1? Por favor si alguien sabe como hacerlo pueden decírmelo. No soy para nada experto en PHP ni programación que sea lo mas claro posible xD.

Saludos a todos.


Ya es mi segundo post!     ;D
Con temor a Dios y sin miedo al hombre

APOKLIPTICO

Por favor, posteá en una sola sección, vi que también lo posteaste en seguridad, te pido que no lo hagas más.

En cuanto a tu problema, el SHA-1 es también vulnerable a ataques de fuerza bruta de hecho todos los algoritmos lo son.
Lo que te conviene, es hacer un sha-1 con salt, y pasarlo varias veces.
En cuanto a la función, en php es "sha1" así de simple. Aca te paso un link del manuál sobre la sintaxis de esta función:
http://php.net/manual/en/function.sha1.php

Saludos
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

shamaka

soy nuevo y la verdad es que no supe bien donde era el lugar correcto, la próxima me leo las normas  ;D

Cuando te refieres a "Lo que te conviene, es hacer un sha-1 con salt, y pasarlo varias veces" Que quieres decir con eso, es decir, como ya he mencionado no soy nada experto en este tema.   

Ademas, ya he logrado cifrar la contraseña, pero no hago que conicida con la de la base de datos, como puedo hacer para cifrarla también en la base de datos??
Con temor a Dios y sin miedo al hombre

APOKLIPTICO

Mira, primero, parece que no tenés muy claro el concepto de hash, paso a explicar:
Un hash es un algoritmo matemático que permite teniendo una mensaje de entrada de longitud variable, tener un mensaje de salida de longitud fija y al mismo tiempo que no sea reversible. Es decir, que si Hash(m) = H, teniendo "H" no se pueda conseguir (fácilmente) "m".
Uno se preguntará, de que sirve esto?
Si uno guarda una contraseña en plaintext, cualquier persona que tenga acceso al lugar donde está guardado, la podría ver sin ningun problema. En cambio, si se guarda el hash de la contraseña, es otra cosa, ya que la persona debería primero crackear el hash para luego poder usar la contraseña.

Un hash es un algoritmo determinístico, esto quiere decir que dado una mensaje de entrada "m" la salida va a ser siempre igual mientras "m" no varíe.

Un algoritmo de login seguro, toma la contraseña del usuario, y la envía en forma de hash. Cuando el servidor recibe este hash, lo compara con el hash que tiene en la base de datos. Si son iguales, permite el login, si no son iguales, no lo permite.

Aplicado a esto, primero tenes que saber como está cifrado el hash de la base de datos, dependiendo con que estés trabajando, puede variar el algoritmo.
Un "salt" es una cadena de bits que se agregan al principio o al final del mensaje antes de hashearlo, esto evita ciertos tipos de ataques como rainbow tables, dejando como única opción, la fuerza bruta. La ventaja del salt, es que no exige mayores recursos al servidor.
Con lo de "pasarlo varias veces", me refería a hacer hashes de hashes de esta manera:
m = mensaje s = salt.
Hash(Hash(Hash(m+s)+s)+s) y así sucesivamente...

El problema de esto es que consume recursos del servidor.

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

shamaka

#4
Bastante clara la información, para alguien que sepa de esto  :laugh:

Para terminar con la cuestión, ay alguna forma de poder contratar contigo para que soluciones este pequeño problema de seguridad de mi web?  Tu pones el precio y lo acordamos.

Espero que esto no este en contra de las normas, (aun no las leo) pero si lo deseas puedes escribirme a [MODERADO]

Esperare su respuesta, hasta luego y gracias

MOD: Por favor no pongas tu dirección de correo. Gracias!
Con temor a Dios y sin miedo al hombre

APOKLIPTICO

Nono, esto no está en contra de las normas, excepto lo de poner el correo en un post.
Si querés pasar un correo, tenés que mandar un PM, lee las reglas.
Mirá, en cuanto a eso, yo realmente soy muy principiante con php, programo en C/C++ y en VB.
Pero mirá, cualquier duda que tengas, vení y postea en el foro, que nosotros te vamos a tratar de ayduar todo lo posible.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

shamaka

Con temor a Dios y sin miedo al hombre