FlowingDev

Cifrado AES, explicado: La caja fuerte digital favorita del mundo

Aprende cómo el cifrado simétrico AES usa una única clave basada en contraseña para convertir texto legible en texto cifrado indescifrable y viceversa, protegiendo los datos modernos.

Probar la herramienta: Herramientas de cifrado

En una frase

El cifrado AES basado en contraseña es un método estándar para revolver y descifrar datos usando una única clave secreta que se crea a partir de una contraseña que tú eliges.

El problema que resuelve

Desde que los humanos empezamos a escribir cosas, hemos querido escribir cosas que otras personas no puedan leer. Desde generales romanos que cambiaban letras en un mensaje (el cifrado César) hasta espías que usaban libretas de un solo uso en la Guerra Fría, el objetivo siempre ha sido el mismo: la confidencialidad. Si el mensaje cae en las manos equivocadas, debería ser un galimatías.

En la era digital, este problema está en todas partes. Tus datos vuelan a través de Wi-Fi públicos poco confiables, residen en servidores de corporaciones gigantes y se respaldan en discos duros que podrían terminar en un vertedero. ¿Cómo te aseguras de que tu mensaje privado, tu lista de claves de API o tu receta secreta de galletas permanezca secreta?

Los cifrados de la vieja escuela eran fáciles de romper, especialmente con computadoras que pueden probar miles de millones de combinaciones por segundo. Necesitábamos algo mejor. Mucho mejor. Y aquí es donde entra el Estándar de Cifrado Avanzado, o AES (por sus siglas en inglés).

A finales de la década de 1990, el Instituto Nacional de Estándares y Tecnología (NIST) de EE. UU. celebró un concurso público para encontrar un reemplazo para el ya anticuado Estándar de Cifrado de Datos (DES). No buscaban un algoritmo secreto cocinado en un sótano del gobierno; querían un cifrado transparente, público y brutalmente probado en el que todo el mundo pudiera confiar. Después de años de peleas de jaula criptográficas, un algoritmo belga llamado "Rijndael" (una combinación de los apellidos de sus inventores, Rijmen y Daemen) fue coronado ganador en 2001.

Era rápido, eficiente y, lo más importante, había resistido una avalancha mundial de intentos por romperlo. Se convirtió en AES, el estándar que usamos hoy para asegurar todo, desde sitios web seguros (HTTPS) hasta discos duros cifrados y archivos sensibles. Resuelve el antiguo problema de guardar secretos con el rigor matemático moderno.

Cómo funciona por debajo del capó

El AES parece magia: murmuras una frase secreta y tu texto se convierte en un desastre ilegible. La murmuras de nuevo y vuelve a la normalidad. Pero por debajo del capó, es solo una serie de pasos matemáticos ingeniosos y repetibles.

Simétrico vs. Asimétrico

Primero, un concepto clave. El cifrado viene en dos sabores principales. AES es simétrico, lo que significa que se usa la misma clave tanto para cerrar (cifrar) como para abrir (descifrar) los datos. Es como la llave de tu casa: cierra la puerta y esa misma llave la abre. Esto es rápido y eficiente.

El otro sabor es la criptografía asimétrica (o de clave pública). Esta utiliza dos claves diferentes: una clave pública para cerrar los datos y una clave privada para abrirlos. Es como un buzón: cualquiera puede dejar una carta (usando la ranura pública), pero solo tú tienes la llave privada para abrirlo y leer el correo. Esto es genial para cuando no puedes compartir una clave secreta de forma segura de antemano, pero es mucho más lento que el cifrado simétrico.

El cifrado basado en contraseña utiliza el modelo simétrico porque tú y quien necesite descifrar los datos compartirán la misma contraseña.

De contraseña a clave: La KDF

Aquí hay un detalle crítico: tu contraseña, "SuperSecretP@ssw0rd123", no es la clave de cifrado. Las contraseñas memorizables por humanos no son lo suficientemente aleatorias ni largas para ser claves criptográficas seguras.

En cambio, tu contraseña se introduce en una Función de Derivación de Clave (KDF). Piensa en una KDF como un algoritmo de propósito especial diseñado para convertir una contraseña en una clave criptográfica fuerte y de tamaño fijo. Las KDF modernas como PBKDF2 (Password-Based Key Derivation Function 2) o Argon2 hacen tres cosas importantes:

  1. Añadir una Sal (Salt): Una "sal" es un dato aleatorio generado para cada nuevo cifrado. Se mezcla con tu contraseña antes de ser procesada. Esto significa que incluso si dos usuarios tienen la misma contraseña, las claves de cifrado resultantes serán totalmente diferentes. Esto por sí solo derrota los ataques de "tabla arcoíris" (rainbow table), donde los hackers usan tablas precalculadas de contraseñas comunes y sus hashes resultantes. La sal se almacena junto con los datos cifrados; no es un secreto, solo un ingrediente único.
  2. Estirar la clave: La KDF pasa la contraseña y la sal a través de un algoritmo de hashing (como SHA-256) no una vez, sino miles, o incluso millones, de veces. Esto se llama "iteraciones" o "factor de trabajo". Hace que el proceso sea deliberadamente lento. Para ti, esperar unos cientos de milisegundos no es gran cosa. Para un atacante que intenta forzar tu contraseña por fuerza bruta, es una pesadilla, lo que hace que sea computacionalmente costoso probar miles de millones de intentos.
  3. Producir la clave: Después de todo ese trabajo, la KDF escupe una clave de la longitud deseada (por ejemplo, 256 bits) que parece puro ruido aleatorio. Esta es la clave real utilizada por AES.
Tu Contraseña + Sal Aleatoria + Muchas Iteraciones -> Clave de Cifrado Fuerte
("hunter2"    + "a3f9d..."   + 100,000 rondas)   -> Clave AES de 256 bits

El cifrado AES en sí: Un Estado y Rondas

Ahora, al evento principal. AES opera en bloques de datos de tamaño fijo, siempre de 128 bits (16 bytes) a la vez. Tu mensaje de texto plano se divide en estos bloques de 16 bytes. Cada bloque se carga en una cuadrícula de 4x4 bytes llamada la matriz de estado.

Este estado luego pasa por una serie de transformaciones idénticas llamadas rondas. El número de rondas depende del tamaño de la clave:

  • AES-128: 10 rondas
  • AES-192: 12 rondas
  • AES-256: 14 rondas

Cada ronda (excepto la última) consta de cuatro pasos:

  1. SubBytes: Cada byte en la matriz de estado se intercambia por uno diferente usando una tabla de consulta estándar (la "S-box de Rijndael"). Este es el principal paso no lineal que introduce confusión.
  2. ShiftRows: Los bytes en cada fila de la matriz se desplazan cíclicamente. La primera fila no se desplaza, la segunda se desplaza en uno, la tercera en dos y la cuarta en tres. Esto baraja los datos.
  3. MixColumns: Se realiza una operación matemática en cada columna, mezclando los bytes. Esto proporciona difusión, extendiendo la influencia de un solo byte de texto plano sobre todo el bloque.
  4. AddRoundKey: Una porción de la clave de cifrado principal (una "clave de ronda" específica para esta ronda) se combina con el estado mediante una operación XOR. Aquí es donde la clave secreta realmente se mezcla con tus datos.

Esta secuencia SubBytes -> ShiftRows -> MixColumns -> AddRoundKey se repite una y otra vez. Cada ronda desordena aún más los datos hasta que, después de la ronda final, la matriz de estado es un bloque de texto cifrado completamente revuelto. Para descifrar, simplemente ejecutas los pasos en reversa con la misma clave.

Juntando todo: Modos de operación y Relleno (Padding)

AES solo sabe cómo cifrar un único bloque de 16 bytes. ¿Qué pasa con tu mensaje de 500 bytes? Aquí es donde entran los modos de operación. Un modo de operación es una receta para usar un cifrado de bloque para encriptar un flujo de datos de cualquier longitud.

Modos más antiguos como CBC (Cipher Block Chaining) tenían algunas trampas de seguridad. El modo moderno y recomendado es GCM (Galois/Counter Mode). GCM es un modo de "cifrado autenticado", que es una forma elegante de decir que proporciona dos cosas por el precio de una:

  • Confidencialidad: Cifra tus datos para que nadie pueda leerlos.
  • Autenticidad: Produce una pequeña "etiqueta de autenticación". Si un solo bit del texto cifrado se invierte o se manipula durante el tránsito, la etiqueta no coincidirá al descifrar y el proceso fallará. Esto te dice no solo que los datos eran secretos, sino también que no fueron alterados.

Historias del mundo real

El secreto del cliente del freelancer

Anya, una diseñadora de UX, necesitaba enviar una maqueta (mockup) de un producto nuevo y no anunciado a su cliente. El archivo de la maqueta contenía información estratégica y de marca sensible. Enviarlo por correo electrónico parecía arriesgado: el correo electrónico es notoriamente inseguro. Configurar un portal seguro de transferencia de archivos era exagerado para una única entrega. En su lugar, Anya cifró el archivo ZIP que contenía su trabajo usando una contraseña. Luego llamó al cliente y le dijo la contraseña por teléfono. Ahora podía enviar el archivo cifrado por correo electrónico de forma segura, sabiendo que solo el cliente podría abrirlo.

Lección: El cifrado basado en contraseña es una herramienta fantástica para compartir archivos sensibles de forma segura y ad-hoc entre dos personas sin una infraestructura compleja.

El archivo de configuración del desarrollador

Ben estaba construyendo una aplicación web que se conectaba a una base de datos y usaba una API de pagos de terceros. La contraseña de la base de datos y la clave de la API se almacenaban en un archivo config.json. Necesitaba subir su código a un repositorio de Git compartido, pero subir el archivo de configuración con secretos en texto plano sería una brecha de seguridad catastrófica. Así que cifró config.json para crear config.json.enc. La contraseña para el descifrado no se almacenó en el código. En desarrollo, simplemente descifraba el archivo localmente. En producción, la contraseña se pasaba de forma segura a la aplicación como una variable de entorno, que la aplicación usaba para descifrar la configuración al arrancar.

Lección: Cifrar los archivos de configuración te permite almacenar de forma segura "secretos en reposo" junto a tu código, separando los datos secretos de la clave secreta necesaria para desbloquearlos.

Las notas del periodista en la nube

María, una periodista de investigación, estaba trabajando en una historia delicada. Guardaba sus notas de entrevistas e investigación en una carpeta que se sincronizaba con un popular servicio de almacenamiento en la nube. Aunque confiaba en la seguridad del servicio, le preocupaban las posibles amenazas: un empleado malintencionado en la empresa de la nube, una citación judicial del gobierno o una brecha de datos importante. Para proteger a sus fuentes, cifró cada documento con una contraseña fuerte y única antes de guardarlo en la carpeta sincronizada. Ahora, incluso si toda su cuenta en la nube se viera comprometida, sus notas serían simplemente un galimatías ilegible.

Lección: El cifrado proporciona una capa personal de seguridad de "confianza cero", asegurando que tus datos permanezcan privados incluso cuando se almacenan en sistemas que no controlas.

Errores y trampas comunes

  • Usar una contraseña débil. AES-256 es, para todos los efectos prácticos, inquebrantable por fuerza bruta. Pero la KDF que genera la clave a partir de tu contraseña es vulnerable si la contraseña es "12345" o "password". La seguridad de todo el sistema se reduce a la fortaleza de tu contraseña. Usa una frase de contraseña larga, aleatoria y única.
  • Olvidar la contraseña. Con el cifrado basado en contraseña, no hay un enlace de "¿Olvidaste tu contraseña?". La contraseña es la clave. Si la pierdes, los datos se pierden para siempre. No es que estén simplemente bloqueados; es que la clave se ha evaporado. Guarda tus contraseñas de forma segura en un gestor de contraseñas.
  • Implementar tu propia cripto. Este es el pecado capital de la seguridad del software. Puede que sepas qué son AES, GCM y PBKDF2, pero combinarlos de forma segura está lleno de trampas. ¿Usaste un generador de números aleatorios criptográficamente seguro para la sal? ¿Se maneja correctamente tu etiqueta de autenticación? Utiliza siempre una biblioteca criptográfica respetada y revisada por pares para tu lenguaje de programación. No construyas la cerradura tú mismo; cómprale una a un maestro cerrajero.
  • Reutilizar una sal o un IV. La sal (para la KDF) y el IV/nonce (para el modo de cifrado) deben ser aleatorios y únicos para cada operación de cifrado con la misma clave. Reutilizarlos puede romper catastróficamente la seguridad del cifrado. Las buenas bibliotecas se encargan de esto por ti, pero es una trampa de la que hay que ser consciente.

Por qué debería estar en tu radar

Si eres desarrollador, vas a manejar secretos. Es inevitable. Ya sea una cadena de conexión a la base de datos, una clave de API, la información personal de un usuario o simplemente un archivo de registro sensible, tendrás datos que no deben ser expuestos.

El cifrado AES basado en contraseña es tu herramienta de cabecera para garantizar la confidencialidad en reposo. Es la solución estándar y probada en mil batallas para:

  • Cifrar secretos de la aplicación en tu código base.
  • Asegurar copias de seguridad antes de enviarlas al almacenamiento en la nube.
  • Proteger campos de datos sensibles en una base de datos (por ejemplo, cifrar un número de Seguro Social antes de almacenarlo).
  • Crear una forma simple y segura para que un usuario te envíe un archivo sensible.

Es el pilar fundamental para mantener los secretos en secreto en un mundo donde los datos se copian, comparten y almacenan en más lugares de los que podemos contar.

Para profundizar

  • FIPS PUB 197: El estándar oficial del NIST que define AES (Rijndael). Es denso, pero es la fuente de la verdad.
  • Wikipedia: Advanced Encryption Standard: Un resumen completo y muy legible de la historia, el diseño y el análisis de seguridad de AES. (Nota: enlace a la versión en inglés, su contraparte en español puede variar en calidad).
  • Wikipedia: PBKDF2: Una inmersión profunda en la Función de Derivación de Clave más común utilizada con contraseñas. (Nota: enlace a la versión en inglés).
  • NIST Special Publication 800-38D: La especificación oficial para el modo de operación GCM.
  • Cryptography I (Coursera/Stanford): Un curso gratuito de nivel universitario impartido por Dan Boneh que proporciona una base sólida en criptografía aplicada.

Teoría lista. Hora de ensuciarse las manos — 100% en tu navegador.

Probar la herramienta: Herramientas de cifrado