elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: kub0x)
| | | |-+  ¿Cómo se hacen los hashes MD5?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo se hacen los hashes MD5?  (Leído 4,392 veces)
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
¿Cómo se hacen los hashes MD5?
« en: 12 Marzo 2011, 16:10 »

Bueno, estaba leyendo por aquí y por allá, y he visto en varios post del foro cómo algunos sistemas acaban cifrando el resultado del proceso con MD5. Mi pregunta es... ¿cómo se cifran los hashes MD5? No busco programas ni cosas de ese tipo, sino saber el proceso de forma manual...

Un saludo y gracias!
Sagrini


En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: ¿Cómo se hacen los hashes MD5?
« Respuesta #1 en: 12 Marzo 2011, 17:31 »

Según wikipedia:
Citar
Los siguientes cinco pasos son efectuados para calcular el resumen del mensaje.

Paso 1. Adición de bits
El mensaje será extendido hasta que su longitud en bits sea congruente con 448, módulo 512. Esto es, si se le resta 448 a la longitud del mensaje tras este paso, se obtiene un múltiplo de 512. 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 solo bit "1" se añade al mensaje, y después se añaden bits "0" hasta que la longitud en bits del mensaje extendido se haga 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
Un entero de 64 bits que represente la longitud 'b' del mensaje (longitud antes de añadir los bits) se concatena 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 resumen 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:
  palabra A: 01 23 45 67
  palabra B: 89 ab cd ef
  palabra C: fe dc ba 98
  palabra D: 76 54 32 10

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.

Los operadores  son las funciones XOR, AND, OR y NOT respectivamente.
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 v 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.

Código del MD5:
 /* Procesar cada bloque de 16 palabras. */
para i = 0 hasta N/16-1 hacer
 
   /* Copiar el bloque 'i' en X. */
   para j = 0 hasta 15 hacer
     hacer X[j] de M[i*16+j].
   fin para /* del bucle 'j' */
 
 /* Guardar A como AA, B como BB, C como CC, y D como DD. */
 AA = A
 BB = B
 CC = C
 DD = D
 
 /* Ronda 1. */
 /* [abcd k s i] denotarán la operación
      a = b + ((a + F(b, c, d) + X[k] + T) <<< s). */
 /* Hacer las siguientes 16 operaciones. */
 [ABCD  0  7  1] [DABC  1 12  2] [CDAB  2 17  3] [BCDA  3 22  4]
 [ABCD  4  7  5] [DABC  5 12  6] [CDAB  6 17  7] [BCDA  7 22  8]
 [ABCD  8  7  9] [DABC  9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
 [ABCD 12  7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
 
 /* Ronda 2. */
 /* [abcd k s i] denotarán la operación
     a = b + ((a + G(b, c, d) + X[k] + T) <<< s). */
 /* Hacer las siguientes 16 operaciones. */
 [ABCD  1  5 17] [DABC  6  9 18] [CDAB 11 14 19] [BCDA  0 20 20]
 [ABCD  5  5 21] [DABC 10  9 22] [CDAB 15 14 23] [BCDA  4 20 24]
 [ABCD  9  5 25] [DABC 14  9 26] [CDAB  3 14 27] [BCDA  8 20 28]
 [ABCD 13  5 29] [DABC  2  9 30] [CDAB  7 14 31] [BCDA 12 20 32]
 
 /* Ronda 3. */
 /* [abcd k s t] denotarán la operación
     a = b + ((a + H(b, c, d) + X[k] + T) <<< s). */
 /* Hacer las siguientes 16 operaciones. */
 [ABCD  5  4 33] [DABC  8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
 [ABCD  1  4 37] [DABC  4 11 38] [CDAB  7 16 39] [BCDA 10 23 40]
 [ABCD 13  4 41] [DABC  0 11 42] [CDAB  3 16 43] [BCDA  6 23 44]
 [ABCD  9  4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA  2 23 48]
 
 /* Ronda 4. */
 /* [abcd k s t] denotarán la operación
     a = b + ((a + I(b, c, d) + X[k] + T) <<< s). */
 /* Hacer las siguientes 16 operaciones. */
 [ABCD  0  6 49] [DABC  7 10 50] [CDAB 14 15 51] [BCDA  5 21 52]
 [ABCD 12  6 53] [DABC  3 10 54] [CDAB 10 15 55] [BCDA  1 21 56]
 [ABCD  8  6 57] [DABC 15 10 58] [CDAB  6 15 59] [BCDA 13 21 60]
 [ABCD  4  6 61] [DABC 11 10 62] [CDAB  2 15 63] [BCDA  9 21 64]
 
 /* Ahora realizar las siguientes sumas. (Este es el incremento de cada
    uno de los cuatro registros por el valor que tenían antes de que
    este bloque fuera inicializado.) */
 
    A = A + AA
    B = B + BB
    C = C + CC
    D = D + DD
 
 fin para /* del bucle en 'i' */

Paso 5. Salida
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.
http://es.wikipedia.org/wiki/MD5


Saludos


En línea

APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
Re: ¿Cómo se hacen los hashes MD5?
« Respuesta #2 en: 12 Marzo 2011, 17:42 »

Es probable que lo pregunta porque no entendió lo que aparece en wikipedia, realmente los hashes son un tema muy interesante para tratarlos a fondo, como tratamos los algoritmos en el taller de criptografía asimétrica. Pero realmente son temas bastante complicados, sobre todo de hacer criptoanálisis, ya que requiere avanzados conocimientos de estadística descriptiva e inferencial.

Sagrini, sabés algún lenguaje de programación? Quizas te parece más claro si lo podés ver en un código que te suene más familiar.
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿Cómo se hacen los hashes MD5?
« Respuesta #3 en: 13 Marzo 2011, 17:00 »

Entiendo C, muchas gracias :rolleyes:.

Aparte, aprovecho para preguntar sobre lo de Wikipedia...
Me doy cuenta gracias a la Wikipedia ;) no entendía bien "congruente". Vamos a ver, un número es congruente con otro cuando dan el mismo resto a dividirlos entre un módulo (512). Entonces... ¿La longitud del mensaje deberá ser múltiplo de 448? A partir de ahí no salgo :P

Gracias a los dos!
Sagrini

MOD: Te saco el tachado, debés querer haber puesto subrrayado, no?? es con la "u".
RESP: No, quería tachar, gracias de todos modos ;) Directamente lo borro ;) Lo puse por si de todos modos era parecido a eso...
« Última modificación: 13 Marzo 2011, 19:09 por Sagrini » En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
Re: ¿Cómo se hacen los hashes MD5?
« Respuesta #4 en: 13 Marzo 2011, 18:00 »

Nop, congruente significa lo siguiente:
Se le agrega primero un bit "1" y luego, se le agregan suficientes "0" (como máximo 512) hasta que la longitud del mensaje módulo 512 sea 448.

Si uno quiere que "x" sea congruente con 448 módulo 512 significa que:
x MOD 512 = 448.
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como le hacen??
Sugerencias y dudas sobre el Foro
The Dark Wolf 1 1,207 Último mensaje 7 Junio 2005, 17:23
por el-brujo
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines