MD5 para convertir contraseñas.

Clander
24 de Junio del 2004
Hola a todos y gracias por ayudarme. Soy nuevo en esto de la programacion bajo PHP y estudiando el tema sobre como almacenar las contraseñas en la base de datos me surge una duda:
En la mayoria de sitios que he leido sobre el tema aconsejan almacenar la contraseña despues de haberle aplicado una conversion MD5, de esta forma las contraseñas no estan en claro en la base de datos y por tanto si alguien pudiera acceder a la base de datos no las podria leer en claro.
Sin embargo, aunque no pudiera leerlas en claro sabe que la mayoria de gente utiliza este metodo para almacenarlas y por tanto el atacante podria ir generando password de forma aleatoria, aplicar la conversion MD5 y comparar con los valores de la base de datos (fuerza bruta).
¿Existe alguan otra forma de almacenar las contraseñas en la base de datos? Por ejemplo, combinando conversiones y codificaciones.

Gracias nuevamente.

spankcl
24 de Junio del 2004
Puedes utilizar ciclos de resúmenes criptográficos (funciones hash) ADEMÁS de emplear contraseñas de un sólo uso ayudado de javascript si no trabajas sobre servidor seguro.

Ej.:

El pw de tu usuario es 1234

A ese pw le aplicas, por ej MD5, y queda 3465678 (simulado), luego a este último le aplicas una nueva función hash, SHA1 por ejemplo, y queda ed84504kwj(simulado) y así sucesivamente.

El resultado final de este ciclo de hash lo almacenas en la bd. En teoría el ciclo de resumen criptográfico sólo lo conocerías tú, por tanto, disminuiría la vulnerabilidad a ataques.

Adicionalmente, si no cuentas con servidor seguro, puedes reproducir en cliente el ciclo de resumen criptográfico (ayudado de js) añadiendo previamente una cadena única para cada sesión.

Ej.:

El usuario ingresa a tu página, se genera una cadena aleatoria que se almacena en sesión (ej: hjenjappam).

El usuario ingresa su pw (ej: 1234) en cliente (antes de viajar por la red) se repite el ciclo de resumen criptográfico usado para almacenar las pw en la bd.

Luego al hash generado (que debiese ser idéntico al almacenado en la bd) se le añade la cadena aleatoria y se repite el ciclo de cifrado.

Se envía el resultado al servidor.

En el servidor por nombre de usuario se buscaría la pw (que ya tiene el primer ciclo de resumen) se le añadiría la cadena aleatoria y se realizaría el segundo ciclo de resumen criptográfico.

Si ambos valores coinciden se autoriza acceso.

Finalmente, en lo personal yo no te recomendaría crear tus propios algoritmos de cifrado, el 99,99% de las veces son muy muy vulnerables.

Espero te sirva de algo.

Clander
24 de Junio del 2004
Gracias por contestar tan rapidamente. Me imaginaba que la idea era aplicar diferentes tipos de conversiones en un orden que unicamente yo conozco.
Lo probare.
En cuanto a las contraseñas que viajan desde el cliente al servidor, tambien habia leido sobre ese metodo que tu comentas... Pero lo que esta claro es que lo mejor es un servidor seguro donde todas las comunicaciones van encriptadas.

Gracias nuevamente a los dos, un saludo.

frenchita
24 de Junio del 2004
te podés armar tu propio diagrama de encriptación.

por ejemplo si mi contraseña es:
daniel
la encriptación puede ser
ebñjfm

Igual hay programas que desencriptan md5 pero no desencriptan todo, por ejemplo desencriptan hasta 12 caracteres y no te das una idea de lo que tarda en desencriptar 12 caracteres, podés estar tranquilo 1 mes corriendo el proceso.
Y caracteres de este tipo ~ | ` ? ¿ no están contemplados en este tipo de programas.

Espero que te sirva. Saludos