AES (Advanced Encryption Standard) es un algoritmo de cifrado simétrico por bloques adoptado en 2001 por el Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST) como estándar oficial. AES reemplazó al obsoleto DES y desde entonces se ha convertido en el algoritmo de cifrado más extendido del mundo, utilizado desde sistemas bancarios hasta aplicaciones móviles. Según NIST (2023), AES proporciona una seguridad equivalente a 2^256 operaciones para una clave de 256 bits, lo que lo hace invulnerable a los ataques modernos de fuerza bruta. NIST FIPS 197, 2023
Puntos clave
AES (Advanced Encryption Standard) es un cifrador simétrico por bloques desarrollado por los criptógrafos belgas Joan Daemen y Vincent Rijmen bajo el nombre Rijndael. En 2001, NIST seleccionó a Rijndael como ganador del concurso para un nuevo estándar de cifrado estadounidense tras cinco años de pruebas y análisis públicos. AES opera con bloques de datos de tamaño fijo (128 bits) y admite tres longitudes de clave: 128, 192 y 256 bits. El número de rondas de transformación depende de la longitud de la clave: 10 rondas para 128 bits, 12 para 192 bits y 14 para 256 bits. Cada ronda incluye cuatro operaciones: SubBytes (sustitución no lineal de bytes mediante S-box), ShiftRows (desplazamiento cíclico de filas), MixColumns (mezcla de columnas) y AddRoundKey (XOR con la clave de ronda).
El desarrollo de AES comenzó en 1997 cuando NIST anunció un concurso para reemplazar DES, cuya clave de 56 bits fue descifrada en 22 horas en 1998 mediante el dispositivo especializado Deep Crack. Quince algoritmos de varios países participaron, incluidos Serpent (Reino Unido), Twofish (EE. UU.) y RC6 (EE. UU.). Para la final de 1999, quedaron 5 candidatos. Rijndael ganó gracias a su combinación de alta velocidad en todas las plataformas (desde microcontroladores de 8 bits hasta servidores de 64 bits), resistencia al criptoanálisis e implementación compacta en hardware. Desde 2006, AES se utiliza para cifrar datos clasificados como SECRET y TOP SECRET en sistemas gubernamentales de EE. UU. Hoy en día, AES está integrado en todos los protocolos principales: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 y Bluetooth BR/EDR.
AES procesa datos en bloques de 128 bits (16 bytes), organizados como una matriz de 4x4 bytes llamada state. Cada ronda de cifrado realiza una secuencia de transformaciones deterministas que crean colectivamente un efecto avalancha: cambiar un bit de los datos de entrada cambia aproximadamente el 50% de los bits de salida. Este efecto hace que AES sea resistente al criptoanálisis diferencial y lineal, los principales métodos para romper cifradores de bloques.
El proceso comienza con AddRoundKey — aplicar XOR a la clave inicial con el state. Luego se ejecutan las rondas: SubBytes reemplaza cada byte del state con un valor de la S-box (tabla de sustitución). ShiftRows desplaza cíclicamente la segunda fila 1 posición, la tercera 2, la cuarta 3 — asegurando la mezcla entre columnas. MixColumns multiplica cada columna del state por una matriz fija en el campo de Galois GF(2^8), creando dependencia de cada byte de salida de los cuatro bytes de entrada de la columna. AddRoundKey aplica XOR con la siguiente clave de ronda, derivada de la clave original mediante Key Expansion. La última ronda omite MixColumns. El descifrado utiliza las operaciones inversas InvSubBytes, InvShiftRows, InvMixColumns y AddRoundKey en orden inverso. Para los desarrolladores móviles, no es necesario comprender la estructura interna de AES — basta con saber cómo llamar correctamente a las API integradas de la plataforma con los parámetros adecuados.
La característica clave de AES que asegura su fortaleza criptográfica es el efecto avalancha. Cambiar un bit en el texto plano o la clave provoca que aproximadamente el 50% de los bits del texto cifrado cambien, lo que hace que AES sea extremadamente resistente al criptoanálisis diferencial y lineal. La combinación de SubBytes (no linealidad mediante S-box) y MixColumns (difusión mediante multiplicación en campo de Galois) crea una complejidad matemática tal que incluso conociendo parte del texto cifrado no permite recuperar la clave más rápido que por fuerza bruta. Según el análisis de NIST (2018), el mejor ataque conocido a AES-128 — el ataque biclique — reduce la longitud efectiva de la clave solo en 2 bits (a 126.2 bits), sin proporcionar ventaja práctica al atacante. Para AES-256, no existen ataques prácticamente viables que superen la fuerza bruta.
AES admite tres tamaños de clave, cada uno correspondiente a un nivel específico de fortaleza criptográfica. La elección del tamaño de clave afecta la seguridad, el rendimiento y los requisitos de recursos del dispositivo.
| Tamaño de clave | Número de rondas | Nivel de seguridad | Aplicación |
|---|---|---|---|
| AES-128 | 10 | 128 bits | Aplicaciones comerciales, TLS |
| AES-192 | 12 | 192 bits | Sistemas gubernamentales (SECRET) |
| AES-256 | 14 | 256 bits | TOP SECRET, sector financiero |
Regla práctica: para aplicaciones móviles use AES-256 por defecto. La diferencia de rendimiento entre AES-128 y AES-256 en dispositivos modernos con soporte AES-NI no supera el 10–15%, pero el nivel de seguridad se duplica. Según el análisis cuántico (Grassl et al., 2016), descifrar AES-128 requeriría 2^77 operaciones cuánticas mediante el algoritmo de Grover, mientras que AES-256 requeriría 2^149, lo que hace que AES-256 sea resistente a ataques cuánticos durante los próximos 20–30 años. Incluso AES-128 proporciona protección suficiente para la gran mayoría de escenarios comerciales: la fuerza bruta de una clave de 128 bits requeriría más energía de la que existe en el universo según la estimación de Bruce Schneier. Sin embargo, los estándares de seguridad (GDPR, HIPAA, PCI DSS) a menudo exigen explícitamente AES-256, por lo que los proyectos en producción deben usar la longitud de clave máxima.
AES como cifrador de bloques cifra bloques de tamaño fijo (128 bits). Para cifrar datos de longitud arbitraria se utilizan modos de operación. La selección del modo afecta críticamente la seguridad: el modo incorrecto puede anular la fortaleza de AES.
Para proyectos móviles use AES-256-GCM con un nonce de 12 bytes. GCM resuelve dos problemas simultáneamente: cifrado de datos y autenticación, previniendo ataques de padding oracle y chosen ciphertext. Android Keystore e iOS CryptoKit soportan AES-GCM de forma nativa sin necesidad de primitivas criptográficas adicionales. Al trabajar con GCM, es crítico no reutilizar nunca el nonce con la misma clave — esto destruye completamente la seguridad del cifrado. Genere un nuevo nonce aleatorio para cada cifrado y guárdelo junto con el texto cifrado.
Veamos un ejemplo de implementación segura de AES-256-GCM en Android usando Jetpack Security. El código siguiente demuestra el ciclo completo: creación de una clave AES-256 mediante MasterKey, cifrado y descifrado de una cadena con datos autenticados adicionales (AAD).
import androidx.security.crypto.MasterKey
import androidx.security.crypto.EncryptedSharedPreferences
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val securePrefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
fun storeSecureData(key: String, value: String) {
securePrefs.edit().putString(key, value).apply()
}
fun readSecureData(key: String): String? {
return securePrefs.getString(key, null)
}
La característica clave de esta solución es que AES-256-GCM se usa en dos niveles: para cifrar pares clave-valor (PrefValueEncryptionScheme) y para proteger los nombres de las claves (PrefKeyEncryptionScheme usa AES-256-SIV, resistente a la reutilización de nonce). MasterKey se genera usando el algoritmo AES-256-GCM y se almacena en Android Keystore, protegido por hardware en dispositivos con Trusted Execution Environment. En dispositivos sin soporte de hardware (TEE), la clave se cifra mediante Bouncy Castle, lo que sigue siendo más seguro que almacenarla en SharedPreferences.
Para el cifrado directo de grandes volúmenes de datos (por ejemplo, imágenes o archivos), use AES-256-GCM mediante EncryptedFile de AndroidX Security. Para la exportación de claves (por ejemplo, para copia de seguridad), use cifrado adicional con una contraseña de usuario mediante PBKDF2 con 100000+ iteraciones.
En iOS, las operaciones AES se organizan a través del framework CryptoKit (Swift 5.0+). Una clave AES-256 se crea mediante SymmetricKey(size: .bits256) y se almacena en Secure Enclave — un criptoprocesador hardware aislado de la CPU principal y del sistema operativo. CryptoKit proporciona dos implementaciones de AES: AES.GCM (recomendado) y AES.CBC (para compatibilidad con formatos heredados). El cifrado se realiza mediante el método seal(), que toma datos, clave y nonce (12 bytes), y devuelve AES.GCM.SealedBox — una estructura que contiene el texto cifrado y la etiqueta de autenticación. El descifrado se realiza mediante open(). Apple recomienda encarecidamente no usar CommonCrypto directamente: CryptoKit selecciona automáticamente los parámetros óptimos, protege contra ataques de canal lateral y utiliza la aceleración hardware AES-NI en procesadores Apple Silicon. En dispositivos con Secure Enclave, las claves nunca salen del módulo hardware, evitando el robo incluso con una compromisión total de la aplicación. Para la serialización de claves, use el método withUnsafeBytes seguido de almacenamiento en Keychain mediante SecItemAdd con el atributo kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.
Preguntas frecuentes
AES es un algoritmo que convierte datos legibles en un conjunto ilegible de bytes mediante una clave secreta. La misma clave se necesita para devolver los datos a su forma original. AES es tan fiable que se utiliza para cifrar documentos secretos del gobierno de EE. UU.
AES-128 utiliza una clave de 128 bits y realiza 10 rondas de cifrado. AES-256 utiliza una clave de 256 bits y 14 rondas, lo que lo hace 2^128 veces más difícil de descifrar. Para aplicaciones móviles, se recomienda AES-256 debido a la diferencia mínima de rendimiento.
AES-256-GCM es el modo más seguro y recomendado. GCM proporciona cifrado autenticado (cifrado + verificación de integridad). El modo ECB está prohibido, CBC requiere un MAC separado. GCM es el estándar de facto para aplicaciones móviles.
Teóricamente, AES puede descifrarse por fuerza bruta, pero para AES-256 se necesitarían 2^256 intentos — más que el número de átomos en el universo observable. No existen ataques prácticos a AES-256. Los ataques de canal lateral (Spectre, Meltdown) no rompen AES sino que roban claves de la memoria, por lo que el almacenamiento hardware de claves es crítico.
Use la biblioteca AndroidX Security: MasterKey.Builder con KeyScheme.AES256_GCM crea una clave protegida en Android Keystore, y EncryptedSharedPreferences cifra automáticamente todos los datos mediante AES-256-GCM. Sin criptografía manual — la API es segura por defecto, sin riesgo de errores del desarrollador.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también