Cómo Procesan la Información las Funciones de Hasheo
Funciones de hasheo como MD5, SHA-1 y SHA-256 no procesan toda la información a la vez. En su lugar, la rompen en bloques de tamaño fijo. Por ejemplo, SHA-256 usa bloques de 512 bits. Si la información no se ajusta perfectamente, se le aplica padding. El padding es esencial porque asegura que la información se ajusta al tamaño exacto del bloque, necesario para que la función funcione.
Por qué Importa el Padding
El padding no es sólo un filtro. Sirve dos propósitos críticos:
- Alineación de la información: La información necesita ser alineada al tamaño exacto del bloque, por lo que si el mensaje es más corto, el padding rellena el espacio restante.
- Integridad del mensaje: Al final del padding, la longitud del contenido original es añadida. Esto asegura que cualquier cambio en la longitud pueda ser detectado más adelante.
La forma de ajustar con padding es la siguiente:
- Se coge el mensaje (supongamos) 717 bits.
- Se divide en bloques de 512 (el primero completo y el segundo de 205).
- El bloque incompleto se ajusta (en el último bloque siempre debe ir la longitud del mensaje). Para ajustarlo debes llegar a 448 bits rellenados, puesto que la longitud se reserva escribirla a los últimos 64 bits. Para ajustarlo debes rellenar de 0's.
- Si el mensaje fuera de justo 448 bits se pondría un 1 seguido de 63 0's y en el siguiente bloque se rellenarían 448 bits de 0's y luego se pondría la longitud en formato binario 64 bits.
Ejemplo:
Mensaje de 717 bits.
Primer bloque: 512 Segundo bloque: 512
El primer bloque queda completamente rellenado mientras que el segundo en la parte del mensaje quedan rellenos sólo 205 bits.
Ahora cogemos los 205 bits y siempre seguimos el mismo formato:
- Añadimos un 1 (bit 206).
- Rellenamos con 0's hasta el bit 448 (242 0's).
- Por último escribimos en formato binario de 64 bits la longitud del mensaje (717).
Esto quedaría:
Primer bloque: Entero ocupado. Segundo bloque: 205 bits (de la segunda parte del mensaje) + 1 bit (1) + 242 bits (0) + 64 bits de longitud(54 bits (0) + 1011001101 (717 en binario)).
[512 bits de mensaje] [205 bits de mensaje][1][242 ceros][longitud = 717 en 64 bits]
Cómo Usan Estados las Funciones de Hasheo
Una vez aplicado el padding a la información, la función de hasheo procesa bloque por bloque, actualizando su estado interno cada vez. Este estado interno es una colección de valores de tamaño fijo (llamados registers) que guardan resultados intermedios. Cada vez que un bloque es procesado, la función de hasheo cambia estos valores, trabajando a través de rondas de transformaciones hasta que toda la información es procesada.
Por ejemplo, SHA-256 tiene 8 palabras (A, B, C, D, E, F, G, H) en su estad interno, y estos valores se actualizan cada vez que se procesa un bloque. La idea es remover la información tan firmemente que cualquier pequeño cambio del input cambia por completo el resultado final del hash (parecido a un doble péndulo).
Desglose de Funciones de Hasheo Populares
Vamos a ver más de cerca cómo funcionan algunos de los algoritmos de hasheo más famosos:
MD5
- Tamaño del bloque: 512 bits
- Estado interno: 128 bits, dividido en 4 registros (A, B, C, D).
- Rondas: MD5 procesa cada bloque de información a través de 64 rondas de operaciones las cuales involucran cosas como la adición, cambios bitwise y XOR.

Por qué es vulnerable: El estado interno de MD5 y el padding son predecibles, haciéndolo vulnerable a ataques como length extension, donde el atacante puede añadir información al mensaje y seguir generando un hash válido.
SHA-1
- Tamaño del bloque: 512 bits
- Estado interno: 160 bits, dividido en 5 registros (A, B, C, D, E).
- Rondas: SHA-1 procesa cada bloque a través de 80 rondas de transformaciones, como MD5 pero más complejo.

Por qué es vulnerable: SHA-1 ha sido probada de ser vulnerable en su habilidad para evitar colisiones, y como MD5, es vulnerable a los length extension attacks.
SHA-256
- Tamaño del bloque: 512 bits
- Estado interno: 256 bits, dividido en 8 registros (A, B, C, D, E, F, G, H).
- Rondas: SHA-1 procesa cada bloque a través de 64 rondas de transformaciones, actualizando su estado con cambios bitwise, rotaciones y adiciones.

Por qué es mejor pero no perfecta: SHA-256 es mucho más fuerte que MD5 y SHA-1 pero sigue siendo vulnerable a length extension si se usa incorrectamente (especialmente sin clave secreta como HMAC).
Cómo Funcionan el Padding y la Manipulación de Estado
Para hacerlo más concreto, imagina que estás hasheando el mensaje "TryHackMe". El mensaje se paddea hasta que encaja en el bloque de 512 bits. Entonces, la función de hasheo inicializa su estado interno y comienza a ir por la información, bloque a bloque. Con cada bloque procesado, el estado interno se actualiza mediante múltiples rondas de operaciones. Al final del proceso, obtienes un hash que representa el input completo, con el menor cambio, se altera completamente el resultado final.
