Cálculo MD5

Los cálculos MD5 se utilizan para generar una firma única asociada a una secuencia de bytes sin importar la naturaleza de los datos representados en dicha representación.

Este algoritmo se encuentra especificado en el RFC-1321 (disponible en este enlace) del Internet Engineering Task Force (IETF), y propone el cálculo hash de un mensaje de tamaño arbitrario para encontrar de forma consistente una "huella" de 128 bits (16 bytes o 32 dígitos hexadecimales). Otro acercamiento para entender el algoritmo se encuentra en este archivo adjunto.

En la página se desarrolló una herramienta para la validación de cada paso del cálculo en este algoritmo, disponible en esta ubicación

Uso de la herramienta

Puede hacer el cálculo de texto directamente o subir un archivo (textual o binario) para el cálculo de la firma. En caso de no indicar un archivo, se calculará únicamente la firma basada en el texto; si se indican ambos se unirán para un cálculo conjunto del texto y los bytes contenidos en el archivo; si se quiere obtener la firma únicamente de un archivo se debe dejar en blanco el campo de texto.

Si utilizamos la secuencia de caracteres "abcdefghijklmnopqrstuvwxyz", obtendremos la firma o código hash "c3fcd3d76192e4007dfb496cca67e13b", lo cual puede ser verfiicado en múltiples herramientas en línea. Lo importante es el registro de eventos que se despliegan bajo el código hash obtenido. En orden, se pueden observar los siguientes elementos:

  1. El texto completo que se está utilizando para el cálculo, o una aproximación de los bytes desplegables en caso de utilizar un archivo con contenidos binarios.
  2. El código hexadecimal completo asociado a estos contenidos seguido por su reinterpretación binaria.
  3. Datos del acolchonamiento o padding para completar la primera etapa del algoritmo y obtener un cuerpo cuyo tamaño sea múltiplo de 512 bits y el bloque binario resultante.
  4. Información detallada sobre los registros A, B, C y D en cada etapa de cada ronda en la manipulación de cada bloque para verificar los resultados parciales de cada función general y específica. Es acá donde crece exponencialmente la cantidad de datos desplegados según el tamaño del mensaje que se utiliza.

Un mensaje con tamaño de 250KB equivale a 2.048.000 bits que 4000 bloques de contenido a 512 bits por bloque, a este se le debe sumar el bloque de acolchonamiento. 4001 bloques con 4 rondas de 16 cálculos cada una son más de 256.000 líneas de texto desplegadas. Esto todavía es manejable de forma bastante rápida tanto por el servidor como el navegador. Cuando se crece por encima de este tamaño de mensaje, el navegador puede dar problemas por uso de memoria local, lo cual se puede atacar ya sea quitando la marca del selector para mostrar la bitácora de cálculos o incrementando localmente la cantidad de memoria máxima que puede usar el navegador por página.

Se busca con esta aplicación web tener una referencia para la implementación de cálculos en cualquier lenguaje de programación, de forma que se pueda tener el detalle granular de los resultados esperados en cada paso, con cada modificación de cada uno de los registros. Se puede ser más detallado mostrando los resultados de las funciones base F, G, H e I y las funciones de ronda FF, GG, HH, e II, pero esto incrementaría la cantidad de datos obtenidos de forma muy altamente considerable. Esto se puede mitigar si se quisiera implementar, haciendo el registro en un archivo csv o similar y facilitando la descarga en lugar del despliegue en pantalla. Esto será trabajo para un futuro.

No comments

Comentarios en artículos

No comments

Nobody has submitted a comment yet.