🔑 Criptografía Aplicada
Lección 2 de 6 — Cifrado, hashes, certificados y protocolos de comunicación segura.
1. Criptografía Simétrica
Usa la misma clave para cifrar y descifrar. Es rápida y eficiente para grandes volúmenes de datos.
AES (Advanced Encryption Standard)
- Estándar actual del gobierno de EE.UU. (FIPS 197).
- Claves de 128, 192 o 256 bits.
- Modos de operación: ECB (inseguro), CBC, GCM (recomendado con autenticación).
- Usado en: Wi-Fi (WPA2/3), VPNs (IPsec), cifrado de discos (LUKS, BitLocker).
# Ejemplo con OpenSSL
openssl enc -aes-256-cbc -salt -in datos.txt -out datos.enc -pass pass:MiClaveSegura
# Descifrar
openssl enc -d -aes-256-cbc -in datos.enc -out datos.txt -pass pass:MiClaveSegura
Otros algoritmos simétricos: ChaCha20 (moderno, usado en TLS 1.3), 3DES (obsoleto), Blowfish/Twofish.
2. Criptografía Asimétrica (Clave Pública)
Usa un par de claves: pública (para cifrar) y privada (para descifrar). Resuelve el problema del intercambio de claves.
RSA (Rivest–Shamir–Adleman)
- Basado en la dificultad de factorizar números primos grandes.
- Claves típicas: 2048 o 4096 bits.
- Usos: cifrado híbrido (intercambio de clave simétrica), firmas digitales.
- Más lento que la criptografía simétrica; por eso se usa en combinación (ej: TLS usa RSA para intercambiar una clave AES).
# Generar par de claves RSA
openssl genpkey -algorithm RSA -out clave_privada.pem -pkeyopt rsa_keygen_bits:2048
# Extraer clave pública
openssl pkey -in clave_privada.pem -pubout -out clave_publica.pem
ECC (Elliptic Curve Cryptography)
Ofrece seguridad equivalente a RSA con claves mucho más pequeñas. Ej: ECC de 256 bits ≈ RSA de 3072 bits. Usado en TLS, Bitcoin, SSH.
RSA-2048
ECC-256
Ed25519
DH / ECDH
3. Hash y Funciones Hash
Transforman datos de cualquier tamaño en un resumen fijo (hash). Son unidireccionales: no se puede obtener el original desde el hash.
SHA (Secure Hash Algorithm)
- SHA-1: 160 bits — considerado inseguro desde 2017 (ataque SHAttered).
- SHA-256 / SHA-512: familia SHA-2 — recomendado actualmente.
- SHA-3: diseño completamente nuevo (Keccak) — alternativa moderna.
# Calcular hash SHA-256
echo -n "Hola Mundo" | sha256sum
# Resultado: b1f4f9a523e36fd969f98b7b0e9b3c7c8b7b0e9b3c7c8b7b0e9b3c7c8b7b0e9b
# Verificar integridad de un archivo
sha256sum archivo.iso
⚠️ Importante: Los hash NO son cifrado. No se pueden "descifrar". Se usan para verificar integridad, almacenar contraseñas (con salt) y detectar cambios.
4. Certificados Digitales y PKI
Un certificado digital vincula una identidad (dominio, persona) con una clave pública. Está firmado por una Autoridad Certificadora (CA).
- X.509: estándar de certificados (formato .crt, .pem, .der).
- CA (Certificate Authority): entidad que firma y emite certificados (ej: Let's Encrypt, DigiCert).
- CSR (Certificate Signing Request): solicitud de firma de certificado.
- Cadena de confianza: Root CA → Intermediate CA → Certificado del servidor.
# Generar CSR
openssl req -new -newkey rsa:2048 -nodes -keyout miweb.key -out miweb.csr
# Verificar un certificado
openssl x509 -in certificado.crt -text -noout
5. SSL / TLS y HTTPS
TLS (Transport Layer Security) es el protocolo que cifra las comunicaciones en Internet. SSL es su predecesor (obsoleto). HTTPS = HTTP sobre TLS.
Handshake TLS (simplificado)
- Client Hello: el cliente envía versiones TLS y cifrados soportados.
- Server Hello: el servidor elige versión y cifrado, envía su certificado.
- Intercambio de claves: se genera una clave simétrica compartida (mediante RSA o Diffie-Hellman efímero).
- Conexión cifrada: a partir de aquí todos los datos viajan cifrados con AES/ChaCha20.
# Verificar la cadena TLS de un sitio
openssl s_client -connect ejemplo.com:443 -showcerts
# Obtener el certificado en texto
openssl s_client -connect ejemplo.com:443 < /dev/null 2>/dev/null | openssl x509 -text
Versiones de TLS
- TLS 1.0 / 1.1: obsoletos (deprecados por RFC 8996 en 2021).
- TLS 1.2: ampliamente usado, todavía seguro si se configuran cifrados fuertes.
- TLS 1.3: más rápido, elimina cifrados inseguros, perfect forward secrecy por defecto.
📌 Resumen
- Simétrica (AES): rápida, misma clave para cifrar y descifrar.
- Asimétrica (RSA/ECC): par de claves, intercambio seguro de claves.
- Hash (SHA-2/3): huella digital, integridad, contraseñas.
- Certificados: identidad + clave pública, firmados por una CA.
- TLS y HTTPS: cifrado en tránsito, base de la web segura.