CoderTools

Generador MD5

Genere valores hash MD5 para texto, útil para verificación de integridad de datos

Acerca de MD5

MD5 (Message-Digest Algorithm 5) es una función hash criptográfica ampliamente utilizada que produce un valor hash de 128 bits (16 bytes), típicamente expresado como un número hexadecimal de 32 dígitos. Fue diseñado por Ronald Rivest en 1991 para reemplazar el algoritmo anterior MD4 y fue especificado en RFC 1321 en abril de 1992.

A pesar de sus vulnerabilidades de seguridad, MD5 todavía se usa comúnmente para aplicaciones no relacionadas con la seguridad, como sumas de verificación para verificar la integridad de los datos y detectar la corrupción de datos no intencional. Sigue siendo adecuado para otros propósitos no criptográficos debido a sus menores requisitos computacionales en comparación con algoritmos de hash seguro más recientes.

<strong>Nota de seguridad:</strong> MD5 no es adecuado para aplicaciones críticas de seguridad como almacenamiento de contraseñas, certificados SSL o firmas digitales, ya que es vulnerable a ataques de colisión. El Instituto de Ingeniería de Software CMU considera que MD5 está "criptográficamente roto e inadecuado para su uso futuro" desde 2008.

Historia y Algoritmo

MD5 fue diseñado por el profesor Ronald Rivest del MIT como un reemplazo más seguro para MD4. El algoritmo toma un mensaje de entrada de longitud arbitraria y produce una "huella digital" o "resumen de mensaje" de 128 bits como salida. El algoritmo MD5 está diseñado para ser bastante rápido en máquinas de 32 bits y no requiere tablas de sustitución grandes, lo que permite una implementación compacta.

El algoritmo procesa un mensaje de longitud variable en una salida de longitud fija de 128 bits dividiendo la entrada en bloques de 512 bits. Opera en un estado de 128 bits dividido en cuatro palabras de 32 bits (A, B, C y D) y pasa por cuatro rondas de operaciones, con cada ronda realizando 16 operaciones basadas en funciones no lineales, suma modular y rotación de bits.

Pseudocódigo del Algoritmo

// Inicializar variables
A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476

// Preparar funciones
F(X,Y,Z) = (X AND Y) OR ((NOT X) AND Z)
G(X,Y,Z) = (X AND Z) OR (Y AND (NOT Z))
H(X,Y,Z) = X XOR Y XOR Z
I(X,Y,Z) = Y XOR (X OR (NOT Z))

// Procesar mensaje (el mensaje debe ser múltiplo de 512 bits)
// Rellenar el mensaje hasta que su longitud ≡ 448 (mod 512)
// Añadir representación de 64 bits de la longitud del mensaje original

// Bucle principal
para cada bloque de 512 bits del mensaje rellenado:
    // Dividir el bloque en dieciséis palabras de 32 bits (M[0..15])
    // Copiar estado del bloque
    AA = A
    BB = B
    CC = C
    DD = D
    
    // Ronda 1
    para i desde 0 hasta 15:
        A = B + ((A + F(B,C,D) + M[i] + T[i]) <<< s[i])
        Rotar A, B, C, D
    
    // Ronda 2
    para i desde 16 hasta 31:
        A = B + ((A + G(B,C,D) + M[(5*i + 1) mod 16] + T[i]) <<< s[i])
        Rotar A, B, C, D
    
    // Ronda 3
    para i desde 32 hasta 47:
        A = B + ((A + H(B,C,D) + M[(3*i + 5) mod 16] + T[i]) <<< s[i])
        Rotar A, B, C, D
    
    // Ronda 4
    para i desde 48 hasta 63:
        A = B + ((A + I(B,C,D) + M[(7*i) mod 16] + T[i]) <<< s[i])
        Rotar A, B, C, D
    
    // Añadir resultado del procesamiento del bloque
    A = A + AA
    B = B + BB
    C = C + CC
    D = D + DD

// Salida
MD5 = A || B || C || D // Concatenado para resultado de 128 bits

Vulnerabilidades de Seguridad

En 1996, se descubrió una falla en el diseño de MD5, aunque no se consideró fatal en ese momento. Para 2004, se encontraron vulnerabilidades más graves, y los investigadores demostraron ataques de colisión prácticos - métodos para crear pares de entradas diferentes que producen el mismo valor hash MD5.

En 2008, un grupo de investigadores utilizó estas vulnerabilidades para crear un certificado SSL falsificado que parecía legítimo. El malware Flame explotó las debilidades de MD5 para falsificar una firma digital de Microsoft en 2012. Los ataques de colisión modernos pueden encontrar colisiones de MD5 en segundos en hardware informático estándar.

Casos de uso comunes

Ejemplos

Input: "Hello, World!"

MD5 Hash: 65a8e27d8879283831b664bd8b7f0ad4

Input: "" (empty string)

MD5 Hash: d41d8cd98f00b204e9800998ecf8427e

Referencias y Lecturas Adicionales

Herramientas Relacionadas