¿Cómo se descifra un hash SHA-256 para recuperar la entrada original?
Respuesta breve
No se descifra — los hashes criptográficos son funciones unidireccionales sin inversa. «Crackear» un hash significa adivinar entradas candidatas, hashear cada una y comparar (diccionario, fuerza bruta, rainbow tables), que es justo por lo que se usan hashes lentos y salados para las contraseñas. No hay ninguna clave que «descifre» un hash. Si algo se puede descifrar, fue cifrado, no hasheado — y Base64 es codificación reversible, no hash.
Esta es una trampa clásica para juniors. La frase «descifrar un hash» suena razonable pero es un error de categoría: el hash y el cifrado son operaciones distintas, y solo una de ellas es reversible.
El hash es unidireccional por diseño
SHA-256 transforma una entrada de cualquier tamaño en un resumen fijo de 256 bits mezclando y comprimiendo los datos repetidamente. La función descarta información a propósito — muchas entradas distintas dan una salida de la misma longitud — por lo que no existe ninguna inversa matemática que ejecutar. Esta propiedad se llama resistencia a preimagen: dado un resumen, no puedes calcular una entrada que lo produzca. Tampoco hay ninguna clave involucrada, así que no hay nada con qué «descifrar».
Qué hace realmente «crackear»
Cuando las herramientas parecen «invertir» un hash, están adivinando. El primer paso es reconocer el algoritmo — justo lo que hace un identificador de hashes en línea —, tras lo cual el atacante toma entradas candidatas — palabras de un diccionario, mutaciones, o cadenas por fuerza bruta — hashea cada una y comprueba si el resumen coincide. Una rainbow table no es más que ese adivinar hecho de antemano y almacenado con astucia. Nada de esto invierte la función; recorre el espacio de entradas. Por eso justamente las contraseñas se almacenan con hashes lentos y salados (bcrypt, scrypt, Argon2): para encarecer cada intento.
Cifrado, codificación y hash
Los distractores se apoyan en tres confusiones:
- El cifrado es reversible con una clave (AES, RSA). Si puedes descifrarlo, fue cifrado, no hasheado.
- La codificación como Base64 es reversible sin clave — es un cambio de representación, no seguridad. Decodificar Base64 nunca recupera una entrada hasheada.
- El hash es unidireccional y sin clave.
La respuesta «aplicar la función de ronda inversa» también es falsa: la función de compresión de SHA-256 no es invertible de forma que recupere el mensaje, y conocer el tamaño de bloque no aporta nada.
La respuesta correcta en la entrevista
Di con claridad que no puedes descifrar un hash porque no tiene inversa ni clave; el único camino es adivinar y comparar. Luego añade la implicación de seguridad: como adivinar es el único ataque, los defensores hacen que adivinar sea lento y único por registro con hashes salados adaptativos.
Posibles preguntas de seguimiento
- ¿Cuál es la diferencia entre cifrado, codificación y hash?
- ¿Cómo «invierten» un hash las rainbow tables si el hash no tiene inversa?
- ¿Por qué una sal ralentiza los ataques que crackean muchos hashes a la vez?