Cada vez que haces una compra online, envías un correo o usas WhatsApp, tus datos viajan encriptados. La encriptación (o cifrado) es el arte de transformar información legible en un galimatías ininteligible, y solo aquellos que poseen la clave adecuada pueden descifrarla. Hay dos grandes familias: la encriptación simétrica (una misma clave para cifrar y descifrar) y la asimétrica (clave pública para cifrar, clave privada para descifrar). Además, las funciones hash se usan para verificar la integridad sin necesidad de clave. Te explico cómo funcionan los algoritmos AES, RSA, SHA, qué son los certificados digitales y por qué el candado verde de tu navegador (TLS) es la columna vertebral de internet seguro.
Conceptos básicos: cifrado, descifrado, clave, texto claro y cifrado
La encriptación se basa en transformar un mensaje legible (texto claro o plaintext) en un mensaje ilegible (texto cifrado o ciphertext) mediante un algoritmo y una clave. El algoritmo es público (Kerckhoffs: la seguridad no debe depender del secreto del algoritmo, sino de la clave).
Ejemplo histórico: cifrado César (desplazar letras). Si la clave es 3, “hola” se convierte en “krod”. Con la clave 3 inversa, se descifra. Los algoritmos modernos son matemáticamente muy complejos.
Propiedades deseables:
- Confidencialidad: solo quien tiene la clave puede leer el mensaje.
- Integridad: asegurar que el mensaje no ha sido modificado (usando hash o MAC).
- Autenticación: verificar la identidad de quien envía (firmas digitales).
Cifrado simétrico (AES, ChaCha20): misma clave para ambos lados, rápida y segura
En la criptografía simétrica, la misma clave se usa tanto para cifrar como para descifrar. Es rápida y adecuada para grandes volúmenes de datos. El desafío: ¿cómo compartir la clave de forma segura entre emisor y receptor? (Problema del intercambio de claves, resuelto con criptografía asimétrica).
Algoritmos simétricos actuales:
- AES (Advanced Encryption Standard): estándar del gobierno de EE.UU. desde 2001. Usa bloques de 128 bits y claves de 128, 192 o 256 bits. Es resistente a todos los ataques conocidos si la implementación es correcta. Modos de operación: GCM (galois counter mode) que además da integridad.
- ChaCha20: diseñado por Daniel Bernstein, más rápido en software sin aceleración por hardware (móviles). Usado en TLS y WireGuard.
- Triple DES: obsoleto, pero aún se encuentra en sistemas legacy. Inseguro.
AES-256 es el estándar para datos clasificados “Top Secret”. Se considera computacionalmente inviable de romper por fuerza bruta (2²⁵⁶ combinaciones).
Los discos duros cifrados (BitLocker, LUKS, FileVault) usan AES en modo XTS con clave de 256 bits.
Modo de operación: por qué no basta con aplicar AES bloque por bloque
Si usas AES simplemente bloque a bloque (modo ECB), el mismo bloque de texto claro siempre produce el mismo texto cifrado, revelando patrones. Por eso se usan modos como CBC (encadenamiento) o GCM (autenticado). GCM es el preferido hoy en día porque además proporciona integridad y autenticidad.
Cifrado asimétrico (RSA, ECC): clave pública y privada, el problema del intercambio de claves
La criptografía asimétrica utiliza dos claves matemáticamente relacionadas:
- Clave pública: puede distribuirse libremente. Sirve para cifrar mensajes y verificar firmas.
- Clave privada: debe mantenerse secreta. Sirve para descifrar mensajes y firmar.
El algoritmo más conocido es RSA (Rivest-Shamir-Adleman), basado en la dificultad de factorizar números grandes. Claves de 2048 bits o 4096 bits son comunes. La operación es lenta, por lo que no se usa para cifrar datos grandes; se emplea para cifrar una clave simétrica que luego se usa para el grueso de los datos (cifrado híbrido).
ECC (Elliptic Curve Cryptography): usa curvas elípticas, ofrece la misma seguridad que RSA con claves mucho más cortas (256 bits ECC ~ 3072 bits RSA). Usado en TLS moderno y criptomonedas. Ejemplo: curva P-256 (secp256r1) y Curve25519.
El cifrado asimétrico también permite firmas digitales: el emisor firma con su clave privada; cualquiera puede verificar la firma con la clave pública. Esto asegura autenticación y no repudio.
Sin embargo, el cifrado asimétrico no oculta el tamaño del mensaje (puede tener expansión) y es vulnerable a ataques de “hombre en el medio” si no hay autenticación de las claves públicas (resuelto con PKI).
Funciones hash (SHA-256, MD5): huellas digitales de datos (no reversible)
Una función hash criptográfica toma una entrada de cualquier tamaño y produce una salida de tamaño fijo (ej. 256 bits). Propiedades:
- Determinista: misma entrada → mismo hash.
- No reversible: no se puede obtener la entrada a partir del hash.
- Resistente a colisiones: es muy difícil encontrar dos entradas diferentes con el mismo hash.
- Efecto avalancha: un pequeño cambio en la entrada produce un hash completamente diferente.
Hash populares:
- SHA-256 (Secure Hash Algorithm): parte de la familia SHA-2, usado en Bitcoin, TLS, checksums, contraseñas. Salida de 256 bits (64 hexa). Se considera seguro.
- SHA-3: nuevo estándar basado en Keccak, más resistente a ataques.
- MD5 y SHA-1: rotos (colisiones demostradas), no usar para seguridad.
Los hash se usan para:
- Almacenar contraseñas (con sal, no directamente).
- Verificar integridad de archivos (checksums).
- Pilas de bloques blockchains (merkle root).
- Generar identificadores únicos.
No confundir hash con cifrado: el hash no es reversible, no hay clave.
HTTPS/TLS: cómo los certificados digitales autentican sitios web y cifran la comunicación
Cuando navegas por HTTPS (candado verde), tu navegador y el servidor web establecen una conexión cifrada usando TLS (Transport Layer Security). El flujo simplificado:
- El navegador solicita una conexión segura al servidor.
- El servidor envía su certificado digital (contiene su clave pública y datos de la organización).
- El navegador verifica que el certificado sea válido (emitido por una autoridad certificadora de confianza, no revocado, nombre coincide).
- El navegador genera una clave simétrica efímera (cifrado con la clave pública del servidor – RSA o ECDHE) y se la envía al servidor.
- Ambos ahora comparten una clave secreta simétrica y empiezan a cifrar los datos de la sesión (usando AES-GCM o ChaCha20).
La Autoridad Certificadora (CA) (DigiCert, Let’s Encrypt, GlobalSign) garantiza que el certificado corresponde al sitio web. Si alguien intenta suplantar al servidor (ataque MITM), el navegador mostrará una advertencia porque el certificado no podrá validarse.
Hoy en día, la mayoría de webs usan TLS 1.3, que es más rápido y seguro que TLS 1.2.
Infraestructura de clave pública (PKI): autoridades certificadoras (CA) y cadena de confianza
La PKI gestiona los certificados digitales. La jerarquía:
- Autoridad raíz (Root CA): Certificado autofirmado de máxima confianza. Los navegadores y sistemas operativos incluyen una lista de raíces preinstaladas (de empresas como Let’s Encrypt, IdenTrust, etc.).
- Autoridades intermedias (Intermediate CA): emiten certificados para servidores. Si la intermedia se ve comprometida, la raíz la revoca.
- Certificado de servidor: emitido para un dominio específico (ej. todoplantas.net).
Para obtener un certificado (gratuito), puedes usar Let’s Encrypt, automatizado mediante ACME. Los certificados de validación de dominio (DV) solo verifican control del dominio; los OV (validación de organización) y EV (validación extendida) requieren más documentación pero también ofrecen mayor confianza.
La PKI también se usa en VPNs, correo cifrado (S/MIME), IoT y firmas electrónicas.
Firmas digitales y no repudio
Una firma digital se genera aplicando una función hash al mensaje y luego cifrando ese hash con la clave privada del firmante. Cualquiera puede descifrar con la clave pública y comparar el hash para verificar que el mensaje no ha sido alterado y que proviene de quien dice. Oficialmente, la Ley 59/2003 de firma electrónica reconoce estos mecanismos legales (firma cualificada con certificado de FNMT).
Encriptación vs. hash vs. codificación: diferencias prácticas
Conceptos que a menudo se confunden:
- Encriptación (cifrado): reversible mediante clave. Objetivo: confidencialidad.
- Hash: irreversible, sin clave. Objetivo: integridad y almacenamiento seguro de contraseñas.
- Codificación (Base64, Hex): convertir datos a un formato legible o transportable, sin seguridad. Es reversible sin clave. Ejemplo: adjuntar imágenes en HTML (Base64).
No uses codificación como cifrado. Tampoco uses hash para cifrar (no es reversible).
Ejemplo de uso combinado: protección de contraseñas en bases de datos
Nunca guardes contraseñas en texto claro. En su lugar, guarda un hash (SHA-256) con una “sal” única por usuario (para evitar ataques de arcoíris). Para login, vuelves a aplicar hash a la contraseña proporcionada más la sal y comparas con el hash almacenado. Nunca se descifra la contraseña original.