0Pricing
Ethical Hacking Academy · Lección

Hashing

MD5, SHA y bcrypt

Hashing es una lección gratuita de Ethical Hacking Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ethical Hacking Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ethical Hacking Academy incluye 4 lecciones en total.

¿Qué es un hash?

Una función hash recibe una entrada de cualquier tamaño y produce una salida de tamaño fijo llamada resumen. La misma entrada siempre produce el mismo resumen.

Lo fundamental es que el hashing es una operación unidireccional. No se puede revertir matemáticamente un resumen para recuperar la entrada original. Esto es lo que diferencia los hashes tanto de la codificación como del cifrado.

Propiedades de un buen hash

Una función hash criptográfica debe ser:

  • Determinista: la misma entrada produce la misma salida.
  • Rápida de calcular (para el hashing general), pero idealmente lenta para el hashing de contraseñas.
  • Resistente a preimagen: dado un resumen, no se puede encontrar la entrada.
  • Resistente a colisiones: debe ser difícil encontrar dos entradas con el mismo resumen.
  • Efecto avalancha: un cambio de un bit invierte aproximadamente la mitad de los bits de salida.

MD5

MD5 produce un resumen de 128 bits (32 caracteres hexadecimales). Es rápido y fue habitual durante mucho tiempo, pero está roto desde el punto de vista criptográfico: existen ataques prácticos de colisión.

No utilice nunca MD5 para seguridad. Seguirá encontrándolo en sumas de comprobación de archivos y sistemas heredados, lo que lo convierte en un objetivo frecuente durante las evaluaciones.

echo -n 'password' | md5sum
# 5f4dcc3b5aa765d61d8327deb882cf99

La familia SHA

La familia SHA (Secure Hash Algorithm) es más robusta:

  • SHA-1: 160 bits. Actualmente se considera roto (ataque de colisión «SHADOW HAMMER» / Shattered). Evítelo.
  • SHA-2: incluye SHA-256 y SHA-512. Se utiliza ampliamente y actualmente es seguro.
  • SHA-3: diseño más reciente basado en Keccak, una alternativa a SHA-2.
echo -n 'password' | sha256sum
# 5e884898da28047151d0e56f8dc629...

El hashing no es cifrado

El cifrado se puede revertir con una clave. El hashing no se puede revertir en absoluto. Precisamente por eso se utiliza para almacenar contraseñas: el servidor nunca necesita la original.

Cuando inicia sesión, el servidor calcula el hash de lo que ha escrito y lo compara con el hash almacenado. Si coinciden, se autentica su identidad. La contraseña en texto plano nunca se almacena.

El problema: las tablas arcoíris

Como el hashing es determinista, el resumen de «password» es el mismo para todos los usuarios. Los atacantes precalculan enormes tablas de consulta que relacionan resúmenes con texto plano, llamadas tablas arcoíris.

Si dos usuarios comparten la misma contraseña, sus hashes almacenados son idénticos, lo que revela ese hecho. Los hashes rápidos simples, como MD5 o SHA-256 por sí solos, no son adecuados para las contraseñas.

Uso de salt

Un salt es un valor aleatorio único que se añade a cada contraseña antes de aplicar el hashing. Esto significa lo siguiente:

  • Las contraseñas idénticas producen hashes diferentes.
  • Las tablas arcoíris precalculadas dejan de ser útiles.

El salt se almacena junto al hash; no es secreto. Su función es hacer que cada hash sea único, obligando a los atacantes a descifrarlos individualmente.

stored = salt + hash(salt + password)
# salt is random and unique per user

bcrypt: diseñado para contraseñas

bcrypt está diseñado específicamente para almacenar contraseñas. Es intencionadamente lento e incluye un factor de coste configurable (factor de trabajo) que lo hace más lento a medida que mejora el hardware.

Un hash de bcrypt incluye el algoritmo, el coste y el salt en una sola cadena. La lentitud es una característica: limita la velocidad a la que los atacantes pueden probar contraseñas.

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
# $2b$ = bcrypt, 12 = cost factor, then salt + hash

Otros hashes lentos

Además de bcrypt, las opciones modernas para aplicar hashing a contraseñas incluyen:

  • scrypt: requiere mucha memoria y resiste los ataques con GPU y ASIC.
  • Argon2: ganador de la Password Hashing Competition, configurable en cuanto a tiempo y memoria. Es la opción moderna recomendada.
  • PBKDF2: aplica un hash rápido durante muchos miles de iteraciones; es aceptable, pero más débil que las opciones anteriores.

HMAC e integridad

Los hashes también se utilizan para la integridad, no solo para las contraseñas. Un HMAC (código de autenticación de mensajes basado en hash) combina un hash con una clave secreta para verificar tanto la integridad como la autenticidad de un mensaje.

Las sumas de comprobación de archivos (a menudo SHA-256) permiten verificar que una descarga no ha sido manipulada. Como hacker, las sumas de comprobación que no coinciden pueden revelar archivos modificados o maliciosos.

Hashes en la práctica

Como hacker, se encontrará constantemente con hashes:

  • /etc/shadow en Linux almacena hashes de contraseñas con salt, con prefijos como $6$ (SHA-512) o $2b$ (bcrypt).
  • Windows almacena hashes NTLM en la base de datos SAM.
  • Las aplicaciones web almacenan las contraseñas con hashing en sus tablas de usuarios.

Reconocer el prefijo le indica al instante el algoritmo y la estrategia de descifrado que debe seguir.

$6$rounds=5000$salt$hash   # SHA-512 crypt
$2b$12$saltandhash...      # bcrypt

Comprobación rápida

Elija la opción más segura para almacenar las contraseñas de los usuarios.

Resumen

Ahora comprende el hashing:

  • El hashing es una transformación unidireccional, de tamaño fijo y determinista, diferente de la codificación y del cifrado.
  • MD5 y SHA-1 están vulnerados; use SHA-256 para la integridad general.
  • Para las contraseñas, use algoritmos lentos y con salt: bcrypt, scrypt o Argon2.
  • Los salt impiden el uso de tablas arcoíris; HMAC añade integridad basada en una clave.

A continuación explorará el cifrado simétrico y asimétrico con AES y RSA.

Preguntas frecuentes

¿La lección «Hashing» es gratis?

Sí — el texto completo de «Hashing» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ethical Hacking Academy, actualiza a CoddyKit PRO. El curso de Ethical Hacking Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Hashing»?

MD5, SHA y bcrypt Practicas Ethical Hacking Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Ethical Hacking Academy?

No se requiere experiencia previa. Ethical Hacking Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Hashing»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Ethical Hacking Academy?

Sí. Cada lección de Ethical Hacking Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Codificación frente a cifrado
  2. Hashing
  3. Simétrico y asimétrico
  4. Cracking de hashes
← Volver a Ethical Hacking Academy