¿Se considera que MD5 es inseguro?

77

Después de todos estos artículos que circulan en línea sobre exploits md5 , estoy considerando cambiar a otro algoritmo hash. Por lo que sé, siempre ha sido el algoritmo de elección entre numerosos DBA. ¿Es tan beneficioso usar MD5 en lugar de (SHA1, SHA256, SHA384, SHA512), o es un problema de rendimiento puro?

¿Qué otro hash recomienda (teniendo en cuenta las aplicaciones vinculadas a datos como la plataforma)? Estoy utilizando hashes salados actualmente (MD5 saldos hashes). Tenga en cuenta tanto los hashes de archivos md5 como los de contraseña.

    
pregunta Tawfik Khalifeh 08.09.2012 - 19:21
fuente

7 respuestas

99

MD5 para contraseñas

Usar md5 con sal para contraseñas es una mala idea. No debido a las debilidades criptográficas de MD5, sino porque es rápido. Esto significa que un atacante puede probar miles de millones de contraseñas candidatas por segundo en una sola GPU.

Lo que deberías usar son construcciones hash deliberadamente lentas, como scrypt, bcrypt y PBKDF2. El SHA-2 con sal simple no es lo suficientemente bueno porque, como la mayoría de los hashes de propósito general, es rápido. Consulte ¿Cómo hash seguro las contraseñas? para obtener detalles sobre lo que debe usar.

MD5 para integridad de archivos

El uso de MD5 para la integridad de los archivos puede o no ser un problema práctico, dependiendo de su escenario de uso exacto.

Los ataques contra MD5 son ataques de colisión, no ataques previos a la imagen. Esto significa que un atacante puede producir dos archivos con el mismo hash, si tiene control sobre ambos. Pero no puede igualar el hash de un archivo existente en el que no influyó.

No sé si los ataques se aplican a su aplicación, pero personalmente, empezaría a migrar incluso si cree que no es así. Es demasiado fácil pasar por alto algo. Mejor prevenir que lamentar.

La mejor solución en este contexto es SHA-2 (SHA-256) por ahora. Una vez que se estandarice el SHA-3, también será una buena opción.

    
respondido por el CodesInChaos 08.09.2012 - 21:10
fuente
31

Para completar la respuesta de @CodesInChaos, MD5 se usa a menudo debido a la Tradición , no por el rendimiento. Las personas que tratan con bases de datos no son las mismas personas que tratan con seguridad. A menudo no ven ningún problema en el uso de algoritmos débiles (por ejemplo, vea la broma de un algoritmo que MySQL estaba usando para las contraseñas de hashing). Usan MD5 porque solían usar MD5 y están acostumbrados a usar MD5.

El rendimiento se discute mucho más a menudo que lo medido; y, sin embargo, lógicamente, no puede haber un problema de rendimiento si no hay nada que medir. Usando un núcleo de una CPU básica, puede hacer hash de más de 400 MB por segundo con MD5, más cercano a 300 MB / s con SHA-1, y 150 MB / s con SHA-256. Por otro lado, un disco duro decente producirá datos a una tasa aún más baja (100 a 120 MB / s sería típico), por lo que la función hash casi nunca es el cuello de botella. En consecuencia, no hay ningún problema de rendimiento en relación con el hash en las bases de datos.

Las recomendaciones habituales, para funciones hash, son:

  1. No lo hagas. No debe usar algoritmos criptográficos elementales, sino protocolos que reúnen varios algoritmos para que proporcionen colectivamente algunas características de seguridad (por ejemplo, transferencia de datos con confidencialidad e integridad).

  2. Realmente, no lo hagas. Para almacenar contraseñas (más precisamente, tokens de verificación de contraseña), no realice una combinación personalizada de funciones hash y sales; use una construcción que haya sido estudiada específicamente para tal uso. Esto normalmente significa un cifrado de PBKDF2 .

  3. Si una función hash es realmente lo que hace el trabajo, entonces use SHA-256. Considere utilizar cualquier otra función solo si se detectó y midió debidamente algún problema grave con SHA-256 (probablemente rendimiento ).

respondido por el Thomas Pornin 24.02.2013 - 04:43
fuente
5
  

Actualmente estoy utilizando hash salados (hash MD5 salados).

Si está aprovechando los hashes MD5, definitivamente no desea utilizar MD5. Parece que necesitas usar PBKDF2 o bcrypt.

  

Por lo que sé, siempre ha sido el algoritmo de elección entre numerosos DBA.

Eso no es una razón convincente.

He trabajado con muchos DBA que tienen al menos 5 años de retraso en tecnología general (no uso de control de versiones, scripts de Perl sin formato para todo, etc.). Podrían haber sido DBA particularmente malos, pero creo que viene con la mentalidad extremadamente conservadora de no cambiar las cosas.

    
respondido por el rox0r 10.09.2012 - 04:11
fuente
4

Solo para complementar las respuestas ya dadas (la mayoría de las cuales son excelentes) ahora tenemos un ejemplo del mundo real en el que una violación de datos (Ashley Madison) lleva a la filtración de la tabla de contraseñas completa. Usaron bcrypt con un salt aleatorio para codificar las contraseñas. Un investigador de seguridad decidió tomar esos hashes y fuerza bruta. Este fue el resultado

  

Como resultado de todo esto, bcrypt está imponiendo demandas hercúleas a cualquiera que intente romper el vertedero de Ashley Madison por al menos dos razones. Primero, 4,096 iteraciones de hashing requieren grandes cantidades de potencia de cómputo. En el caso de Pierce, bcrypt limitó la velocidad de su plataforma de craqueo de cuatro GPU a 156 suposiciones por segundo. Segundo, debido a que los hash de bcrypt están salados, su plataforma debe adivinar el texto simple de cada hash uno a la vez, en lugar de todos al unísono.

     

"Sí, así es, 156 hashes por segundo", escribió Pierce. "Para alguien que está acostumbrado a descifrar contraseñas de MD5, esto se ve bastante decepcionante, pero es un cifrado, así que tomaré lo que pueda obtener".

     

Pierce se rindió una vez que pasó la marca de 4.000. Estimó que para ejecutar los seis millones de hashes en el grupo limitado de Pierce contra las contraseñas de RockYou se necesitarían la friolera de 19,493 años. Con un total de 36 millones de contraseñas con hash en el vertedero de Ashley Madison, habrían tardado 116,958 años en completar el trabajo.

Al final del día, los únicos que pudo descifrar fueron las contraseñas ridículamente simples o comunes (como "123456").

    
respondido por el Machavity 28.10.2015 - 15:28
fuente
0

Sí, MD5 es inseguro y también lo es SHA-1, recomiendo usar SHA-256 si el tamaño del resumen es un problema. Recuerde, si lo almacena en una columna BINARIA, tomará menos espacio que si se almacena en CHAR. Sólo asegúrese de que se haga correctamente. MD5 es aproximadamente 2.3 veces más rápido que SHA-256. Hay más puntos de referencia en enlace

    
respondido por el Matrix 08.09.2012 - 19:37
fuente
0

Para decirlo brevemente, es bastante inseguro ahora debido a las tablas del arco iris, la tabla del arco iris es una lista de hashes MD5 y sus cadenas coincidentes. Así que básicamente consideraría otras alternativas como SHA1

    
respondido por el Shane 20.06.2013 - 10:50
fuente
-1


Todos están hablando de inseguridad, pero ninguno de ustedes ha dado una respuesta directa a la pregunta.

He estado trabajando con MD5 y Sha512, ambos fueron fáciles de descifrar una vez que puse a mi pequeño experto en piratería, ¡hasta que ambos nos golpearon como un trueno! La forma más simple y efectiva de detener los "ataques masivos" como los descritos anteriormente, es establecer un limitador de intentos de inicio de sesión, lo que significa:

function checkbrute($user_id, $mysqli) {
 // Get timestamp of current time
   $now = time();
   // All login attempts are counted from the past 2 hours. 
   $valid_attempts = $now - (2 * 60 * 60); 

   if ($stmt = $mysqli->prepare("SELECT time FROM login_attempts WHERE user_id = ? AND time > '$valid_attempts'")) { 
  $stmt->bind_param('i', $user_id); 
  // Execute the prepared query.
  $stmt->execute();
  $stmt->store_result();
  // If there has been more than 5 failed logins
  if($stmt->num_rows > 5) {
     return true;
  } else {
     return false;
  }
}
}


¿Tienes mi punto?
La cantidad máxima de combinaciones que el hacker quiere probar, está limitado a 5 fallos por 2 horas. Incluso puedes bloquear al usuario después de X intentos.

    
respondido por el Dom 20.06.2013 - 09:57
fuente

Lea otras preguntas en las etiquetas