En 30 segundos
Un hash parece magia, pero por dentro solo hace una cosa: mezclar bits, 64 veces. Tu texto se convierte en ceros y unos, se rellena hasta 512, y en cada ronda los bits se giran, se cruzan con XOR y se suman. Cambia un solo bit y en 6 rondas casi la mitad ya es distinta. No se conoce forma de darle la vuelta: la única opción es probar a ciegas.
Paso 1 · De texto a bits
Cada letra se guarda como un número (su código ASCII) y cada número como 8 bits. «hola» son 4 letras, 32 bits:
h o l a
01101000 01101111 01101100 01100001
Paso 2 · Relleno hasta 512
SHA-256 trabaja en bloques de 512 bits. El mensaje se rellena siempre igual:
- Se añade un bit
1. - Ceros hasta que solo queden 64 bits libres en el bloque.
- En esos 64 bits, la longitud del mensaje original.
Para «hola»: 32 bits de texto + 1 + 415 ceros + 64 de longitud (que dicen «32») = 512 exactos. Al guardar la longitud, «hola» y «hola » (con espacio) nunca pueden acabar con el mismo relleno.
Paso 3 · Preparar 64 palabras
El bloque de 512 bits se corta en 16 palabras de 32 bits. SHA-256 las estira hasta 64, mezclando las anteriores: cada palabra nueva sale de girar y sumar cuatro de las que ya hay. Así, cada uno de tus bits acaba entrando en muchas rondas distintas.
Paso 4 · 64 rondas de mezcla
Hay 8 casillas de 32 bits, llamadas a a h. Empiezan con valores fijos y públicos: los primeros bits de las raíces cuadradas de los 8 primeros números primos. Se eligieron así a propósito para demostrar que no esconden ninguna trampa (los criptógrafos lo llaman números nothing up my sleeve, «nada en la manga»).
En cada ronda se usan tres operaciones muy baratas para un procesador:
| Operación | Símbolo | Qué hace |
|---|---|---|
| Girar | ROTRⁿ | mueve los bits n posiciones a la derecha; los que salen por un lado entran por el otro |
| XOR | ⊕ | compara bit a bit: 1 si son distintos, 0 si son iguales |
| Sumar | + | suma normal, pero si pasa de 32 bits se tira lo que sobra («módulo 2³²») |
Y con ellas se construyen cuatro funciones:
- Σ0(a) = ROTR²(a) ⊕ ROTR¹³(a) ⊕ ROTR²²(a): la casilla
agirada 2, 13 y 22 posiciones y combinada. Cada bit del resultado depende de tres bits muy separados entre sí: por eso los cambios se contagian tan rápido. - Σ1(e) = ROTR⁶(e) ⊕ ROTR¹¹(e) ⊕ ROTR²⁵(e): lo mismo con la casilla
e. - Ch(e, f, g), de choose: donde
etiene un 1, coge el bit def; donde tiene un 0, el deg. Es un «si… entonces…» bit a bit. - Maj(a, b, c), de majority: cada bit es el que gane la votación entre
a,byc.
Con todo eso, cada ronda calcula dos valores nuevos y desplaza las casillas una posición, como una cinta transportadora:
T1 = h + Σ1(e) + Ch(e,f,g) + K[t] + W[t]
T2 = Σ0(a) + Maj(a,b,c)
h←g g←f f←e e←d+T1 d←c c←b b←a a←T1+T2
W[t] es la palabra del mensaje de esa ronda y K[t] una constante distinta para cada una (sale de las raíces cúbicas de los 64 primeros primos). Tras las 64 rondas, las 8 casillas se suman a sus valores iniciales y se ponen una detrás de otra: 8 × 32 = 256 bits. Esa es la huella.
El efecto avalancha, medido
Si cambias un solo bit de la entrada, el cambio se contagia ronda a ronda. Lo ideal es que cada bit de la salida tenga un 50 % de probabilidad de cambiar, o sea, unos 128 de 256. Lo medí con un SHA-256 programado a mano, ronda a ronda:
| Ronda | Bits distintos (de 256) |
|---|---|
| 6 | 117 (el 46 %: «casi la mitad») |
| 64 | ≈ 128, repartidos al azar |
En 6 de 64 rondas ya está casi todo revuelto. Las otras 58 son margen de seguridad.
Por qué no se puede deshacer
Dos motivos, explicados sin fórmulas:
- Se pierde información. Al sumar «módulo 2³²» se tira lo que sobra, y un XOR de dos números no dice cuáles eran: muchas entradas distintas llevan al mismo paso intermedio.
- No es lineal.
ChyMajson decisiones del tipo «si este bit es 1…». Eso impide despejar las ecuaciones como en clase de matemáticas.
El resultado: no se conoce ningún atajo. Para encontrar un texto con una huella concreta habría que probar del orden de 2²⁵⁶ textos. Guárdate esto: probar a ciegas es exactamente lo que hacen los mineros (parte 4).
Datos
| Dato | Valor | Cómo se ha comprobado |
|---|---|---|
| Rondas, bloque, funciones y constantes | 64 rondas, 512 bits, Σ0, Σ1, Ch, Maj | estándar FIPS 180-4 del NIST |
| Avalancha en la ronda 6 | 117 de 256 bits distintos | SHA-256 propio, ronda a ronda, verificado contra el de Node.js |
Lo que el vídeo simplifica
- El vídeo enseña las tres operaciones de base (girar, XOR y sumar); las funciones Σ0, Σ1, Ch y Maj, la expansión a 64 palabras y las constantes son las piezas que las combinan.
- «No se conoce forma de darle la vuelta» es exactamente eso: no está demostrado que sea imposible, pero tras más de 20 años de estudio nadie ha encontrado un atajo.
