2012-06-23 28 views
5

En primer lugar, debería decir que soy relativamente nuevo en la programación, así que sea amable conmigo si esta es una pregunta ingenua o tonta.¿Por qué md5 todavía se usa ampliamente?

Ok, entonces estoy en el proceso de escribir una pequeña aplicación, parte de la cual implicará contraseñas de usuario hash. Después de investigar la mejor manera de hacerlo, md5 aparece como una sugerencia, casi tantas veces como aparece en artículos que critican su uso.

Las alternativas son las de SHA-1, etc., que son más fuertes y tienen menos probabilidades de agrietarse. Esto tiene perfecto sentido.

Para llegar al punto:

  1. ¿Por qué es MD5 sigue siendo ampliamente utilizado para el hash
  2. ¿Debo descuento automáticamente MD5 para las contraseñas hashing, o hay casos de uso específicos en los que su uso sería en realidad mejor que otros mecanismos hash?
+0

posible duplicado de [PHP puede manejar más de 40 algoritmos de hash. Entonces, ¿por qué md5 es el estándar de facto?] (Http://stackoverflow.com/questions/11062597/php-can-handle-40-hashing-algorithms-so-why-is-md5-the-de-facto-standard) – hakre

Respuesta

8

Ni MD5 ni SHA-1 se deben usar para contraseñas hash. Están diseñados para ser rápidos de calcular, que es exactamente lo que no quieres. Si las personas están utilizando estos algoritmos hash para contraseñas hash, es probable porque no conocen las alternativas.

En su lugar, debe utilizar algo como bcrypt que está diseñado específicamente para este propósito. Se puede configurar para que sea tan difícil de calcular como sea necesario. A medida que las computadoras se vuelven más rápidas, puede agregar más rondas al cálculo para que tome más tiempo. Esto ralentizará a los atacantes que se apoderen de los hashes y traten de usar ataques basados ​​en la fuerza bruta o en el diccionario para obtener las contraseñas.

relacionada

+0

Gracias Mark. Parece ser el consus entre las respuestas que brypt es una mejor solución. Voy a investigar esto como una opción. ¿Sabes si habría problemas de rendimiento en los sitios web de gran tráfico, utilizando esto como un método de autenticación para sus usuarios? –

+0

@JohnMoore: Siempre puede haber problemas de rendimiento en sitios web de gran tráfico, independientemente del método de autenticación que utilice.La autenticación normalmente solo será una pequeña parte de la carga total del servidor. –

+0

esto no es una respuesta completa. si es tan sencillo como usted lo dice, ¿por qué las aplicaciones tan utilizadas como wordpress y joomla usan hash md5 directo para las contraseñas de los usuarios? ¡No sé la respuesta, pero tengo mucha curiosidad! – giorgio

0

¿Por qué es MD5 sigue siendo ampliamente utilizado para hash

Está perfectamente bien, si usted quiere, por ejemplo, verifique la validez de un programa (md5 su ISO). Que algunas personas lo usen para cosas que no deberían ser usadas (nunca más) no debería ser de su incumbencia, y es inresponsable :)

¿Debería descontarlo automáticamente, o hay casos de uso específicos donde su ¿El uso sería mejor que otros mecanismos hash?

Sí. Descárguelo si lo está usando para contraseñas. Ya ha encontrado debilidades, pero vea lo que dice @markbyers sobre lo que debe usar, p. bcrypt

+0

En realidad, para validar trozos grandes de datos (es decir, un ISO) donde un atacante también tiene acceso al ISO original, MD5 no es una buena opción. Estas son exactamente las condiciones adecuadas para el segundo ataque de preimagen conocido en MD5 y permitiría a un atacante incluir contenido adicional en el ISO y aún así tenerlo validado. – Alnitak

+1

Claro, comprobar un ISO de una fuente desconocida necesita más seguridad. Por otro lado, si tengo un programa en mi sitio, agrego un MD5 para evitar problemas de descarga. Si un atacante cambió mi ISO, seguro que también puede cambiar el mencionado hash MD5 en ese mismo sitio, entonces ¿por qué molestarse? De todos modos, fue solo un ejemplo para dar una de las razones por las que la gente lo usa, porque esa era la pregunta. Nunca dije que no hubiera ningún problema con eso ... – Nanne

+0

ese no es el punto: los hashes MD5 a menudo se publican por separado a través de un canal diferente, por lo que no es factible que un hacker cambie tanto el archivo como el resumen publicado. El punto que estaba tratando de hacer es que MD5 todavía está (en términos de criptoanálisis puros) tan bueno como siempre para las contraseñas, pero _no_ para la validación de archivos. Lo único que ha cambiado es w.r.t. La validación de contraseñas es que la ley de Moore hace que sea factible probar millones de contraseñas por segundo. – Alnitak

1

Por la misma razón se usan las funciones mysql_*, la mayoría de los recursos y tutoriales en la web están obsoletos con información, causando que los programadores novatos los usen a ciegas (¡porque el tutorial lo dice!).

No culpo a los nuevos programadores, culpo a los fabricantes de tutoriales por no actualizar sus tutoriales. El algoritmo de búsqueda de Google también suele tener en cuenta la edad y muestra entradas más antiguas en el resultado de búsqueda.

En cuanto a las alternativas, creo que Mark Byers lo dijo mejor que yo.

0

¿Por qué md5 todavía se usa ampliamente para hash?

No lo es. Incluso Wordpress lo abandonó hace años. Y Wordpress es ampliamente utilizado.

¿Debo descontarlo automáticamente, o hay casos de uso específicos en los que su uso sería en realidad mejor que otros mecanismos hash?

No tengo ni idea de lo que quieres decir. Utilice un algoritmo de hashing que sea adecuado para el hash de contraseñas y no debería preocuparse demasiado.

0

MD5 es todavía razonablemente seguro de usar para la mayoría de los casos [*], siempre y cuando se utiliza un buen "sal" para mezclar con la contraseña real antes de que sea encriptada.

Todavía no se conoce otra forma que no sea la fuerza bruta para lograr un "primer ataque previo a la imagen" en MD5, es decir, dado un hash, descubra cuál fue la contraseña original.

La "sal" mencionada anteriormente es necesaria para garantizar que sus contraseñas encriptadas no puedan buscarse trivialmente en una "tabla de arcoíris" u otras listas existentes de "cadena para digerir".

La reciente fuga de contraseña de Linked-In es un buen ejemplo de por qué la sal es importante. No consiguieron saltear las contraseñas de sus usuarios, por lo que muchas de las contraseñas se invirtieron trivialmente porque los valores hash de esas contraseñas ya se calcularon (y en muchos casos se encontraron a través de Google).

Lo que todavía no debes hacer es tener la sal en sí fácilmente determinada. Si el atacante puede determinar cuál es la sal, todas las apuestas están desactivadas, porque entonces los mecanismos de fuerza bruta descritos en el artículo publicado por Florian vuelven a estar disponibles. Una buena sal debería ser larga, y no debería usar la misma sal para cada usuario.

Las únicas debilidades verdaderas hasta el momento se encuentran en MD5 en sí han sido maneras de producir un nuevo archivo que logra como resultado el mismo MD5 como otro archivo, cuando ya conoce el contenido del archivo original. Esto se conoce como un "segundo ataque previo a la imagen", y es irrelevante cuando se considera el uso de un algoritmo hash para el cifrado de contraseñas.

Dicho todo esto, si hay disponible un mejor algoritmo (SHA-2, bcrypt), ¡también puede usarlo!

[*] Sin embargo, ¡yo no usaría MD5 para nada relacionado con el comercio electrónico!

+0

MD5 ya no es seguro para nada relacionado con la seguridad. Especialmente no contraseñas. Incluso si no se han encontrado fallas en MD5, aún no sería apropiado para las contraseñas porque es demasiado rápido. [Salt would ** not ** ha guardado LinkedIn] (http://security.stackexchange.com/q/15910/1472). Hoy en día es más rápido forzar una contraseña de MD5 (o SHA1) que leer la tabla del disco. Los hashes de LinkedIn ya habían sido engañados antes de filtrarse, lo que no podría haber sucedido si se hubiera usado sal. La familia SHA2 es demasiado rápida. Usa bcrypt, scrypt o PBKDF2. – Ladadadada

+0

@Ladadadada Seguro, use bcrypt, scrypt, lo que sea, estoy de acuerdo en que todo eso es una buena práctica. Pero el hecho es que con una sal correctamente aleatoria (digamos 256 bits) donde cada contraseña tiene una sal diferente y es desconocida para el hacker, llevaría más tiempo que la vida del universo a fuerza bruta MD5 incluso con cada tarjeta NVidia jamás creada . Sería mucho más rápido obligar brutalmente el inicio de sesión de la contraseña a un intento por segundo que a la fuerza bruta del hash. Y la mayoría de los comentarios sobre la respuesta a la que se vinculó parecen estar de acuerdo con eso. – Alnitak

+0

Comprobando todo el espacio de claves de MD5, seguro, más tiempo que la duración del universo. Comprobando 8 caracteres de todo el ASCII imprimible configurado como MD5? 35 días con una sola Radeon HD 5830 por $ 170 [usando esta tabla] (http://golubev.com/gpuest.htm). Y probablemente la mitad en promedio para encontrar la contraseña. Salt no cambia el tiempo necesario para verificar una sola contraseña (a menos que sea lo suficientemente grande como para que el acceso al disco sea el cuello de botella). Solo obliga a que cada contraseña se descifre individualmente. Y explique cómo 1 intento por segundo puede ser más rápido que 3.3 mil millones por segundo. – Ladadadada

Cuestiones relacionadas