MD5 Criptografía
Enviado por carlosxavi89p • 13 de Abril de 2013 • Examen • 1.381 Palabras (6 Páginas) • 231 Visitas
MD5
En Criptografía, MD5 (acrónimo de Message-Digest Algorithm 5, Algoritmo de Resumen del Mensaje 5) es un Algoritmo de reducción criptográfico de 128 Bitsampliamente usado. El código MD5 fue diseñado por Ronald Rivest en 1991. Durante el año 2004 fueron divulgados ciertos defectos de seguridad, lo que hará que en un futuro cercano se cambie de este sistema a otro más seguro.
Historia
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachussets Institute of Technology, Instituto Tecnológico de Masachusets). Cuando un análisis analí¬tico indicó que el algoritmo MD4 era inseguro, se decidió a programar el MD5 para sustituirlo en 1991. Las debilidades en MD4 fueron descubiertas por Hans Dobbertin.
En 1996 Dobbertin anunció una colisión de Hash de la función de compresión del MD5. Esto no era una ataque contra la función de hash del MD5, pero hizo que los criptógrafos empezasen a recomendar el reemplazo de la codificación MD5 a otras como SHA-1 o RIPEMD-160. En Agosto de 2004 unos investigadores chinos encontraron también colisiones hash en el MD5. Actualmente el uso de MD5 es muy amplio y se desconoce cómo afectarán estos problemas a su uso y a su futuro.
Codificación
La codificación del MD5 de 128 bits es representada tí¬picamente como un número de 32 dí¬gitos hexadecimal. El siguiente código de 28 bytes ASCII será tratado con MD5 y veremos su correspondiente hash de salida:
Algoritmo
Terminologías y notaciones
En este documento "palabra" es una entidad de 32 bits y byte es una entidad de 8 bits. Una secuencia de bits puede ser interpretada de manera natural como una secuencia de bytes, donde cada grupo consecutivo de ocho bits se interpreta como un byte con el bit más significativo al principio. Similarmente, una secuencia de bytes puede ser interpretada como una secuencia de 32 bits (palabra), donde cada grupo consecutivo de cuatro bytes se intepreta como una palabra en la que el bit menos significativo está al principio.
Descripción del algoritmo MD5
Empezamos suponiendo que tenemos un mensaje de 'b' bits de entrada, y que nos gustaría encontrar su resumen. Aquí 'b' es un valor arbitrario entero no negativo, pero puede ser cero, no tiene por qué ser múltiplo de ocho, y puede ser muy largo. Imaginemos los bits del mensaje escritos así:
Los siguientes cinco pasos son efectuados para calcular el resumen del mensaje.
Paso 1. Añadiendo bits
El mensaje será extendido hasta que su longitud en bits sea congruente con 448, módulo 512. Esto es, el mensaje se extenderá hasta que se forme el menor número múltiplo de 512 bits. Esta extensión se realiza siempre, incluso si la longitud del mensaje es ya congruente con 448, módulo 512.
La extensión se realiza como sigue: un sólo bit "1" se añade al mensaje, y después bits "0" se añaden hasta que la longitud en bits del mensaje es congruente con 448, módulo 512. En todos los mensajes se añade al menos un bit y como máximo 512.
Paso 2. Longitud del mensaje
Una representación de 64 bits de 'b' (la longitud del mensaje antes de añadir los bits) se añade al resultado del paso anterior. En el supuesto no deseado de que 'b' sea mayor que 2^64, entonces sólo los 64 bits de menor peso de 'b' se usarán.
En este punto el mensaje resultante (después de rellenar con los bits y con 'b') se tiene una longitud que es un múltiplo exacto de 512 bits. A su vez, la longitud del mensaje es múltiplo de 16 palabras (32 bits por palabra). Con M[0 ... N-1] denotaremos las palabras del mensaje resultante, donde N es múltiplo de 16.
Paso 3. Inicializar el búfer MD
Un búfer de cuatro palabras (A, B, C, D) se usa para calcular el resúmen del mensaje. Aquí cada una de las letras A, B, C, D representa un registro de 32 bits. Estos registros se inicializan con los siguientes valores hexadecimales, los bits de menor peso primero:
Paso 4. Procesado del mensaje en bloques de 16 palabras
Primero definimos cuatro funciones auxiliares que toman como entrada tres palabras de 32 bits y su salida es una palabra de 32 bits.
<math>F(X,Y,Z) = (X\wedge{Y}) \vee (\neg{X} \wedge{Z})</math>
<math>G(X,Y,Z)
...