The MD5 message-digest algorithm is a widely used hash function producing a 128-bit hash value. MD5 was designed by Ronald Rivest in 1991 to replace an earlier hash function MD4,[3] and was specified in 1992 as RFC 1321.
MD5 can be used as a checksum to verify data integrity against unintentional corruption. Historically it was widely used as a cryptographic hash function; however it has been found to suffer from extensive vulnerabilities. It remains suitable for other non-cryptographic purposes, for example for determining the partition for a particular key in a partitioned database, and may be preferred due to lower computational requirements than more recent Secure Hash Algorithms.[4]
History and cryptanalysis
MD5 is one in a series of message digest algorithms designed by Professor Ronald Rivest of MIT (Rivest, 1992). When analytic work indicated that MD5's predecessor MD4 was likely to be insecure, Rivest designed MD5 in 1991 as a secure replacement. (Hans Dobbertin did indeed later find weaknesses in MD4.)
In 1993, Den Boer and Bosselaers gave an early, although limited, result of finding a "pseudo-collision" of the MD5 compression function; that is, two different initialization vectors that produce an identical digest.
In 1996, Dobbertin announced a collision of the compression function of MD5 (Dobbertin, 1996). While this was not an attack on the full MD5 hash function, it was close enough for cryptographers to recommend switching to a replacement, such as SHA-1 (also compromised since) or RIPEMD-160.
The size of the hash value (128 bits) is small enough to contemplate a birthday attack. MD5CRK was a distributed project started in March 2004 to demonstrate that MD5 is practically insecure by finding a collision using a birthday attack.
MD5CRK ended shortly after 17 August 2004, when collisions for the full MD5 were announced by Xiaoyun Wang, Dengguo Feng, Xuejia Lai, and Hongbo Yu.[5][6] Their analytical attack was reported to take only one hour on an IBM p690 cluster.[7]
El 1 de marzo de 2005, Arjen Lenstra , Xiaoyun Wang y Benne de Weger demostraron la construcción de dos certificados X.509 con claves públicas diferentes y el mismo valor hash MD5, una colisión demostrablemente práctica. [ 8 ] La construcción incluía claves privadas para ambas claves públicas. Unos días después, Vlastimil Klima describió un algoritmo mejorado, capaz de construir colisiones MD5 en unas pocas horas en un solo ordenador portátil. [ 9 ] El 18 de marzo de 2006, Klima publicó un algoritmo que podía encontrar una colisión en un minuto en un solo ordenador portátil, utilizando un método que él denomina tunelización. [ 10 ]
Se han publicado varias erratas de RFC relacionadas con MD5. En 2009, el Comando Cibernético de los Estados Unidos utilizó un valor hash MD5 de su declaración de misión como parte de su emblema oficial. [ 11 ]
El 24 de diciembre de 2010, Tao Xie y Dengguo Feng anunciaron la primera colisión MD5 de un solo bloque (512 bits) publicada. [ 12 ] (Los descubrimientos de colisiones anteriores se habían basado en ataques de múltiples bloques). 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 10 000 dólares estadounidenses al primero que encontrara una colisión diferente de 64 bytes antes del 1 de enero de 2013. Marc Stevens respondió al desafío y publicó mensajes de un solo bloque que colisionaban, así como el algoritmo de construcción y las fuentes. [ 13 ]
En 2011 se aprobó un RFC informativo 6151 [ 14 ] para actualizar las consideraciones de seguridad en MD5 [ 15 ] y HMAC-MD5. [ 16 ]
Seguridad
Un requisito básico de cualquier función hash criptográfica es que sea computacionalmente inviable encontrar dos mensajes distintos que produzcan el mismo valor hash. MD5 incumple este requisito de forma catastrófica. El 31 de diciembre de 2008, el Instituto de Ingeniería de Software de la CMU concluyó que MD5 era esencialmente "criptográficamente vulnerable e inadecuado para su uso posterior". [ 17 ] Las debilidades de MD5 han sido explotadas en la práctica, siendo el caso más infame el del malware Flame en 2012. A partir de 2019MD5 sigue siendo ampliamente utilizado, a pesar de sus debilidades bien documentadas y su desaprobación por parte de expertos en seguridad. [ 18 ]
Existe un ataque de colisión que puede encontrar colisiones en segundos en una computadora con un procesador Pentium 4 de 2,6 GHz (complejidad de 2 24,1 ). [ 19 ] Además, también existe un ataque de colisión de prefijo elegido que puede producir una colisión para dos entradas con prefijos específicos en segundos, utilizando hardware de computación comercial (complejidad 2 39 ). [ 20 ] La capacidad de encontrar colisiones se ha visto enormemente facilitada por el uso de GPU comerciales . En un procesador gráfico 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 de hash y colisión se han demostrado públicamente en diversas situaciones, incluyendo colisiones de archivos de documentos [ 22 ] [ 23 ] y certificados digitales . [ 24 ] A partir de 2015, se demostró que MD5 todavía se utilizaba ampliamente, sobre todo por empresas de investigación de seguridad y antivirus. [ 25 ]
En 2019, se informó que una cuarta parte de los sistemas de gestión de contenido ampliamente utilizados seguían utilizando MD5 para el hash de contraseñas . [ 18 ]
Panorama general de los problemas de seguridad
En 1996, se descubrió una falla en el diseño de MD5. Si bien en ese momento no se consideró una debilidad fatal, los criptógrafos comenzaron a recomendar el uso de otros algoritmos, como SHA-1 , que desde entonces también se ha descubierto que es vulnerable. [ 26 ] En 2004 se demostró que MD5 no es resistente a colisiones . [ 27 ] Por lo tanto, MD5 no es adecuado para aplicaciones como certificados SSL o firmas digitales que dependen de esta propiedad para la seguridad digital. Los investigadores descubrieron además fallas más graves en MD5 y describieron un ataque de colisión factible : un método para crear un par de entradas para las cuales MD5 produce sumas de verificación idénticas . [ 5 ] [ 28 ] Se realizaron nuevos avances en la ruptura de MD5 en 2005, 2006 y 2007. [ 29 ] En diciembre de 2008, un grupo de investigadores utilizó esta técnica para falsificar la validez de un certificado SSL . [ 24 ] [ 30 ]
En 2010, el Instituto de Ingeniería de Software de CMU consideró que MD5 era "criptográficamente vulnerable e inadecuado para su uso posterior" [ 17 ] , y la mayoría de las aplicaciones del gobierno estadounidense ahora requieren la familia de funciones hash SHA-2 [ 31 ] . En 2012, el malware Flame explotó las debilidades de MD5 para falsificar una firma digital de Microsoft [ 32 ] .
Vulnerabilidades de colisión
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 ya no debería implementarse... donde se requiera una función hash resistente a colisiones". [ 33 ]
En 2005, los investigadores lograron crear pares de documentos PostScript [ 34 ] y certificados X.509 [ 35 ] con el mismo hash. Más tarde ese mismo año, el diseñador de MD5, Ron Rivest, escribió que "tanto md5 como sha1 están claramente rotos (en términos de resistencia a colisiones)". [ 36 ]
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 colisiones MD5 para crear un certificado de autoridad de certificación intermedio que parecía legítimo al comprobarse mediante su hash MD5. [ 24 ] Los investigadores utilizaron un clúster PS3 en la EPFL de Lausana , Suiza [ 37 ] para cambiar un certificado SSL normal emitido por RapidSSL por un certificado de CA funcional para ese emisor, que luego podía utilizarse para crear otros certificados que parecerían legítimos y emitidos por RapidSSL. Verisign , los emisores de certificados RapidSSL, declararon que dejaron de emitir nuevos certificados que utilizaran MD5 como algoritmo de suma de comprobación para RapidSSL una vez que se anunció la vulnerabilidad. [ 38 ] 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 defectuosa" y que "nadie debería seguir usando MD5". [ 39 ] Los investigadores de SSL escribieron: "Nuestro objetivo es que las Autoridades de Certificación dejen de usar MD5 para emitir nuevos certificados. También esperamos que 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. [ 32 ]
MD5 utiliza la construcción Merkle-Damgård , por lo que si se pueden construir dos prefijos con el mismo hash, se puede añadir un sufijo común a ambos para aumentar la probabilidad de que la aplicación acepte la colisión como datos válidos. Además, las técnicas actuales de detección de colisiones permiten especificar un prefijo arbitrario : un atacante puede crear dos archivos que colisionan y que comienzan con el mismo contenido. Para generar dos archivos que colisionan, el atacante solo necesita un archivo plantilla con un bloque de datos de 128 bytes, alineado en un límite de 64 bytes, que el algoritmo de detección de colisiones puede modificar libremente. Un ejemplo de colisión MD5, con dos mensajes que difieren en 6 bytes, es:
d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 8 712467eab 4004583eb8fb7f89 55ad340609f4b302 83e4888325 7 1415a 085125e8f7cdc99f d91dbd f 280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2 b 487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080 a 80d1e c69821bcb6a88393 96f965 2 b6ff72a70
d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 0 712467eab 4004583eb8fb7f89 55ad340609f4b302 83e4888325 f 1415a 085125e8f7cdc99f d91dbd 7 280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2 3 487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080 2 80d1e c69821bcb6a88393 96f965 un b6ff72a70
Ambos producen el hash MD5 79054025255fb1a26e4bc422aef54eb4. [ 40 ] La diferencia entre las dos muestras es que el bit inicial de cada nibble se ha invertido. Por ejemplo, el vigésimo byte (desplazamiento 0x13) en la muestra superior, 0x87, es 10000111 en binario. El bit inicial del byte (que también es el bit inicial del primer nibble) se invierte para formar 00000111, que es 0x07, como se muestra en la muestra inferior.
Posteriormente, 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 CA fraudulento en 2008. En 2014, Anton Kuznetsov propuso una nueva variante de búsqueda de colisiones paralelizada mediante MPI , que permitió encontrar una colisión en 11 horas en un clúster de computación. [ 41 ]
Vulnerabilidad de preimagen
En abril de 2009, se publicó un ataque contra MD5 que rompe la resistencia de MD5 a la preimagen . Este ataque es solo teórico, con una complejidad computacional de 2 123,4 para la preimagen completa. [ 42 ] [ 43 ]
Aplicaciones
Los resúmenes MD5 se han utilizado ampliamente en el mundo del software para brindar 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 ella. 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 usar la función de PowerShell incluida "Get-FileHash", la función de línea de comandos incluida "certutil -hashfile <nombre_archivo> md5", [ 44 ] [ 45 ] instalar una utilidad de Microsoft, [ 46 ] [ 47 ] o usar aplicaciones de terceros. Las ROM de Android también usan este tipo de suma de verificación.

As it is easy to generate MD5 collisions, it is possible for the person who created the file to create a second file with the same checksum, so this technique cannot protect against some forms of malicious tampering. In some cases, the checksum cannot be trusted (for example, if it was obtained over the same channel as the downloaded file), in which case MD5 can only provide error-checking functionality: it will recognize a corrupt or incomplete download, which becomes more likely when downloading larger files.
Historically, MD5 has been used to store a one-way hash of a password, often with key stretching.[48][49]NIST does not include MD5 in their list of recommended hashes for password storage.[50]
MD5 is also used in the field of electronic discovery, to provide a unique identifier for each document that is exchanged during the legal discovery process. This method can be used to replace the Bates stamp numbering system that has been used for decades during the exchange of paper documents. As above, this usage should be discouraged due to the ease of collision attacks.
Algorithm

MD5 processes a variable-length message into a fixed-length output of 128 bits. The input message is broken up into chunks of 512-bit blocks (sixteen 32-bit words); the message is always padded even if its original length is divisible by 512 (see RFC 1321, section 3.1). The padding works as follows: first, a single bit, 1, is appended to the end of the message. This is followed by as many zeros as are required to bring the length of the message up to 64 bits fewer than a multiple of 512. The remaining bits are filled up with 64 bits representing the length of the original message, modulo 264.
El algoritmo principal MD5 opera sobre un estado de 128 bits, dividido en cuatro palabras de 32 bits, denominadas A , B , C y D. Estas se inicializan con ciertas constantes fijas. El algoritmo principal utiliza cada bloque de mensaje de 512 bits para modificar el estado. El procesamiento de un bloque de mensaje consta de cuatro etapas similares, denominadas rondas ; cada ronda se compone de 16 operaciones similares basadas en una función no lineal F , suma modular y rotación a la izquierda. La Figura 1 ilustra una operación dentro de una ronda. Existen cuatro funciones posibles; se utiliza una diferente en cada ronda.
denotan las operaciones XOR , AND , OR y NOT respectivamente.
Pseudocódigo
El hash MD5 se calcula según este algoritmo. [ 51 ] Todos los valores están en little-endian .
// : Todas las variables son de 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 cambio por ronda s[ 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 } // Usa la parte entera binaria de los senos de los enteros (radianes) como constantes: para i de 0 a 63 haz K[i] := floor(2 32 × abs(sin(i + 1))) fin para // (O simplemente usa 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 " 1" al mensaje. // Aviso: los bytes de entrada se consideran cadenas de bits, // donde el primer bit es el bit más significativo del byte. [ 52 ]// Preprocesamiento: relleno con ceros , agregar el bit "0" hasta que la longitud del mensaje en bits sea ≡ 448 (mod 512) // Nota: los dos pasos de relleno anteriores se implementan de una manera más sencilla. // en implementaciones que solo funcionan con bytes completos: agregar 0x80 // y rellenar con bytes 0x00 para que la longitud del mensaje en bytes sea ≡ 56 (mod 64).agregar la longitud original en bits módulo 2 64 al mensaje // Procesar el mensaje en bloques sucesivos de 512 bits: para cada bloque de 512 bits del mensaje relleno, hacer 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 desde 0 hasta 63 hacer var int F, g si 0 ≤ i ≤ 15 entonces F := (B y C) o (( no B) y D) g := i de lo contrario, si 16 ≤ i ≤ 31 entonces F := (D y B) o (( no D) y C) g := (5×i + 1) mod 16 si no, si 32 ≤ i ≤ 47 entonces F := B xor C xor D g := (3×i + 5) mod 16 si no, si 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]) fin para // Agrega el hash de este fragmento al resultado hasta ahora: a0 := a0 + A b0 := b0 + B c0 := c0 + C d0 := d0 + D fin paravar char digest[16] := a0 append b0 append c0 append d0 // (La salida está en little-endian)
En lugar de la formulación del RFC 1321 original que se muestra, se puede utilizar la siguiente para mejorar la eficiencia (útil si se utiliza 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 la operación nand/and 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))
Hashes MD5
Los hashes MD5 de 128 bits (16 bytes) (también denominados resúmenes de mensajes ) se representan normalmente 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 ") = 9e107d9d372bb6826bd81d3542a419d6Incluso un pequeño cambio en el mensaje dará como resultado (con una probabilidad abrumadora) un hash mayormente diferente, debido al efecto avalancha . Por ejemplo, agregar un punto al final de la oración:
MD5(" El rápido zorro marrón salta sobre el perro perezoso . ") = e4d909c290d0fb1ca068ffaddf22cbd0El hash de la cadena de longitud cero es:
MD5("") = d41d8cd98f00b204e9800998ecf8427eEl algoritmo MD5 está diseñado para mensajes 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 no admitir la transmisión de mensajes de longitud inicialmente indeterminada.
Implementaciones
A continuación se muestra una lista de bibliotecas de criptografía que admiten MD5:
Véase también
Referencias
- ↑ Rivest, R. (abril de 1992). "Paso 4. Procesar el mensaje en bloques de 16 palabras" . El algoritmo de resumen de mensajes MD5 . IETF . pág. 5. sec. 3.4. doi : 10.17487/RFC1321 . RFC 1321. Consultado el 10 de octubre de 2018 .
- ↑ Xie Tao; Fanbao Liu; Dengguo Feng (2013). "Ataque de colisión rápida en MD5" (PDF) . Cryptology ePrint Archive . Archivado (PDF) del original el 2 de febrero de 2021. Recuperado el 3 de diciembre de 2013 .
- ↑ Ciampa, Mark (2009). CompTIA Security+ 2008 en profundidad . Australia; Estados Unidos: Course Technology/Cengage Learning. pág . 290. ISBN 978-1-59863-913-1.
- ↑ Kleppmann, Martin (2 de abril de 2017). Diseño de aplicaciones con uso intensivo de datos: Las grandes ideas detrás de sistemas fiables, escalables y mantenibles (1.ª ed.). O'Reilly Media. pág. 203. ISBN 978-1449373320.
- 1 2 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. Recuperado el 27 de julio de 2008.
- ↑ Hawkes, Philip; Paddon, Michael; Rose, Gregory G. (13 de octubre de 2004). "Reflexiones sobre la colisión MD5 de Wang et al." . Cryptology ePrint Archive . Archivado del original el 5 de noviembre de 2018 . Recuperado el 10 de octubre de 2018 .
- ↑ Bishop Fox (26 de septiembre de 2013). "Generadores rápidos de colisiones MD5 y MD4" . BishopFox . Archivado del original el 26 de abril de 2017. Recuperado el 10 de febrero de 2014 .
- ↑ Lenstra, Arjen ; Wang, Xiaoyun ; Weger, Benne de (1 de marzo de 2005). "Certificados X.509 en conflicto" . Cryptology ePrint Archive . Archivado del original el 23 de mayo de 2017. Recuperado el 10 de octubre de 2018 .
- ↑ Klíma, Vlastimil (5 de marzo de 2005). "Encontrando colisiones MD5 : un juguete para un cuaderno" . Cryptology ePrint Archive . Archivado del original el 17 de mayo de 2017. Recuperado el 10 de octubre de 2018 .
- ↑ Vlastimil Klima: Túneles en funciones hash: colisiones MD5 en un minuto. Archivado el 6 de agosto de 2011 en Wayback Machine , Cryptology ePrint Archive Report 2006/105, 18 de marzo de 2006, revisado el 17 de abril de 2006. Recuperado el 27 de julio de 2008.
- ↑ "¡Código descifrado! Misterio del logotipo del Comando Cibernético resuelto" . USCYBERCOM . Wired News . 8 de julio de 2010. Archivado del original el 17 de febrero de 2014. Consultado el 29 de julio de 2011 .
- ↑ Tao Xie; Dengguo Feng (2010). "Construir colisiones MD5 usando solo un bloque de mensaje" (PDF) . Archivado del original el 14 de mayo de 2017. Recuperado el 28 de julio de 2011 .
- ↑ "Marc Stevens – Investigación – Ataque de colisión de un solo bloque en MD5" . Marc-stevens.nl. 2012. Archivado del original el 15 de mayo de 2017. Recuperado el 10 de abril de 2014 .
- ↑ Turner, Sean (marzo de 2011). "RFC 6151: Consideraciones de seguridad actualizadas para los algoritmos MD5 Message-Digest y HMAC-MD5" . Grupo de Trabajo de Ingeniería de Internet . doi : 10.17487/RFC6151 . Archivado del original el 15 de junio de 2017. Recuperado el 11 de noviembre de 2013 .
- ↑ Rivest, Ronald L. (abril de 1992). "RFC 1321 – El algoritmo de resumen de mensajes MD5" . Grupo de trabajo de ingeniería de Internet . doi : 10.17487/RFC1321 . hdl : 1721.1/149165 . Archivado del original el 9 de abril de 2021. Recuperado el 5 de octubre de 2013 .
- ↑ Krawczyk, Hugo; Bellare, Mihir; Canetti, Ran (febrero de 1997). "RFC 2104 – HMAC: Hashing con clave para autenticación de mensajes" . Grupo de trabajo de ingeniería de Internet . doi : 10.17487/RFC2104 . Archivado del original el 15 de abril de 2021. Recuperado el 5 de octubre de 2013 .
- 1 2 Dougherty, Chad R. (31 de diciembre de 2008). "Nota de vulnerabilidad VU#836068 MD5 vulnerable a ataques de colisión" . Base de datos de notas de vulnerabilidad . CERT Carnegie Mellon University Software Engineering Institute. Archivado del original el 26 de julio de 2011. Recuperado el 3 de febrero de 2017 .
- 1 2 Cimpanu, Catalin. "Una cuarta parte de los principales CMS utilizan el obsoleto MD5 como esquema de hash de contraseñas predeterminado" . ZDNet . Archivado del original el 24 de enero de 2021. Recuperado el 17 de junio de 2019 .
- ↑ MMJ Stevens (junio de 2007). Sobre colisiones para MD5 (PDF) (tesis de maestría). Archivado (PDF) del original el 17 de mayo de 2017. Recuperado el 31 de marzo de 2010 .
- ^ Marc Stevens; Arjen Lenstra; Benne de Weger (16 de junio de 2009). "Colisiones de prefijo elegido para MD5 y aplicaciones" (PDF) . Escuela Politécnica Federal de Lausana . Archivado desde el original (PDF) el 9 de noviembre de 2011 . Consultado el 31 de marzo de 2010 .
- ↑ "Nuevo programa para descifrar hashes MD5 mediante GPU descifra más de 200 millones de hashes por segundo" . Archivado del original el 11 de mayo de 2011. Consultado el 25 de marzo de 2011 .
- ↑ Magnus Daum, Stefan Lucks . "Colisiones de hash (El ataque del mensaje envenenado)" . Sesión residual de Eurocrypt 2005. Archivado del original el 27 de marzo de 2010.
- ↑ Max Gebhardt; Georg Illies; Werner Schindler (31 de octubre de 2005). «Una nota sobre el valor práctico de las colisiones de hash únicas para formatos de archivo especiales» (PDF) . Instituto Nacional de Estándares y Tecnología . Archivado del original (PDF) el 17 de septiembre de 2008.
- 1 2 3 4 5 Sotirov, Alejandro; Marc Stevens; Jacob Appelbaum; Arjen Lenstra; David Molnar; Dag Arne Osvik; Benne de Weger (30 de diciembre de 2008). «MD5 se considera perjudicial hoy en día» . Archivado desde el original el 25 de marzo de 2017 . Consultado el 30 de diciembre de 2008 .Anunciado y archivado el 16 de noviembre de 2018 en Wayback Machine en el 25º Congreso de Comunicación del Caos .
- ↑ "MD5 venenoso: lobos entre las ovejas | Silent Signal Techblog" . 10 de junio de 2015. Archivado del original el 10 de junio de 2015. Consultado el 10 de junio de 2015 .
- ↑ Hans Dobbertin (verano de 1996). "El estado de MD5 después de un ataque reciente" . CryptoBytes . Consultado el 22 de octubre de 2013 .
- ↑ Xiaoyun Wang; Hongbo Yu (2005). "Cómo romper MD5 y otras funciones hash" (PDF) . Avances en criptología: notas de clase en ciencias de la computación . págs. 19–35 . Archivado del original (PDF) el 21 de mayo de 2009. Recuperado el 21 de diciembre de 2009 .
- ↑ 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. Recuperado el 27 de julio de 2008.
- ↑ Marc Stevens, Arjen Lenstra, Benne de Weger: Vulnerabilidad de las aplicaciones de integridad de software y firma de código a colisiones de prefijo elegido para MD5. Archivado el 13 de diciembre de 2007 en Wayback Machine , 30 de noviembre de 2007. Recuperado el 27 de julio de 2008.
- ↑ Stray, Jonathan (30 de diciembre de 2008). "Una falla en el navegador web podría poner en riesgo la seguridad del comercio electrónico" . CNET.com . Archivado del original el 28 de agosto de 2013. Recuperado el 24 de febrero de 2009 .
- ↑ "NIST.gov — División de Seguridad Informática — Centro de Recursos de Seguridad Informática" . Csrc.nist.gov. Archivado del original el 9 de junio de 2011. Consultado el 9 de agosto de 2010 .
- 1 2 "Explicación del ataque de colisión del malware Flame" . Archivado del original el 8 de junio de 2012. Recuperado el 7 de junio de 2012 .
- ↑ Dobbertin, Hans (verano de 1996). "El estado de MD5 después de un ataque reciente" (PDF) . RSA Laboratories CryptoBytes ( FTP ). pág. 1. Recuperado 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.
(Para ver los documentos, consulte Ayuda:FTP )
- ↑ "Schneier sobre seguridad: Más colisiones MD5" . Schneier.com. Archivado del original el 11 de abril de 2021. Consultado el 9 de agosto de 2010 .
- ↑ "Certificados X.509 en conflicto" . Win.tue.nl. Archivado del original el 15 de mayo de 2017. Consultado el 9 de agosto de 2010 .
- ↑ " [ Python-Dev ] hashlib — md5/sha más rápido, añade soporte para sha256/512" . Mail.python.org. 16 de diciembre de 2005. Archivado del original el 6 de mayo de 2021. Recuperado el 9 de agosto de 2010 .
- ↑ "Investigadores utilizan un clúster de PlayStation para crear una clave maestra de la web" . Wired . 31 de diciembre de 2008. Archivado del original el 21 de abril de 2009. Consultado el 31 de diciembre de 2008 .
- ↑ Callan, Tim (31 de diciembre de 2008). "Ataque MD5 de esta mañana : resuelto" . Verisign. Archivado del original el 16 de enero de 2009. Recuperado el 31 de diciembre de 2008 .
- ↑ Bruce Schneier (31 de diciembre de 2008). "Falsificación de certificados SSL" . Schneier on Security. Archivado del original el 9 de noviembre de 2020. Recuperado el 10 de abril de 2014 .
- ↑ Eric Rescorla (17 de agosto de 2004). "Una verdadera colisión MD5" . Educated Guesswork (blog) . Archivado del original el 15 de agosto de 2014. Recuperado el 13 de abril de 2015 .
- ↑ Anton A. Kuznetsov. "Un algoritmo para el ataque de colisión de un solo bloque MD5 utilizando un clúster de computación de alto rendimiento" (PDF) . IACR. Archivado (PDF) del original el 4 de junio de 2016. Recuperado el 3 de noviembre de 2014 .
- ↑ Yu Sasaki; Kazumaro Aoki (16 de abril de 2009). "Encontrar preimágenes en MD5 completo más rápido que la búsqueda exhaustiva". Avances en criptología - EUROCRYPT 2009. Notas de clase en ciencias de la computación. Vol. 5479. Springer Berlin Heidelberg . págs. 134–152 . doi : 10.1007/978-3-642-01001-9_8 . ISBN 978-3-642-01000-2.
- ↑ Ming Mao, Shaohui Chen y Jin Xu (2009). «Construcción de la estructura inicial para el ataque de preimagen de MD5». Conferencia Internacional de 2009 sobre Inteligencia Computacional y Seguridad . Vol. 1. IEEE Computer Society. págs. 442–445 . doi : 10.1109/CIS.2009.214 . ISBN 978-0-7695-3931-7. S2CID 16512325 .
- ↑ "Cómo encontrar valores de suma de comprobación en Windows 10" . Comunidad de Microsoft. Archivado del original el 11 de enero de 2024. Consultado el 23 de noviembre de 2023 .
- ↑ "certutil" . certutil . Microsoft Learn. Archivado del original el 23 de noviembre de 2023. Consultado el 23 de noviembre de 2023 .
- ↑ "Disponibilidad y descripción de la utilidad Verificador de integridad de suma de comprobación de archivos" . Soporte técnico de Microsoft. 17 de junio de 2013. Archivado del original el 15 de febrero de 2015. Consultado el 10 de abril de 2014 .
- ↑ "Cómo calcular los valores hash criptográficos MD5 o SHA-1 para un archivo" . Soporte técnico de Microsoft. 23 de enero de 2007. Archivado del original el 9 de marzo de 2015. Consultado el 10 de abril de 2014 .
- ↑ "Manual de FreeBSD, Seguridad – DES, Blowfish, MD5 y Crypt" . Archivado del original el 18 de febrero de 2017. Consultado el 19 de octubre de 2014 .
- ↑ "Sinopsis – página man sección 4: Formatos de archivo" . Docs.oracle.com. 1 de enero de 2013. Archivado del original el 4 de marzo de 2016. Consultado el 10 de abril de 2014 .
- ↑ NIST SP 800-132 Archivado el 1 de diciembre de 2016 en Wayback Machine Sección 5.1
- ↑ "Fuente de referencia" . Archivado del original el 21 de junio de 2021. Consultado el 23 de diciembre de 2020 .
- ↑ RFC 1321, sección 2, "Terminología y notación", página 2.
Lecturas adicionales
- 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". Avances en criptología - EUROCRYPT '93 . EUROCRIPTA. Berlina; Londres: Springer. págs. 293–304 . ISBN 978-3-540-57600-6.
- Hans Dobbertin, Criptoanálisis de compresión MD5. Anuncio en Internet, mayo de 1996. "CiteSeerX" . Citeseer.ist.psu.edu. Archivado del original el 24 de junio de 2008. Recuperado 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-4Archivado del original (PDF) el 21 de mayo de 2009. Consultado el 6 de marzo de 2008 .
Enlaces externos
- Recomendación del W3C sobre MD5. Archivado el 28 de diciembre de 2014 en la Wayback Machine.
- Calculadora MD5 archivada el 16 de noviembre de 2022 en Wayback Machine.
- funciones hash criptográficas
- Funciones hash defectuosas