0Pricing
Cloud & IT Cert Prep · Lección

Hashing e integridad de los datos

Aprenda cómo SHA-256, MD5 y HMAC generan resúmenes de longitud fija que verifican que los datos no se hayan alterado durante el tránsito o el almacenamiento.

Hashing e integridad de los datos es una lección gratuita de Cloud & IT Cert Prep en CoddyKit. Esta es la lección 3 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 Cloud & IT Cert Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.

¿Qué es una función hash?

Una función hash criptográfica es un algoritmo matemático que toma una entrada de cualquier tamaño y produce una salida de longitud fija llamada hash, resumen o huella digital. Las funciones hash son unidireccionales: a partir de un hash, debe ser computacionalmente inviable determinar la entrada original. También son deterministas: la misma entrada siempre produce el mismo hash. Las funciones hash son la base de la verificación de la integridad de los datos, las firmas digitales, el almacenamiento de contraseñas y muchos otros mecanismos de seguridad.

Propiedades de las funciones hash seguras

Una función hash criptográfica segura debe tener cuatro propiedades fundamentales. Resistencia a la preimagen: dado el resultado de un hash, debe ser computacionalmente inviable encontrar una entrada que lo produzca. Resistencia a la segunda preimagen: dada una entrada, debe ser inviable encontrar otra entrada diferente con el mismo hash. Resistencia a colisiones: debe ser inviable encontrar dos entradas diferentes que produzcan el mismo resultado hash. Efecto avalancha: cambiar incluso un solo bit de la entrada provoca un resultado hash completamente diferente, lo que permite detectar manipulaciones.

# Avalanche effect demonstration
echo -n 'Hello' | sha256sum
# 185f8db32...  (completely different when one char changes)
echo -n 'Hello!' | sha256sum
# 334d016f7...  (entirely different hash)

# Same input ALWAYS produces same hash (deterministic)
echo -n 'Security+' | sha256sum
echo -n 'Security+' | sha256sum
# Both outputs are identical

MD5: roto y obsoleto

MD5 (Message Digest 5) produce un hash de 128 bits y en el pasado se utilizó ampliamente. Sin embargo, en 2004 los investigadores demostraron la existencia de ataques de colisión contra MD5, lo que significa que se pueden encontrar dos entradas diferentes que produzcan el mismo hash. Esto es catastrófico para la verificación de integridad: un atacante podría sustituir un archivo malicioso que tenga el mismo hash MD5 que el original. MD5 está completamente roto para la seguridad criptográfica y no debe utilizarse para la verificación de integridad, las firmas digitales ni el hashing de contraseñas. A veces todavía aparece en sumas de comprobación que no requieren seguridad (verificación de archivos heredada), lo cual solo es aceptable para detectar corrupción accidental.

Familia SHA: SHA-1, SHA-256 y SHA-3

La familia Secure Hash Algorithm (SHA) es el conjunto de funciones hash más importante para Security+. SHA-1 (de 160 bits) fue el estándar durante años, pero en 2017 un ataque de colisión práctico logró romperlo (el proyecto SHAttered de Google), por lo que ahora está obsoleto. SHA-256 (parte de la familia SHA-2, con una salida de 256 bits) es el estándar actual del sector para firmas digitales, certificados TLS y verificación de la integridad de archivos. SHA-3 (Keccak) es el algoritmo alternativo de NIST, que ofrece resistencia frente a ataques dirigidos a la estructura de SHA-2, aunque SHA-256 sigue siendo la opción predominante para la mayoría de las aplicaciones.

# Common hash computations
echo -n 'password123' | sha256sum
# a665a4592...64 hex chars = 256 bits

echo -n 'password123' | sha512sum  
# b109f3bb...128 hex chars = 512 bits (SHA-512)

# File integrity check
sha256sum /path/to/downloaded_file.iso > file.sha256
sha256sum -c file.sha256
# file.iso: OK

Funciones hash para almacenar contraseñas

Almacenar contraseñas en texto plano nunca es aceptable. Cuando un usuario crea una contraseña, en la base de datos se almacena un hash en lugar de la propia contraseña. Cuando el usuario inicia sesión, se calcula el hash de la contraseña introducida y se compara con el hash almacenado. Sin embargo, SHA-256 estándar es demasiado rápido para almacenar contraseñas: los atacantes utilizan GPU para probar miles de millones de hashes por segundo contra bases de datos de contraseñas robadas. Las funciones hash para contraseñas diseñadas específicamente para este fin, como bcrypt, PBKDF2 y Argon2, añaden un coste computacional (factores de trabajo) y requisitos de memoria que hacen inviable el cracking masivo.

# bcrypt hash example (Python-style pseudocode)
import bcrypt
password = b'mySecretPassword'
# Hash with work factor of 12 (2^12 = 4096 iterations)
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Stored in DB: $2b$12$H0qS/LkPkAiH8KlxJb3lFuK...

# Verify (never compare raw hashes for bcrypt)
bcrypt.checkpw(password, hashed)  # Returns True

Salting: cómo frustrar las tablas arcoíris

Una tabla arcoíris es una tabla de consulta precalculada que relaciona contraseñas comunes con sus hashes, lo que permite a un atacante buscar instantáneamente un hash y encontrar la contraseña original. Para frustrar las tablas arcoíris, los hashes de las contraseñas deben incluir salt. Un salt es un valor aleatorio que se añade a la contraseña antes de calcular el hash, de modo que el hash de cada usuario sea único, aunque dos usuarios tengan la misma contraseña. El salt se almacena junto al hash (no es necesario mantenerlo en secreto). Aunque un atacante tenga toda la base de datos de contraseñas, las tablas arcoíris precalculadas no sirven, porque cada hash se calculó con un salt diferente.

# Salt demonstration
# Without salt: same password = same hash (rainbow table attack works)
# SHA256('password123') = always the same hash

# With salt: same password + random salt = unique hash
# SHA256('password123' + 'aBc8xZ') = unique hash for this user
# SHA256('password123' + 'mK2pYq') = completely different hash

# The salt is stored in the database alongside the hashed value
# Format: $salt$hash or combined as in bcrypt output

HMAC: añadir autenticación al hashing

HMAC (Hash-based Message Authentication Code) es una construcción que utiliza una función hash con una clave secreta para producir un código de autenticación. A diferencia de un hash simple, un HMAC solo puede ser calculado y verificado por las partes que conocen la clave secreta. Esto proporciona tanto integridad (detección de cambios) como autenticación (demostración de que el mensaje procede de alguien que posee la clave). HMAC-SHA256 se utiliza ampliamente en la autenticación de API (para firmar solicitudes de API), los tokens JWT y las operaciones MAC de TLS. Impide que un atacante que intercepte un mensaje lo sustituya por una alternativa manipulada.

# Compute HMAC-SHA256 with OpenSSL
openssl dgst -sha256 -hmac 'my-secret-api-key' -hex api_request.json
# Output: HMAC-SHA256(api_request.json)= 3d4e2f...

# Only someone with 'my-secret-api-key' can generate or verify this HMAC
# Used in AWS Signature V4 for API authentication
# Used in JWT HS256 algorithm for token integrity

Funciones hash en las firmas digitales

Las funciones hash desempeñan un papel central en las firmas digitales. Al firmar un documento grande, no se cifra todo el documento con la clave privada, ya que sería extremadamente lento. En su lugar: (1) se calcula el hash del documento (es rápido y produce un resumen pequeño de longitud fija) y, a continuación, (2) se firma el hash pequeño con la clave privada. La firma es simplemente un hash cifrado. La verificación sigue el mismo patrón: se descifra la firma para obtener el hash, se calcula de forma independiente el hash del documento y se comparan ambos. SHA-256 es obligatorio en todos los certificados PKI modernos; SHA-1 está prohibido en los certificados nuevos.

Supervisión de la integridad de archivos (FIM)

La supervisión de la integridad de archivos (FIM) utiliza funciones hash para detectar cambios no autorizados en archivos críticos del sistema. Como línea base, la herramienta FIM calcula el hash de todos los archivos supervisados y almacena los hashes de forma segura. Periódicamente (o de forma continua), vuelve a calcular el hash de los archivos y lo compara con la línea base. Cualquier discrepancia indica que un archivo ha sido modificado, posiblemente por malware o por una acción no autorizada de un administrador. Herramientas FIM como Tripwire, AIDE (Linux) y la propia comprobación de integridad de Windows utilizan hashes SHA-256. Los marcos normativos como PCI-DSS requieren FIM para proteger los entornos que contienen datos de titulares de tarjetas.

# AIDE (Advanced Intrusion Detection Environment) - Linux FIM
# Initialize baseline database
aide --init
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# Check for changes (run via cron daily)
aide --check
# Output shows any files that were added, changed, or deleted
# File: /etc/passwd changed
# MD5 : old_hash != new_hash

Sumas de comprobación frente a hashes criptográficos

Es importante distinguir entre las sumas de comprobación y los hashes criptográficos. Las sumas de comprobación como CRC32 están diseñadas para detectar la corrupción accidental de datos durante la transmisión; son rápidas y sencillas, pero un atacante puede falsificarlas fácilmente. Los hashes criptográficos (SHA-256) están diseñados para resistir colisiones y permitir detectar manipulaciones, incluso frente a modificaciones maliciosas. Utilice sumas de comprobación cuando solo necesite verificar que una descarga no se ha corrompido durante la transmisión; utilice hashes criptográficos cuando necesite verificar que un archivo no ha sido manipulado intencionadamente por un adversario.

Ataques de colisión de hash en la práctica

Los ataques de colisión de hash tienen consecuencias en el mundo real. En 2017, unos investigadores crearon dos archivos PDF diferentes con el mismo hash SHA-1, demostrando que los certificados SHA-1 podían falsificarse. En 2008, unos investigadores utilizaron colisiones de MD5 para crear un certificado de CA falso que parecía legítimo. Por eso los navegadores rechazan los certificados MD5 y SHA-1, y las autoridades de certificación deben utilizar como mínimo SHA-256. Comprender los ataques de colisión ayuda a explicar por qué se toman decisiones de obsolescencia de algoritmos y por qué «pero sigue produciendo un hash» no es un argumento suficiente para utilizar algoritmos vulnerables.

Comprobación rápida

Compruebe su comprensión de los conceptos de CompTIA Security+ (SY0-701) abordados en esta lección.

Resumen de la lección

En esta lección ha aprendido que las funciones hash producen resúmenes de longitud fija para verificar la integridad; MD5 y SHA-1 están rotos y obsoletos; SHA-256 es el estándar actual; el salting neutraliza los ataques de tablas arcoíris; y HMAC añade autenticación al hashing mediante una clave secreta compartida. A continuación, exploraremos el intercambio de claves y el cifrado híbrido.

Preguntas frecuentes

¿La lección «Hashing e integridad de los datos» es gratis?

Sí — el texto completo de «Hashing e integridad de los datos» 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 Cloud & IT Cert Prep, actualiza a CoddyKit PRO. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Hashing e integridad de los datos»?

Aprenda cómo SHA-256, MD5 y HMAC generan resúmenes de longitud fija que verifican que los datos no se hayan alterado durante el tránsito o el almacenamiento. Practicas Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

No se requiere experiencia previa. Cloud & IT Cert Prep 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 3 de 4.

¿Cuánto tiempo toma la lección «Hashing e integridad de los datos»?

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 Cloud & IT Cert Prep?

Sí. Cada lección de Cloud & IT Cert Prep 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. Algoritmos de cifrado simétrico
  2. Cifrado asimétrico y pares de claves
  3. Hashing e integridad de los datos
  4. Intercambio de claves y cifrado híbrido
← Volver a Cloud & IT Cert Prep