MD5
Message Digest Algorithm 5
Message Digest Algorithm 5
by Chr0n05
Primero que todo quiero dar a entender que este documento es una recopilación Web y de mi memoria, por lo tanto, fuentes y demases no recuerdo lamentablemente. Trataré de explicar el Algoritmo MD5 de la mejor forma posible y entendible para cualquier persona.
Author: Chr0n05
Web: http://www.hackerxsiempre.net/
Qué es MD5
MD5 o Algoritmo Resumen del Mensaje 5, es un algoritmo de reducción que utiliza 128 bits para su objetivo. Podemos encontrar una definición bastante amplia en su RFC (1321).
Para nuestras comprobaciones usaremos los siguientes programas...

- CheckSum
Luego de tener descargado nuestro programita, copiaremos el archivo al siguiente directorio:
Código:
#copy md5.exe "%systemroot%\system32"

Para que es esto ???... simplemente para que cada vez que necesitemos comprobar la integridad y confiabilidad de un programa no tengamos que dirigirnos a la carpeta donde tenemos MD5.exe, sino que desde cualquier parte de la consola podamos ejecutar dicho comando (md5).
Luego de ver esto, crearemos un documento en cualquier parte de nuestra computadora... en mi caso le llamaré "Bienvenidos", dentro de él escribiré "Bienvenidos a HackerxSiempre"

Ahora ingresemos al Prompt escribamos nuestro comando y la dirección
del archivo entre comillas dobles y presionar [ENTER].
Código:
#md5 "D:\Documents and Settings\Chr0n05\Escritorio\Bienvenidos.txt"
5D4B82EA4CE7DE1393F56C77A69D2731 D:\Documents and
Settings\Chr0n05\Escritorio\Bienvenidos.txt
5D4B82EA4CE7DE1393F56C77A69D2731 D:\Documents and
Settings\Chr0n05\Escritorio\Bienvenidos.txt

Ahora modificaremos el archivo Bienvenidos.txt, en donde solo pondré "HackerxSiempre".

Y realizaremos la comprobación
Código:
#md5 "D:\Documents and Settings\Chr0n05\Escritorio\Bienvenidos.txt"
86A36C3CE9E872783830BA8C31647F2D D:\Documents and
Settings\Chr0n05\Escritorio\Bienvenidos.txt
86A36C3CE9E872783830BA8C31647F2D D:\Documents and
Settings\Chr0n05\Escritorio\Bienvenidos.txt

Distinto no ???...
Ahora analicemos un poco...
Código:
Primer MD5 = 5D4B82EA4CE7DE1393F56C77A69D2731
Segundo MD5 = 86A36C3CE9E872783830BA8C31647F2D
Segundo MD5 = 86A36C3CE9E872783830BA8C31647F2D
Que podemos ver aquí ???... visualizamos fácilmente 32 digitos, tambien vemos números, y vemos letras... Deducimos que el Algoritmo MD5 contiene 32 bits de carácteres alfanuméricos... muy dificil ???...

Tambien si somos cautelosos... podemos darnos cuenta que al modificar el documento, el MD5 cambio muchísimo... esto nos ayuda en dos grandes principios de la Seguridad Informática, que son la Confiabilidad del documento, del archivo, etc... y la Integridad que no haya sido modificado por terceros.
Ningún Hash MD5 es igual a otro... Aunque tenemos que tener cuidado con las Colisiones Hash... eso lo explicaré en su justa medida un poco más adelante...
Ahora que sabemos, como usar este Algoritmo, ingresaremos en tierra derecha y veremos el Funcionamiento de este Algoritmo.
Descripción del Algoritmo MD5
Primero supondremos que tenemos un mensaje de "x" bit de entrada, y deseamos ferdientemente encontrar el mensaje. "x" tiene que ser un valor positivo y además puede ser cero, puede ser un número bastante grande y no es necesario que sea múltiplo de ocho. Ahora imaginemos los bits del mensaje de la siguiente forma:
Código:
m_0 m_1 m_2 .... m(b-1)
Hasta aquí vamos bien ???... Espero que si... xD
Ya que de esa forma trabaja el Algoritmo MD5, y eso es todo...
xD...
Naa, ahora veremos la forma de obtener dicho mensaje.... ok ???
Extendiendo Bits
Extendiendo Bits, proviene especificamente de extendir tanto que su largo sea congruente a 448, modulo 512. Qué carajo significa esto ???... Esto quiere decir que el mensaje es extendido tanto que si sólo es de 64 bits de ser un múltiplo de 512 bits de longitud. Llega a la misma cifra (rellenando los espacios faltantes).
Ahora se estarán preguntando como se realiza el relleno, y es de la siguiente forma:
Un bit (1b) se adjunta al mensaje y a continuación ceros (0) se adjuntan, de forma que llegan al relleno del mensaje (Con 448 mod 512). En total se deben adjuntar 512 bits.
Se entiende ???... Espero que si...

Longitud
De aqui en adelante, se pone pasada la pista... asi que mucha atención...

Tomaremos una longitud "z", donde z = 128 (que es la longitud del mensaje sin añadir), luego se concatena con el extendido de bits.
Luego de rellenar "z" con los bits, el mensaje resultante tiene una longitud de múltiplo exacto de 512b. De forma paralela la longitud del mensaje de 16 palabras (32b por palabra).
Se acuerdan de esto:
Código:
...m(b-1)
M = mensaje
b = z, donde es múltiplo de 16
M = mensaje
b = z, donde es múltiplo de 16
Buffer MD
Código:
palabra A: 01 23 45 67
palabra B: 89 ab cd ef
palabra C: fe dc ba 98
palabra D: 76 54 32 10
palabra B: 89 ab cd ef
palabra C: fe dc ba 98
palabra D: 76 54 32 10
Podemos visualizar cuatro palabras (A, B, C, D), donde cada una de ellas contiene 32 bits de valores hexadecimales como podemos observar.
Procesado de Bloques de 16 palabras
Para entender este apartado es completamente necesario saber las tablas de verdad o tambien llamadas compuertas lógicas...
Veamos si puedo explicarlas...

XOR = tambien denominada Exclusiva, no es muy común...
Ocuparemos dos entradas, y obviamente una salida...
A B C
0 0 0
0 1 1
1 0 1
1 1 0
Podemos ver que si las entradas son iguales el resultado será cero [OFF].
Más info sobre XOR Aqui
AND = tambien denominada Y Lógica
Al igual que la anterior:
A B C
0 0 0
0 1 0
1 0 0
1 1 1
Pero esta vez ambas entradas deben ser positivas para que la salida sea positiva.
Más información Aquí
OR = tambien denominada O Lógica.
A B C
0 0 0
0 1 1
1 0 1
1 1 1
En este caso alguna o ambas de las entradas debe estar encendida (ON), para que la salida sea [ON]
Más información hacia esta compuerta Aquí
NOT = o Inversa
En este caso solo se utiliza una entrada [ON] [OFF] y una salida [ON]
[OFF]
A B
0 1
1 0
Más información hacia esta compuerta Aquí
Continuando con lo anterior, deberemos definir cuatro funciones, las que toman como entrada tres palabras, cada una de 32b y su salida (32b).
F(X,Y,Z) = (X AND Y) OR (NOT X AND Z)
G(X,Y,Z) = (X AND Y) OR (X AND NOT Z)
H(X,Y,Z) = X XOR Y XOR Z
I(X,Y,Z) = Y XOR (X OR NOT Z)
Pido disculpas por no redactar esta parte con mis propias palabras... tengo sueño... y ya me dio la flojera... xD
Cita de: Wikipedia
En cada posición de cada bit F actúa como un condicional: si X, entonces Y sino Z. La función F podría haber sido definida usando + en lugar de OR ya que XY y NOT(x) Z nunca tendrán unos ('1') en la misma posición de bit. Es interesante resaltar que si los bits de X, Y y Z son independientes y no sesgados, cada uno de los bits de F(X,Y,Z) será independiente y no sesgado.
Las funciones G, H e I son similares a la función F, ya que actúan "bit a bit en paralelo" para producir sus salidas de los bits de X, Y y Z, en la medida que si cada bit correspondiente de X, Y y Z son independientes y no sesgados, entonces cada bit de G(X,Y,Z), H(X,Y,Z) e I(X,Y,Z) serán independientes y no sesgados. Nótese que la función H es la comparación bit a bit "xor" o función "paridad" de sus entradas.Este paso usa una tabla de 64 elementos T[1 ... 64] construida con la función Seno. Denotaremos por T el elemento i-ésimo de esta tabla, que será igual a la parte entera del valor absoluto del seno de 'i' 4294967296 veces, donde 'i' está en radianes.
Las funciones G, H e I son similares a la función F, ya que actúan "bit a bit en paralelo" para producir sus salidas de los bits de X, Y y Z, en la medida que si cada bit correspondiente de X, Y y Z son independientes y no sesgados, entonces cada bit de G(X,Y,Z), H(X,Y,Z) e I(X,Y,Z) serán independientes y no sesgados. Nótese que la función H es la comparación bit a bit "xor" o función "paridad" de sus entradas.Este paso usa una tabla de 64 elementos T[1 ... 64] construida con la función Seno. Denotaremos por T el elemento i-ésimo de esta tabla, que será igual a la parte entera del valor absoluto del seno de 'i' 4294967296 veces, donde 'i' está en radianes.
Salida del Mensaje
El resumen del mensaje es la salida producida por A, B, C y D. Esto es, se comienza el byte de menor peso de A y se acaba con el byte de mayor peso de D.
Colisiones
Una Colisión Hash básicamente se produce cuando dos entradas distintas producen la misma salida.
Ahora imaginaros...
MD5 tiene 32 carácteres, tenemos una limitada cantidad de combinaciones no es así ???...
Más info sobre Colisiones Aquí
Espero sea de su total agrado este mini-tutorial de MD5... En el caso de copiar este tutorial, favor poner el author y la web de donde fue sacada dicha información.
Saludos...
Chr0n05
Copy & Paste de HxS
Me parecio un buen articulo para exponer en esta sección...

Saludos cordiales










Autor


En línea
