El cifrado (encryption) es el proceso de convertir datos en una forma ilegible sin una clave especial. En las aplicaciones móviles, el cifrado protege los datos personales de los usuarios, la información de pago y la lógica de negocio contra la intercepción y las filtraciones. Según Statista (2024), el número de filtraciones de datos de aplicaciones móviles aumentó un 38% en dos años, y en el 72% de los casos la causa fue la ausencia o el uso incorrecto del cifrado. Las plataformas móviles modernas proporcionan API integradas para el cifrado, y su uso es un estándar de seguridad obligatorio. Statista, 2024
Puntos clave
El cifrado en el contexto de las aplicaciones móviles es la aplicación de algoritmos criptográficos para proteger los datos almacenados en el dispositivo (data at rest) y los transmitidos a través de la red (data in transit). A nivel de dispositivo, se cifra el almacenamiento local: archivos, bases de datos, SharedPreferences y caché. A nivel de red, el tráfico entre la aplicación y el servidor se cifra mediante los protocolos TLS/HTTPS. El objetivo final es garantizar que, incluso con acceso físico al dispositivo o interceptación del tráfico, un atacante no pueda leer los datos protegidos sin la clave criptográfica.
Los dispositivos móviles son especialmente vulnerables a la pérdida de datos: un teléfono puede perderse, robarse o infectarse con malware fácilmente. Según el Ponemon Institute (2023), el 42% de las empresas afectadas por filtraciones de datos atribuyen los incidentes a dispositivos móviles. Sin cifrado, un atacante puede conectarse al dispositivo por USB, extraer la base de datos SQLite y leer todos los datos almacenados. El cifrado resuelve este problema: incluso si se extrae la base de datos, su contenido permanece cifrado. Además, en EE. UU. y la UE existen leyes (GDPR, CCPA) que exigen el cifrado de datos personales e imponen multas de hasta el 4% de la facturación anual por infracciones. El uso del cifrado no es solo una necesidad técnica, sino también legal para cualquier aplicación móvil que maneje datos de usuarios.
Todos los algoritmos de cifrado se dividen en dos tipos principales: simétricos (una clave para cifrar y descifrar) y asimétricos (un par de claves — pública y privada). La elección del tipo depende del caso de uso: para cifrar datos locales se suelen usar algoritmos simétricos por su velocidad, y para el intercambio de claves y la autenticación se usan los asimétricos.
| Característica | Simétrico | Asimétrico |
|---|---|---|
| Número de claves | 1 (secreta) | 2 (pública + privada) |
| Velocidad | Alta (1–10 GB/s) | Baja (1–10 MB/s) |
| Distribución de claves | Problemática — hay que transmitir la clave | Sencilla — la clave pública se publica |
| Ejemplos | AES, ChaCha20 | RSA, ECDH, ECIES |
| Uso en desarrollo móvil | Cifrado de datos locales | Intercambio de claves, firmas digitales |
En la práctica, las aplicaciones móviles utilizan cifrado híbrido: con un algoritmo asimétrico (por ejemplo, ECDH) las partes intercambian una clave de sesión, y todos los datos posteriores se cifran con un algoritmo simétrico (AES o ChaCha20). Este enfoque combina la velocidad del cifrado simétrico con la seguridad del intercambio asimétrico de claves. Este método es la base de TLS 1.3, Signal Protocol y Apple iMessage.
El desarrollo móvil moderno utiliza varios algoritmos de cifrado estandarizados, cada uno diseñado para tareas específicas con su propio ámbito de aplicación.
El cifrado protege los datos en tres escenarios clave: pérdida del dispositivo (cifrado del disco y contenedores de la aplicación), interceptación del tráfico (protocolos de red TLS/HTTPS) y filtración desde el servidor (cifrado de extremo a extremo). Cada escenario requiere su propio enfoque y herramientas.
Los datos en reposo — datos en el dispositivo — se cifran mediante Android Keystore e iOS Keychain. En Android a partir de 7.0 se utiliza el cifrado basado en archivos (File-Based Encryption), y las aplicaciones pueden cifrar adicionalmente sus datos mediante EncryptedSharedPreferences y EncryptedFile de la biblioteca AndroidX Security. En iOS, todas las aplicaciones funcionan por defecto con Data Protection API, que cifra los archivos a nivel del sistema de archivos con una clave vinculada al código del dispositivo. Para los datos en tránsito se utiliza TLS 1.2/1.3 con Certificate Pinning obligatorio.
El cifrado de extremo a extremo (E2E) es el nivel más alto de protección de datos, en el que un mensaje se cifra en el dispositivo del remitente y se descifra solo en el dispositivo del destinatario. El servidor de almacenamiento y transmisión no tiene acceso al contenido — solo maneja blobs cifrados. La implementación E2E más conocida para aplicaciones móviles es Signal Protocol, que utiliza el algoritmo Double Ratchet en combinación con X3DH (Extended Triple Diffie-Hellman) para el intercambio inicial de claves. Signal Protocol proporciona Perfect Forward Secrecy y future secrecy: la compromisión de una clave no revela mensajes anteriores ni posteriores. Según un estudio de la Universidad Carnegie Mellon (2023), el cifrado E2E en aplicaciones de mensajería reduce el riesgo de filtración de comunicaciones en un 99.7% en comparación con el cifrado solo TLS. El uso de E2E es obligatorio para aplicaciones de las categorías Health & Fitness y Finance según los requisitos de GDPR y HIPAA. Para implementar E2E en su propio proyecto, se recomienda utilizar la biblioteca Signal Protocol (Java/Swift) o una basada en Olm (Matrix protocol). Al elegir una solución E2E, evalúe la compatibilidad con la plataforma: Signal Protocol requiere soporte para envío asíncrono y almacenamiento de claves en el cliente, lo que complica los escenarios multi-dispositivo — para tales casos, Matrix Protocol con su modelo de salas puede ser una mejor opción.
Veamos un ejemplo de cifrado y descifrado de datos en Android utilizando Jetpack Security (AndroidX Security). La biblioteca proporciona EncryptedFile para el cifrado de archivos y EncryptedSharedPreferences para configuraciones.
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val encryptedFile = EncryptedFile.Builder(
context,
File(context.filesDir, "secret.dat"),
masterKey,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build()
encryptedFile.openFileOutput(applicationContext).use { outputStream ->
outputStream.write("Sensitive user data".toByteArray(Charsets.UTF_8))
}
MasterKey se crea utilizando AES256-GCM — el modo de cifrado simétrico más seguro. La clave se almacena en Android Keystore, aislado del proceso principal: incluso si la aplicación se ve comprometida, un atacante no puede extraer la clave. EncryptedFile utiliza el esquema AES-256-GCM con HKDF para la derivación de claves y un tamaño de página de 4KB, lo que proporciona un buen equilibrio entre velocidad y seguridad. Para leer datos, se usa openFileInput con los mismos parámetros: la biblioteca descifra automáticamente los datos al leerlos.
En iOS, una funcionalidad similar se proporciona a través de CryptoKit (Swift) utilizando AES.GCM o ChaChaPoly. La clave se almacena en el Secure Enclave a través de Keychain Services. El principio es el mismo: las claves nunca abandonan el almacenamiento hardware seguro, y los datos se cifran antes de escribirse en el disco. Esta arquitectura cumple con las recomendaciones OWASP MASVS (Mobile Application Security Verification Standard) de nivel L2 para aplicaciones que manejan datos sensibles. En proyectos reales, la combinación de EncryptedSharedPreferences para tokens y EncryptedFile para datos de usuario cubre el 100% de los escenarios de cifrado local. Además, para trabajar con claves recibidas del servidor (por ejemplo, claves de sesión ECDH), se utiliza Android KeyStore con el parámetro purpose = KeyProperties.PURPOSE_ENCRYPT, que garantiza que la clave solo se pueda usar para operaciones criptográficas autorizadas y nunca se exporte del almacenamiento hardware a la RAM en texto plano.
Preguntas frecuentes
AES-256 en modo GCM con almacenamiento de clave en almacenamiento hardware (Android Keystore / iOS Keychain) se considera el estándar de oro. Para el tráfico de red — TLS 1.3 con la curva elíptica Curve25519. ChaCha20-Poly1305 se utiliza como alternativa en dispositivos sin AES hardware.
AES es un algoritmo simétrico (una clave), rápido, adecuado para cifrar grandes volúmenes de datos. RSA es asimétrico (un par de claves), lento, se utiliza para el cifrado de claves y firmas, no para datos. En aplicaciones móviles, AES cifra datos, RSA protege claves.
Es necesario cifrar los datos confidenciales: tokens de acceso, contraseñas, información personal, datos de pago, registros médicos. Los datos públicos (imágenes, contenido) pueden no cifrarse, aunque es mejor almacenarlos en un contenedor protegido de la aplicación.
Con el cifrado de extremo a extremo, los datos se cifran en el dispositivo del remitente antes de enviarse y se descifran solo en el dispositivo del destinatario. El servidor solo ve datos cifrados. El protocolo Double Ratchet, implementado en Signal Protocol, es el mecanismo E2E más común en mensajeros móviles.
Técnicamente es posible, pero no se recomienda. Para los datos en el dispositivo, use cifrado simétrico (AES-GCM) con una clave del Keystore. Para la red, use TLS 1.3 con un conjunto separado de claves y Certificate Pinning. La separación evita que ambos canales se vean comprometidos si se filtra una clave.
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