De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

El algoritmo de resumen de mensajes MD5 es una función hash muy utilizada que produce un valor hash de 128 bits . Aunque MD5 se diseñó inicialmente para ser utilizado como una función hash criptográfica , se ha descubierto que adolece de amplias vulnerabilidades. Todavía se puede usar como suma de comprobación para verificar la integridad de los datos , pero solo contra daños no intencionales. Sigue siendo adecuado para otros fines no criptográficos, por ejemplo, para determinar la partición para una clave particular en una base de datos particionada. [3]

MD5 fue diseñado por Ronald Rivest en 1991 para reemplazar una función hash anterior MD4 , [4] y se especificó en 1992 como RFC 1321.

Un requisito básico de cualquier función hash criptográfica es que debería ser computacionalmente inviable encontrar dos mensajes distintos que tengan el mismo valor hash. MD5 falla este requisito catastróficamente; tales colisiones se pueden encontrar en segundos en una computadora doméstica ordinaria.

Las debilidades de MD5 han sido explotadas en el campo, de manera más infame por el malware Flame en 2012. El Instituto de Ingeniería de Software CMU considera MD5 esencialmente "criptográficamente roto e inadecuado para su uso posterior". [5]

A partir de 2019 , MD5 continúa utilizándose ampliamente, a pesar de sus debilidades bien documentadas y su desaprobación por parte de los expertos en seguridad. [6]

Historia y criptoanálisis [ editar ]

MD5 es uno de una serie de algoritmos de resumen de mensajes diseñados por el profesor Ronald Rivest del MIT (Rivest, 1992). Cuando el trabajo analítico indicó que era probable que el predecesor MD4 de MD5 fuera inseguro, Rivest diseñó MD5 en 1991 como un reemplazo seguro. ( Hans Dobbertin sí encontró más tarde debilidades en MD4).

En 1993, Den Boer y Bosselaers dieron un resultado temprano, aunque limitado, de encontrar una " pseudo-colisión " de la función de compresión MD5 ; es decir, dos vectores de inicialización diferentes que producen un resumen idéntico.

En 1996, Dobbertin anunció una colisión de la función de compresión de MD5 (Dobbertin, 1996). Si bien esto no fue un ataque a la función hash MD5 completa, estuvo lo suficientemente cerca para que los criptógrafos recomendaran cambiar a un reemplazo, como SHA-1 o RIPEMD-160 .

El tamaño del valor hash (128 bits) es lo suficientemente pequeño como para contemplar un ataque de cumpleaños . MD5CRK fue un proyecto distribuido iniciado en marzo de 2004 con el objetivo de demostrar que MD5 es prácticamente inseguro al encontrar una colisión mediante un ataque de cumpleaños.

MD5CRK terminó poco después del 17 de agosto de 2004, cuando Xiaoyun Wang , Dengguo Feng, Xuejia Lai y Hongbo Yu anunciaron las colisiones del MD5 completo . [7] [8] Se informó que su ataque analítico tomó solo una hora en un clúster IBM p690 . [9]

El 1 de marzo de 2005, Arjen Lenstra , Xiaoyun Wang y Benne de Weger demostraron la construcción de dos certificados X.509 con diferentes claves públicas y el mismo valor hash MD5, una colisión demostrablemente práctica. [10] La construcción incluyó claves privadas para ambas claves públicas. Unos días más tarde, Vlastimil Klima describió un algoritmo mejorado, capaz de construir colisiones MD5 en unas pocas horas en una sola computadora portátil. [11] El 18 de marzo de 2006, Klima publicó un algoritmo que podía encontrar una colisión en un minuto en una sola computadora portátil, utilizando un método que él llama tunelización. [12]

Se han publicado varias erratas de RFC relacionadas con MD5 . En 2009, el Cyber ​​Command de Estados Unidos utilizó un valor hash MD5 de su declaración de misión como parte de su emblema oficial. [13]

El 24 de diciembre de 2010, Tao Xie y Dengguo Feng anunciaron la primera colisión MD5 de bloque único (512 bits) publicada. [14] (Los descubrimientos de colisiones anteriores se habían basado en ataques de bloques múltiples). Por "razones de seguridad", Xie y Feng no revelaron el nuevo método de ataque. Lanzaron un desafío a la comunidad criptográfica, ofreciendo una recompensa de US $ 10,000 al primer buscador de una colisión diferente de 64 bytes antes del 1 de enero de 2013. Marc Stevens respondió al desafío y publicó mensajes de bloque único que colisionan, así como el algoritmo de construcción y fuentes. [15]

En 2011 se aprobó una RFC 6151 [16] informativa para actualizar las consideraciones de seguridad en MD5 [17] y HMAC-MD5. [18]

Seguridad [ editar ]

La seguridad de la función hash MD5 se ve seriamente comprometida. Existe un ataque de colisión que puede encontrar colisiones en segundos en una computadora con un procesador Pentium 4 a 2.6 GHz (complejidad de 2 24.1 ). [19] Además, también hay un ataque de colisión de prefijo elegido que puede producir una colisión para dos entradas con prefijos especificados en segundos, utilizando hardware informático estándar (complejidad 2 39 ). [20] La capacidad de encontrar colisiones se ha visto favorecida en gran medida por el uso de GPU estándar.. En un procesador de gráficos NVIDIA GeForce 8400GS, se pueden calcular entre 16 y 18 millones de hashes por segundo. Una NVIDIA GeForce 8800 Ultra puede calcular más de 200 millones de hashes por segundo. [21]

Estos ataques hash y de colisión se han demostrado en público en diversas situaciones, incluidos archivos de documentos en colisión [22] [23] y certificados digitales . [24] A partir de 2015, se demostró que MD5 todavía se utiliza bastante, sobre todo por las empresas de investigación de seguridad y antivirus. [25]

A partir de 2019, se informó que una cuarta parte de los sistemas de administración de contenido ampliamente utilizados todavía usaban MD5 para el hash de contraseñas . [6]

Resumen de problemas de seguridad [ editar ]

En 1996, se encontró una falla en el diseño de MD5. Si bien no se consideró una debilidad fatal en ese momento, los criptógrafos comenzaron a recomendar el uso de otros algoritmos, como SHA-1 , que desde entonces también se ha encontrado vulnerable. [26] En 2004 se demostró que MD5 no es resistente a colisiones . [27] Como tal, MD5 no es adecuado para aplicaciones como certificados SSL o firmas digitales que dependen de esta propiedad para la seguridad digital. También en 2004, los investigadores descubrieron fallas más serias en MD5 y describieron un posible ataque de colisión , un método para crear un par de entradas para las cuales MD5 produce sumas de verificación idénticas .[7] [28] Se hicieron más avances para romper MD5 en 2005, 2006 y 2007. [29] En diciembre de 2008, un grupo de investigadores utilizó esta técnica para falsificar la validez del certificado SSL. [24] [30]

A partir de 2010, el Instituto de Ingeniería de Software de CMU considera MD5 "criptográficamente roto e inadecuado para su uso posterior", [31] y la mayoría de las aplicaciones del gobierno de EE. UU. Ahora requieren la familia SHA-2 de funciones hash. [32] En 2012, el malware Flame aprovechó las debilidades de MD5 para falsificar una firma digital de Microsoft . [33]

Vulnerabilidades de colisión [ editar ]

En 1996, se encontraron colisiones en la función de compresión de MD5, y Hans Dobbertin escribió en el boletín técnico de RSA Laboratories : "El ataque presentado aún no amenaza las aplicaciones prácticas de MD5, pero se acerca bastante ... en el futuro, MD5 debería ya no se implementará ... donde se requiera una función hash resistente a colisiones ". [34]

En 2005, los investigadores pudieron crear pares de documentos PostScript [35] y certificados X.509 [36] con el mismo hash. Más tarde ese año, el diseñador de MD5, Ron Rivest, escribió que "md5 y sha1 están claramente rotos (en términos de resistencia a colisiones)". [37]

El 30 de diciembre de 2008, un grupo de investigadores anunció en el 25º Congreso de Comunicación del Caos cómo habían utilizado las colisiones MD5 para crear un certificado de autoridad certificadora intermedia que parecía ser legítimo cuando lo verificaba su hash MD5. [24] Los investigadores utilizaron un grupo de unidades Sony PlayStation 3 en la EPFL en Lausana , Suiza [38] para cambiar un certificado SSL normal emitido por RapidSSL en un certificado CA funcional para ese emisor, que luego podría usarse para crear otros certificados. que parecería ser legítimo y emitido por RapidSSL. VeriSign, los emisores de certificados RapidSSL, dijeron que dejaron de emitir nuevos certificados utilizando MD5 como su algoritmo de suma de comprobación para RapidSSL una vez que se anunció la vulnerabilidad. [39] Aunque Verisign se negó a revocar los certificados existentes firmados con MD5, su respuesta fue considerada adecuada por los autores del exploit ( Alexander Sotirov , Marc Stevens , Jacob Appelbaum , Arjen Lenstra , David Molnar, Dag Arne Osvik y Benne de Weger) . [24] Bruce Schneier escribió sobre el ataque que "ya sabíamos que MD5 es una función hash rota" y que "nadie debería usar MD5 nunca más". [40]Los investigadores de SSL escribieron: "Nuestro impacto deseado es que las Autoridades de Certificación dejen de usar MD5 para emitir nuevos certificados. También esperamos que también se reconsidere el uso de MD5 en otras aplicaciones". [24]

En 2012, según Microsoft , los autores del malware Flame utilizaron una colisión MD5 para falsificar un certificado de firma de código de Windows. [33]

MD5 usa la construcción Merkle-Damgård , por lo que si se pueden construir dos prefijos con el mismo hash, se puede agregar un sufijo común a ambos para hacer que sea más probable que la colisión sea aceptada como datos válidos por la aplicación que lo usa. Además, las técnicas actuales de detección de colisiones permiten especificar un prefijo arbitrario : un atacante puede crear dos archivos en colisión que comienzan con el mismo contenido. Todo lo que el atacante necesita para generar dos archivos en colisión es un archivo de plantilla con un bloque de datos de 128 bytes, alineado en un límite de 64 bytes, que se puede cambiar libremente mediante el algoritmo de detección de colisiones. Un ejemplo de colisión MD5, con dos mensajes que difieren en 6 bits, es:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 8 712467eab 4004583eb8fb7f8955ad340609f4b302 83e4888325 7 1415a 085125e8f7cdc99f d91dbd f 280373c5bd8823e3156348f5b ae6dacd436c919c6 dd53e2 b 487da03fd 02396306d248cda0e99f33420f577ee8 ce54b67080 a 80d1e c69821bcb6a88393 96f965 2 b6ff72a70
d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 0 712467eab 4004583eb8fb7f8955ad340609f4b302 83e4888325 f 1415a 085125e8f7cdc99f d91dbd 7 280373c5bd8823e3156348f5b ae6dacd436c919c6 dd53e2 3 487da03fd 02396306d248cda0e99f33420f577ee8 ce54b67080 2 80d1e c69821bcb6a88393 96f965 a b6ff72a70

Ambos producen el hash MD5 79054025255fb1a26e4bc422aef54eb4. [41] La diferencia entre las dos muestras es que se ha invertido el bit inicial de cada nibble . Por ejemplo, el vigésimo byte (desplazamiento 0x13) en la muestra superior, 0x87, es 10000111 en binario. El bit inicial en el byte (también el bit inicial en el primer nibble) se invierte para hacer 00000111, que es 0x07, como se muestra en la muestra inferior.

Más tarde también se descubrió que era posible construir colisiones entre dos archivos con prefijos elegidos por separado. Esta técnica se utilizó en la creación del certificado de CA falso en 2008. Anton Kuznetsov propuso una nueva variante de búsqueda de colisiones paralelizadas utilizando MPI en 2014, que permitió encontrar una colisión en 11 horas en un clúster informático. [42]

Vulnerabilidad de preimagen [ editar ]

En abril de 2009, se publicó un ataque contra MD5 que rompe la resistencia de preimagen de MD5 . Este ataque es solo teórico, con una complejidad computacional de 2 123,4 para preimagen completa. [43] [44]

Aplicaciones [ editar ]

Los resúmenes MD5 se han utilizado ampliamente en el mundo del software para proporcionar cierta seguridad de que un archivo transferido ha llegado intacto. Por ejemplo, los servidores de archivos a menudo proporcionan una suma de verificación MD5 precalculada (conocida como md5sum ) para los archivos, de modo que un usuario pueda comparar la suma de verificación del archivo descargado con él. La mayoría de los sistemas operativos basados ​​en Unix incluyen utilidades de suma MD5 en sus paquetes de distribución; Los usuarios de Windows pueden utilizar la función incluida de PowerShell "Get-FileHash", instalar una utilidad de Microsoft, [45] [46] o utilizar aplicaciones de terceros. Las ROM de Android también utilizan este tipo de suma de comprobación.

Como es fácil generar colisiones MD5, es posible que la persona que creó el archivo cree un segundo archivo con la misma suma de comprobación, por lo que esta técnica no puede proteger contra algunas formas de manipulación maliciosa. En algunos casos, no se puede confiar en la suma de verificación (por ejemplo, si se obtuvo a través del mismo canal que el archivo descargado), en cuyo caso MD5 solo puede proporcionar la funcionalidad de verificación de errores: reconocerá una descarga corrupta o incompleta, que se convierte en más probable al descargar archivos más grandes.

Históricamente, MD5 se ha utilizado para almacenar un hash unidireccional de una contraseña , a menudo con extensión de clave . [47] [48] NIST no incluye MD5 en su lista de hash recomendados para el almacenamiento de contraseñas. [49]

MD5 también se utiliza en el campo del descubrimiento electrónico , con el fin de proporcionar un identificador único para cada documento que se intercambia durante el proceso de descubrimiento legal. Este método se puede utilizar para reemplazar el sistema de numeración de sellos de Bates que se ha utilizado durante décadas durante el intercambio de documentos en papel. Como se indicó anteriormente, este uso debe desalentarse debido a la facilidad de los ataques de colisión.

Algoritmo [ editar ]

Figura 1. Una operación MD5. MD5 consta de 64 de estas operaciones, agrupadas en cuatro rondas de 16 operaciones. F es una función no lineal; se utiliza una función en cada ronda. M i denota un bloque de 32 bits de la entrada de mensaje, y K i denota una constante de 32 bits, diferente para cada operación. <<< s denota una rotación de bit a la izquierda por s lugares; s varía para cada operación. denota suma módulo 2 32 .

MD5 procesa un mensaje de longitud variable en una salida de longitud fija de 128 bits. El mensaje de entrada se divide en partes de bloques de 512 bits (dieciséis palabras de 32 bits); el mensaje se rellena de modo que su longitud sea divisible por 512. El relleno funciona de la siguiente manera: primero se agrega un solo bit, 1, al final del mensaje. A esto le siguen tantos ceros como sean necesarios para llevar la longitud del mensaje hasta 64 bits menos que un múltiplo de 512. Los bits restantes se llenan con 64 bits que representan la longitud del mensaje original, módulo 2 64 .

El algoritmo principal MD5 opera en un estado de 128 bits, dividido en cuatro palabras de 32 bits, que se denota A , B , C , y D . Estos se inicializan a ciertas constantes fijas. A continuación, el algoritmo principal utiliza cada bloque de mensajes de 512 bits a su vez para modificar el estado. El procesamiento de un bloque de mensajes consta de cuatro etapas similares, denominadas rondas ; cada ronda se compone de 16 operaciones similares basadas en una función no lineal F , adición modular y rotación a la izquierda. La figura 1 ilustra una operación dentro de una ronda. Hay cuatro funciones posibles; se usa uno diferente en cada ronda:

denotan las operaciones XOR , AND , OR y NOT respectivamente.

Pseudocódigo [ editar ]

El hash MD5 se calcula de acuerdo con este algoritmo. [50] Todos los valores están en little-endian .

// : Todas las variables tienen 32 bits sin signo y se ajustan al módulo 2 ^ 32 al calcular var  int s [64], K [64] var  int i// s especifica las cantidades de turno por rondas [0..15]: = {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}s [16..31]: = {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}s [32..47]: = {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}s [48..63]: = {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}// Use la parte entera binaria de los senos de los enteros (radianes) como constantes: para i de 0 a 63 do K [i]: = floor (2 32 × abs (sin (i + 1))) end for // ( O simplemente use la siguiente tabla precalculada):K [0 .. 3]: = {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee}K [4 .. 7]: = {0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501}K [8..11]: = {0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be}K [12..15]: = {0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821}K [16..19]: = {0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa}K [20..23]: = {0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8}K [24..27]: = {0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed}K [28..31]: = {0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a}K [32..35]: = {0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c}K [36..39]: = {0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70}K [40..43]: = {0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05}K [44..47]: = {0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665}K [48..51]: = {0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039}K [52..55]: = {0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1}K [56..59]: = {0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1}K [60..63]: = {0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391}// Inicializar variables: var  int a0: = 0x67452301 // A var  int b0: = 0xefcdab89 // B var  int c0: = 0x98badcfe // C var  int d0: = 0x10325476 // D// Preprocesamiento: agregar un solo bit de 1 bit y agregar "1" bit al mensaje  // Aviso: los bytes de entrada se consideran cadenas de bits, // donde el primer bit es el bit más significativo del byte. [51]// Preprocesamiento: el relleno con ceros agrega el bit "0" hasta la longitud del mensaje en bits ≡ 448 (mod 512) agrega la longitud original en bits mod 2 64  al mensaje// Procesar el mensaje en sucesivos fragmentos de 512 bits: para cada fragmento de 512 bits de mensaje rellenado, haga dividir el fragmento en dieciséis palabras de 32 bits M [j], 0 ≤ j ≤ 15 // Inicializar el valor hash para este fragmento:  var  int A: = a0 var  int B: = b0 var  int C: = c0 var  int D: = d0  // Bucle principal:  para i de 0 a 63 do  var  int F, g si 0 ≤ i ≤ 15 entonces F: = (B y C) o (( no B) y D) g: = yo de lo contrario, si 16 ≤ i ≤ 31 entonces F: = (D y B) o (( no D) y C) g: = (5 × i + 1) mod 16 de lo contrario si 32 ≤ i ≤ 47 entonces F: = B xor C xor D g: = (3 × i + 5) mod 16 si no 48 ≤ i ≤ 63 entonces F: = C xor (B o ( no D)) g: = (7 × i) mod 16  // Tenga cuidado con las siguientes definiciones de a, b, c, d F: = F + A + K [i] + M [g] // M [g] debe ser un bloque de 32 bits A: = D D: = C C: = B B: = B + leftrotate (F, s [i]) end for  // Agrega el hash de este fragmento al resultado hasta ahora: a0: = a0 + A b0: = b0 + B c0: = c0 + C d0: = d0 + Dfinal paravar  char digest [16]: = a0 agregar b0 agregar c0 agregar d0 // (La salida está en little-endian)// definición de función leftrotate leftrotate (x, c) return (x << c) binary or (x >> (32-c));

En lugar de la formulación del RFC 1321 original que se muestra, se puede usar lo siguiente para mejorar la eficiencia (útil si se usa lenguaje ensamblador; de lo contrario, el compilador generalmente optimizará el código anterior. Dado que cada cálculo depende de otro en estas formulaciones, esto suele ser más lento que el método anterior donde el nand / y se puede paralelizar):

(0 ≤ i ≤ 15): F: = D xor (B y (C xor D))(16 ≤ i ≤ 31): F: = C xor (D y (B xor C))

Hash MD5 [ editar ]

Los hash MD5 de 128 bits (16 bytes) (también denominados resúmenes de mensajes ) se representan típicamente como una secuencia de 32 dígitos hexadecimales . A continuación, se muestra una entrada ASCII de 43 bytes y el hash MD5 correspondiente:

MD5 (" El rápido zorro marrón salta sobre el perro perezoso ") =9e107d9d372bb6826bd81d3542a419d6

Incluso un pequeño cambio en el mensaje resultará (con una probabilidad abrumadora) en un hash mayormente diferente, debido al efecto de avalancha . Por ejemplo, agregando un punto al final de la oración:

MD5 (" El rápido zorro marrón salta sobre el perro perezoso . ") =e4d909c290d0fb1ca068ffaddf22cbd0

El hash de la cadena de longitud cero es:

MD5 ("") = d41d8cd98f00b204e9800998ecf8427e

El algoritmo MD5 se especifica para mensajes que constan de cualquier número de bits; no se limita a múltiplos de ocho bits ( octetos , bytes ). Algunas implementaciones de MD5, como md5sum, pueden estar limitadas a octetos o pueden no admitir la transmisión de mensajes de una longitud inicialmente indeterminada.

Implementaciones [ editar ]

A continuación se muestra una lista de bibliotecas de criptografía que admiten MD5:

  • Botan
  • Castillo inflable
  • cryptlib
  • Cripto ++
  • Libgcrypt
  • Ortiga
  • OpenSSL
  • loboSSL

Ver también [ editar ]

  • Comparación de funciones hash criptográficas
  • Resumen de seguridad de la función hash
  • HashClash
  • MD5Crypt
  • md5deep
  • md5sum
  • MD6
  • SHA-1

Referencias [ editar ]

  1. ^ Rivest, R. (abril de 1992). "Paso 4. Procesar mensaje en bloques de 16 palabras" . El algoritmo MD5 Message-Digest . IETF . pag. 5. seg. 3.4. doi : 10.17487 / RFC1321 . RFC 1321 . Consultado el 10 de octubre de 2018 .
  2. ^ Xie Tao; Fanbao Liu y Dengguo Feng (2013). "Ataque de colisión rápido en MD5" (PDF) . Cite journal requiere |journal=( ayuda )
  3. ^ Kleppmann, Martin (2 de abril de 2017). Diseño de aplicaciones con uso intensivo de datos: las grandes ideas detrás de los sistemas confiables, escalables y mantenibles (1 ed.). O'Reilly Media. pag. 203. ISBN 978-1449373320.
  4. ^ Ciampa, Mark (2009). CompTIA Security + 2008 en profundidad . Australia; Estados Unidos: Tecnología de cursos / Aprendizaje Cengage. pag. 290 . ISBN 978-1-59863-913-1.
  5. ^ Chad R, Dougherty (31 de diciembre de 2008). "Nota de vulnerabilidad VU # 836068 MD5 vulnerable a ataques de colisión" . Base de datos de notas de vulnerabilidad . Instituto de Ingeniería de Software de la Universidad Carnegie Mellon CERT . Consultado el 3 de febrero de 2017 .
  6. ^ a b Cimpanu, Catalin. "Una cuarta parte de los principales CMS utilizan MD5 obsoleto como esquema de hash de contraseña predeterminado" . ZDNet . Consultado el 17 de junio de 2019 .
  7. ^ a b J. Black, M. Cochran, T. Highland: Un estudio de los ataques MD5: Perspectivas y mejoras Archivado el 1 de enero de 2015 en Wayback Machine , 3 de marzo de 2006. Consultado el 27 de julio de 2008.
  8. ^ Hawkes, Philip; Paddon, Michael; Rose, Gregory G. (13 de octubre de 2004). "Reflexiones sobre la colisión de Wang et al. MD5" . Archivo ePrint de criptología . Archivado desde el original el 5 de noviembre de 2018 . Consultado el 10 de octubre de 2018 .
  9. ^ Bishop Fox (26 de septiembre de 2013). "Generadores rápidos de colisión MD5 y MD4" . Consultado el 10 de febrero de 2014 . Implementación más rápida de técnicas en Cómo romper MD5 y otras funciones hash , por Xiaoyun Wang, et al. Tiempo de ejecución medio antiguo (2006) en la supercomputadora IBM P690: 1 hora. Nuevo tiempo de ejecución medio en PC P4 de 1,6 GHz: 45 minutos.
  10. ^ Lenstra, Arjen ; Wang, Xiaoyun ; Weger, Benne de (1 de marzo de 2005). "Chocando certificados X.509" . Archivo ePrint de criptología . Consultado el 10 de octubre de 2018 .
  11. ^ Klíma, Vlastimil (5 de marzo de 2005). "Encontrar colisiones MD5 - un juguete para un portátil" . Archivo ePrint de criptología . Consultado el 10 de octubre de 2018 .
  12. ^ Vlastimil Klima: Tunnels in Hash Functions: MD5 Collisions Within a Minute , Cryptology ePrint Archive Report 2006/105, 18 de marzo de 2006, revisado el 17 de abril de 2006. Consultado el 27 de julio de 2008.
  13. ^ "¡Código roto! Misterio del logotipo de Cyber ​​Command resuelto" . USCYBERCOM . Noticias por cable . 8 de julio de 2010 . Consultado el 29 de julio de 2011 .
  14. ^ Tao Xie; Dengguo Feng (2010). "Construya colisiones MD5 usando un solo bloque de mensaje" (PDF) . Consultado el 28 de julio de 2011 .
  15. ^ "Marc Stevens - Investigación - Ataque de colisión de bloque único en MD5" . Marc-stevens.nl. 2012 . Consultado el 10 de abril de 2014 .
  16. ^ "RFC 6151 - Consideraciones de seguridad actualizadas para MD5 Message-Digest y los algoritmos HMAC-MD5" . Grupo de Trabajo de Ingeniería de Internet. Marzo de 2011 . Consultado el 11 de noviembre de 2013 .
  17. ^ "RFC 1321 - El algoritmo de resumen de mensajes MD5" . Grupo de Trabajo de Ingeniería de Internet. Abril de 1992 . Consultado el 5 de octubre de 2013 .
  18. ^ "RFC 2104 - HMAC: codificación hash para autenticación de mensajes" . Grupo de Trabajo de Ingeniería de Internet. Febrero de 1997 . Consultado el 5 de octubre de 2013 .
  19. ^ MMJ Stevens (junio de 2007). "Sobre colisiones para MD5" (PDF) . [...] podemos encontrar colisiones para MD5 en aproximadamente 2 compresiones 24.1 para IHV recomendados que toman aprox. 6 segundos en un Pentium 4 de 2.6GHz. Cite journal requiere |journal=( ayuda )
  20. ^ Marc Stevens; Arjen Lenstra; Benne de Weger (16 de junio de 2009). "Colisiones de prefijo elegido para MD5 y aplicaciones" (PDF) . Archivado desde el original (PDF) el 9 de noviembre de 2011 . Consultado el 31 de marzo de 2010 . Cite journal requiere |journal=( ayuda )
  21. ^ "El nuevo cracker GPU MD5 rompe más de 200 millones de hashes por segundo".
  22. ^ Magnus Daum, Stefan Lucks . "Hash Collisions (El ataque de mensaje envenenado)" . Eurocrypt 2005 sesión de grupa . Archivado desde el original el 27 de marzo de 2010.
  23. ^ Max Gebhardt; Georg Illies; Werner Schindler (4 de enero de 2017). "Una nota sobre el valor práctico de las colisiones de hash único para formatos de archivo especiales" (PDF) . Cite journal requiere |journal=( ayuda )
  24. ↑ a b c d e Sotirov, Alexander; Marc Stevens; Jacob Appelbaum; Arjen Lenstra; David Molnar; Dag Arne Osvik; Benne de Weger (30 de diciembre de 2008). "MD5 considerado dañino hoy" . Consultado el 30 de diciembre de 2008 . Anunciado en el 25º Congreso de Comunicación del Caos .
  25. ^ "Venenoso MD5 - Lobos entre las ovejas | Techblog de señal silenciosa" . Consultado el 10 de junio de 2015 .
  26. ^ Hans Dobbertin (verano de 1996). "El estado de MD5 después de un ataque reciente" . CryptoBytes . Consultado el 22 de octubre de 2013 .
  27. ^ Xiaoyun Wang y Hongbo Yu (2005). "Cómo romper MD5 y otras funciones hash" (PDF) . Avances en criptología - Apuntes de conferencias en informática . págs. 19–35. Archivado desde el original (PDF) el 21 de mayo de 2009 . Consultado el 21 de diciembre de 2009 .
  28. ^ Xiaoyun Wang, Dengguo, k., M., M, HAVAL-128 y RIPEMD , Cryptology ePrint Archive Report 2004/199, 16 de agosto de 2004, revisado el 17 de agosto de 2004. Consultado el 27 de julio de 2008.
  29. ^ Marc Stevens, Arjen Lenstra, Benne de Weger: Vulnerabilidad de la integridad del software y las aplicaciones de firma de código a las colisiones de prefijo elegido para MD5 , 30 de noviembre de 2007. Consultado el 27 de julio de 2008.
  30. ^ Stray, Jonathan (30 de diciembre de 2008). "La falla del navegador web podría poner en riesgo la seguridad del comercio electrónico" . CNET.com . Consultado el 24 de febrero de 2009 .
  31. ^ "Nota de vulnerabilidad CERT VU # 836068" . Kb.cert.org . Consultado el 9 de agosto de 2010 .
  32. ^ "NIST.gov - División de seguridad informática - Centro de recursos de seguridad informática" . Csrc.nist.gov. Archivado desde el original el 9 de junio de 2011 . Consultado el 9 de agosto de 2010 .
  33. ^ a b "Explicación del ataque de colisión de malware Flame" . Archivado desde el original el 8 de junio de 2012 . Consultado el 7 de junio de 2012 .
  34. ^ Dobbertin, Hans (verano de 1996). "El estado de MD5 después de un ataque reciente" (PDF) . CriptoBytes de RSA Laboratories . 2 (2): 1 . Consultado el 10 de agosto de 2010 . El ataque presentado aún no amenaza las aplicaciones prácticas de MD5, pero se acerca bastante. .... [ sic ] en el futuro MD5 ya no debería implementarse ... [ sic ] donde se requiera una función hash resistente a colisiones. [ enlace muerto permanente ]
  35. ^ "Schneier sobre seguridad: más colisiones MD5" . Schneier.com . Consultado el 9 de agosto de 2010 .
  36. ^ "Chocando certificados X.509" . Win.tue.nl . Consultado el 9 de agosto de 2010 .
  37. ^ "[Python-Dev] hashlib - md5 / sha más rápido, agrega soporte para sha256 / 512" . Mail.python.org . Consultado el 9 de agosto de 2010 .
  38. ^ "Los investigadores utilizan PlayStation Cluster para forjar una llave maestra web" . Cableado . 31 de diciembre de 2008 . Consultado el 31 de diciembre de 2008 .
  39. ^ Callan, Tim (31 de diciembre de 2008). "Ataque MD5 de esta mañana - resuelto" . Verisign. Archivado desde el original el 16 de enero de 2009 . Consultado el 31 de diciembre de 2008 .
  40. ^ Bruce Schneier (31 de diciembre de 2008). "Falsificación de certificados SSL" . Schneier sobre seguridad . Consultado el 10 de abril de 2014 .
  41. ^ Eric Rescorla (17 de agosto de 2004). "Una verdadera colisión MD5" . Adivinaciones educadas (blog) . Archivado desde el original el 15 de agosto de 2014 . Consultado el 13 de abril de 2015 .
  42. ^ Anton A. Kuznetsov. "Un algoritmo para el ataque de colisión de un solo bloque MD5 utilizando un clúster informático de alto rendimiento" (PDF) . IACR . Consultado el 3 de noviembre de 2014 .
  43. ^ Yu Sasaki; Kazumaro Aoki (16 de abril de 2009). "Encontrar preimágenes en MD5 completo más rápido que una búsqueda exhaustiva". Avances en Criptología - EUROCRYPT 2009 . Apuntes de conferencias en Ciencias de la Computación. 5479 . Springer Berlín Heidelberg . págs. 134-152. doi : 10.1007 / 978-3-642-01001-9_8 . ISBN 978-3-642-01000-2.
  44. ^ Ming Mao y Shaohui Chen y Jin Xu (2009). "Construcción de la estructura inicial para el ataque de preimagen de MD5". 2009 Congreso Internacional sobre Inteligencia y Seguridad Computacional . Congreso Internacional de Inteligencia y Seguridad Computacional . 1 . Sociedad de Informática IEEE . págs. 442–445. doi : 10.1109 / CIS.2009.214 . ISBN 978-0-7695-3931-7. S2CID  16512325 .
  45. ^ "Disponibilidad y descripción de la utilidad Verificador de integridad de suma de comprobación de archivos" . Soporte de Microsoft. 17 de junio de 2013 . Consultado el 10 de abril de 2014 .
  46. ^ "Cómo calcular los valores hash criptográficos MD5 o SHA-1 para un archivo" . Soporte de Microsoft. 23 de enero de 2007 . Consultado el 10 de abril de 2014 .
  47. ^ "Manual de FreeBSD, seguridad - DES, Blowfish, MD5 y Crypt" . Consultado el 19 de octubre de 2014 .
  48. ^ "Sinopsis - sección de páginas de manual 4: Formatos de archivo" . Docs.oracle.com. 1 de enero de 2013 . Consultado el 10 de abril de 2014 .
  49. ^ NIST SP 800-132 Sección 5.1
  50. ^ https://referencesource.microsoft.com/#System.Workflow.Runtime/MD5HashHelper.cs,5a97802b6014fccc,references
  51. ^ RFC 1321, sección 2, "Terminología y notación", página 2.

Lectura adicional [ editar ]

  • Berson, Thomas A. (1992). "Criptoanálisis diferencial Mod 2 32 con aplicaciones a MD5". EUROCRYPT . págs. 71–80. ISBN 3-540-56413-6.
  • Bert den Boer; Antoon Bosselaers (1993). Colisiones para la función de compresión de MD5 . Berlina; Londres: Springer. págs. 293-304. ISBN 978-3-540-57600-6.
  • Hans Dobbertin, Criptoanálisis de la compresa MD5. Anuncio en Internet, mayo de 1996. "CiteSeerX" . Citeseer.ist.psu.edu . Consultado el 9 de agosto de 2010 .
  • Dobbertin, Hans (1996). "El estado de MD5 después de un ataque reciente" . CryptoBytes . 2 (2).
  • Xiaoyun Wang; Hongbo Yu (2005). "Cómo romper MD5 y otras funciones hash" (PDF) . EUROCRYPT . ISBN 3-540-25910-4. Archivado desde el original (PDF) el 21 de mayo de 2009 . Consultado el 6 de marzo de 2008 .

Enlaces externos [ editar ]

  • Recomendación del W3C sobre MD5
  • Generador de hash MD5 en línea