Diga no al md5
Hoy vi cierto proyecto ultra secreto del que no puedo decir nada… Cuestión que lo instalo en mi servidor, voy a crear mi usuario en la tabla users, y veo que el password está encriptado en md5.
Alguién me puede explicar para que se usa esto?
Como seguridad no tiene ningún sentido porque hay cientos de miles de decriptadores (por ejemplo este).
Lo único que hace es hacerme perder el tiempo a mi, o a la persona de soporte técnico o mantenimiento de la aplicación.
Si me estoy perdiendo de algo que alguien me avise, pero como consejo, si vas a encriptar los passwords de los usuarios, usa un algortimo distinto de md5. Para eso, no hagas nada y ya.


Comentarios
# - 2006-11-27
MD5 no es una función criptográfica, sino que es una función que genera un Hash [1] en base un texto dado.
Porque se guardan las password pasadas por una función de este tipo ? por un tema de seguridad….. si te roban la base de datos o un usuario mal intensionado la mira, nunca sabrá la clave original ya que deducir el texto original en base el digesto es difícil….. en teoría….. ya que MD5 esta casi quebrado en este momento.. por eso lo recomendable es utilizar una función SHA1 como mínimo.
Es una buena práctica guardar las password pasadas por una función de Hash. Para reforzar la seguridad de las funciones de Hash se utiliza un texto adicional denominado Salt para ayudar a evitar la búsqueda por diccionario.
[1] http://es.wikipedia.org/wiki/Hash
# - 2006-11-27
@nelson: Pero descubrir el texto original despues de pasarlo por md5 es muy facil, en el sitio que puse tiras el resultado y te lo devuelve en un segundo…
Entiendo que este bueno guardar las claves encriptadas, pero a lo que voy es, que sentido tiene guardarlas pasadas por una funcion que no es para nada segura?
Eso, o no te entendi bien, de todas formas, excelente comentario el tuyo.
# - 2006-11-27
@nelson: Me puse a hacer unas pruebas con el decriptador que habia encontrado, y veo que en realidad no decripta nada, lo que hace es tener una base de datos de claves y hashs :S.
# - 2006-11-28
como te comentaba, para reforzar el uso de hash lo que se utiliza es agregarle al texto a ‘hashear’ otro texto (denominado salt) de esa forma evitas que te lo saquen con una base de datos de hash por fuerza bruta como la que vos usastes.
en este momento usar MD5 y no usar salt es lo mismo que nada, justamente por lo que vos probastes con ese sitio.
algo mejor es usar md5 con salt.
# - 2006-11-28
@nelson: Ahora si te entendí :-).
Y por mas que se descubra cual es el texto Salt, es practicamente indescifrable porque esta combinado con el password. Asi si tiene sentido la cosa!
# - 2006-11-28
Y como hacés vos normalmente para guardar las contraseñas en la DB Diego?
# - 2006-11-28
@ckozus: Las guardaba directamente, me parecia muy tonto esconderlas atras de algo que tan facilmente se puede descubrir el texto original.
Ahora conociendo la tecnica que tiro Nelson es otra cosa.
Mirando las DBs que tengo veo que ni WordPress usa lo del salt… parece que no es algo muy difundido!
# - 2006-11-28
Sha1 también fue comprometido: http://www.php.net/manual/en/function.sha1.php#70474
Ahora la honda es usar hash () :P
# - 2006-11-28
No entendí. :(
Donde (y como) se mete el texto Salt dentro del password?
# - 2006-11-28
pwd_hasheada = md5(pwd_ingresada + “me gusta el vino tinto”)
# - 2006-11-28
Hey, muy buena data. Si bien sabia que el MD5 no es infalible, no tenia en cuenta lo del Salt. Ya se aplica a mis proximos algoritmos de login.
La verdad que es una de esas cosas simples que decis, “como no se me ocurrio antes, si es una boludes”.
Victor, mezclas el password original con el texto, los concatenas o si queres mezclas uno a uno los caracteres. Como el texto “Salt” es siempre el mismo, mezclado siempre de la misma manera con el password correcto debe dar por resultado el MD5 correcto.
A esta nota le doy mis 10 puntos, oops, eso era en taringa. :P
# - 2006-11-28
Y en el caso de un software opensource, como Wordpress? Digo porque ahí, el texto salt va a ser conocido…o no?
# - 2006-11-28
Los programas open source por lo general te invitan a cambiar el salt en el archivo de configuración cuando los instalás. No recuerdo si el WP en particular lo hace (creo que no).
# - 2006-11-28
Sí, es una buena estrategia.
Me diste el pie para un nuevo Feature Request para sabros.us, fantastico!
# - 2006-11-28
igual, aun descubriendo el salt seria muy dificil de descubrir la contraseña original.
Las bases de datos no tienen registros para claves de tantos caracteres, solo las mas comunes por lo que vi.
# - 2006-11-28
A su vez el salt es recomendable que sea otro string pre encriptado. Las contraseñas en una base de datos SIEMPRE deben estar encriptadas.. SIEMPRE.
# - 2006-11-29
Por si no quedo claro, SIEMPRE!
# - 2006-12-02
Nosotros usamos la función crypt de PHP que genera hashes MD5 con salt, y ademas comprobar la validez de el hash es una bobada.
# - 2006-12-04
Yo conozco a mas de un “WebMaster” que chorea passes de su propia base de datos de usuarios. PATETICO pero real.
# - 2006-12-04
@Adrian: Y… hay gente para todo…
# - 2007-05-07
la verdad esas opiniones de hash y agregarle texto y eso me parece totalmente irrelevante a la final si quieres un password encriptado y no lo encuentren a la fuerza bruta es tan sencillo q cuando lo registren hagan un funcion q haga q tenga tanto letras como numeros o cualquier otro caracter y se acaba el problema de fuerza bruta :S…. y q sepa es unidireccional esa convercion aunque hay unos tips q salieron q al parecer saldra un md6 pero no tiene nada q ver el agregarle o no a la password original ¬¬
# - 2007-09-24
yo quisiero por favor que me expliquen como puedo desbloquear mi base de datos, ya que no recuerdo el password, y tengo mucha información importante les agradeceria muchas gracias, o de otra forma puedo obtener los nombre de las tablas que contenian mi base de datos o algo para obtener mis registros, muchas gracias
# - 2010-05-29
Jesus Guzman, en eso estas equivocado, si vas a utilizar md5 en estos tiempos, lo mejor es utilizarlo con un salt, quizas se acabe el problema de fuerza bruta como tu dices al utilizar distintos juegos de caracteres, pero si haces un SQLi (sql injection) y obtienes la contraseña de algun user o admin, simplemente pasas ese hash por una database como la de ellos para encontrar una coincidencia con un texto plano, y voila, tienes la contraseña, yo por mi parte, prefiero utilizar sha1 con salt, existen menos databases con paswords en sha1 que md5, pero una alternativa muy viable es utilizar sha256 o sha512, esta ultima tambien la utilizo con salt (mas seguridad) en DB mas pequeñas.