
Mi respuesta corta: En iPhones modernos y dispositivos Android de gama alta suelo usar AES-GCM. En dispositivos Android antiguos, económicos o variados ChaCha20-Poly1305 suele ser la mejor opción. No por “más seguridad”, sino por velocidad, carga de CPU, calor y batería.
Si resumo el tema en una regla sencilla, sería esta:
Un punto clave: si AES corre sin hardware, según el artículo puede costar hasta 10 veces más ciclos de CPU por byte. En dispositivos Android básicos ChaCha20 puede ser unas 3× más rápido. Se nota en subidas de fotos, sincronización, mensajes y caché.
Lo que tengo en cuenta:
En resumen: Si desarrollo una app para muchas clases de Android, quiero rendimiento uniforme. Si apunto a dispositivos nuevos con hardware AES, AES-GCM suele ser mi primera opción.
| Punto | AES-GCM | ChaCha20-Poly1305 |
|---|---|---|
| Seguridad con uso correcto | Alta | Alta |
| Cercanía al hardware | Fuerte | Baja |
| En iPhones nuevos / buques insignia | A menudo adelante | Bueno |
| En dispositivos Android antiguos / económicos | A menudo más débil | A menudo adelante |
| Carga de CPU sin hardware AES | Más bien alta | Más bien baja |
| Calor / batería en dispositivos débiles | Puede aumentar más | A menudo más uniforme |
| Riesgo principal | Nonce duplicado, datos antes de la verificación | Nonce duplicado, datos antes de la verificación |
| Usos móviles típicos | Datos locales, backend con enfoque AES | Mensajes, cargas, parque Android mixto |
Resumiría el artículo así: No es «¿Qué algoritmo es mejor?» la pregunta clave, sino «¿En qué dispositivo corre mi app y dónde están los datos?»
Al final se trata de tres cosas: estructura, uso del hardware y errores en la implementación. Para apps móviles, en el día a día cuentan sobre todo el hardware disponible, el tiempo de ejecución en software y qué pasa si algo falla en la implementación.
AES-GCM es un método AEAD basado en AES. En dispositivos con aceleración por hardware funciona muy rápido. Si falta este soporte, el rendimiento suele caer notablemente.
ChaCha20-Poly1305 es un método AEAD basado en ChaCha20. Está diseñado para ejecutarse en software y por eso suele tener ventaja en dispositivos Android más antiguos o económicos.
Ambos métodos tienen el mismo punto delicado: Una nonce nunca debe reutilizarse con la misma clave. Si esto ocurre, la seguridad de ambos métodos se rompe. En AES-GCM incluso pueden ser posibles falsificaciones.
Igualmente importante: Los datos descifrados solo deben procesarse tras una autenticación exitosa. Dicho de otro modo: primero verificar, luego tocar. Todo lo demás es como cerrar la puerta de casa después de entrar.
| Característica | AES-GCM | ChaCha20-Poly1305 |
|---|---|---|
| Tipo de cifra | Método AEAD basado en AES | Método AEAD basado en ChaCha20 |
| Autenticación | GCM | Poly1305 |
| Ventaja práctica | Muy rápido con aceleración por hardware | Ventajoso en dispositivos sin aceleración AES |
| Riesgos típicos en implementación | Reutilización de nonce, procesamiento antes de autenticación | Reutilización de nonce, procesamiento antes de autenticación |
Cómo afecta esto a la velocidad y batería lo muestra la siguiente sección.
AES-GCM vs. ChaCha20-Poly1305: Mobile Encryption Guide by Device Class
En dispositivos móviles, sobre todo la clase de dispositivo marca la diferencia. AES-GCM se beneficia mucho de la aceleración por hardware, mientras que ChaCha20-Poly1305 sigue siendo rápido incluso cuando todo se ejecuta en software. Ahí es donde se nota la diferencia entre dispositivos de gama alta, media y antiguos.
Para apps con fotos, mensajes y actualizaciones de subastas, lo que más importa es: ¿Qué tan bien funcionan la sincronización y el cifrado en smartphones antiguos? Porque ahí se notan más rápido los retrasos, la alta carga de CPU y las baterías agotadas.
En los iPhones actuales y dispositivos Android de gama alta, AES-GCM suele ser más rápido. La razón es simple: el hardware realiza las operaciones AES directamente y logra tasas de transferencia muy altas. Al mismo tiempo, la carga de CPU, el calentamiento y el consumo de batería se mantienen bajos. Esto hace que el rendimiento sea algo más predecible entre diferentes dispositivos Android.
Muchos dispositivos Android antiguos o económicos sin extensiones criptográficas ARMv8 deben ejecutar AES completamente en software. Esto consume mucho más tiempo de cálculo: AES por software puede usar hasta 10 veces más ciclos de CPU por byte que AES acelerado por hardware. El dispositivo se calienta más rápido y la batería se agota notablemente más rápido.
ChaCha20-Poly1305 está diseñado para ejecutarse en software y suele ser claramente más rápido aquí. Se nota directamente en sincronizaciones, cargas de fotos y datos locales cifrados.
La tabla muestra cuánto puede afectar la clase de dispositivo a la velocidad y al consumo de batería.
| Plataforma | Clase de dispositivo | Aceleración AES | Rendimiento | Carga de CPU | Calentamiento | Consumo de batería |
|---|---|---|---|---|---|---|
| iOS | iPhone moderno (A14+) | Completa (hardware) | AES-GCM más rápido* | Muy baja | Mínimo | Despreciable |
| Android | Buque insignia | Completa (hardware) | AES-GCM más rápido* | Baja | Mínimo | Bajo |
| Android | Gama media (p. ej. serie SD 6) | Parcial / variable | ChaCha20 a menudo más rápido* | Media | Moderado | Moderado |
| Android | Entrada / dispositivos antiguos | Ninguna (software) | ChaCha20 ~3× más rápido* | Alta | Calentamiento rápido | Alto (con AES) |
Todos los datos dependen del benchmark y varían según el SoC y la implementación de la biblioteca.
Un solo valor de velocidad de un dispositivo de prueba actual aporta poco en la práctica. Es más útil probar específicamente en dispositivos antiguos que todavía se usan activamente.
Mide durante 5–10 minutos bajo carga:
También es importante: usa en ambas plataformas la misma biblioteca. Si no, al final no comparas los algoritmos, sino solo diferencias en la implementación.
Qué tan notable es esto en datos locales, imágenes y llamadas API lo muestra la siguiente sección.
Para Gunfinder, lo que importa sobre todo es: ¿Se almacenan o transmiten datos localmente? De eso depende dónde está el riesgo y qué medida de protección aporta más.
Los datos almacenados localmente a menudo se subestiman. Pero ahí es donde radica parte del problema. Los resultados de búsqueda guardados, el contenido del carrito y los datos de cuenta y perfil están directamente en el dispositivo. Si no hay una copia de seguridad protegida o el dispositivo está comprometido, estos datos pueden ser accesibles.
En los datos locales, lo que más importa es el dispositivo objetivo. Si el dispositivo tiene aceleración AES, AES-GCM es una opción sólida. Si falta este soporte, ChaCha20-Poly1305 suele ser más eficiente. La clave debe almacenarse de forma segura en el Android Keystore o en el Apple Keychain o Secure Enclave. Y un punto no es negociable: cada archivo necesita un nonce único de 96 bits. Reutilizar un nonce rompe la seguridad y la integridad.
El mismo principio básico se aplica a las transmisiones. Pero aquí el foco está en otro lugar: en los datos útiles y el registro.
TLS protege el canal de transporte. Pero eso no significa automáticamente que los datos útiles estén protegidos. Si mensajes privados entre compradores y vendedores o datos de pujas en subastas quedan en los registros del servidor, sin cifrado adicional a nivel de app son legibles en texto claro. Aquí es donde entran AES-GCM y ChaCha20-Poly1305. Complementan el cifrado de transporte como segunda capa de protección.
El punto clave no es principalmente el algoritmo. Lo decisivo es si los datos están en el dispositivo o viajan por la red.
Para datos locales, la clase del dispositivo es lo principal. Para datos API, subidas y mensajes, lo esencial es una gestión limpia de claves y nonces.
Para Gunfinder al final cuenta exactamente esto: gestión limpia de claves y nonces. Qué variante encaja mejor en el día a día lo muestra la siguiente sección.
Para Gunfinder lo más importante es: ¿qué dispositivo usa la app y qué datos se procesan? De ahí surge en la práctica la elección del método. La tabla de abajo lo resume y clasifica flujos de trabajo típicos de Gunfinder.
| Requisito de la app | Entorno del dispositivo | Prioridad | Algoritmo recomendado |
|---|---|---|---|
| Borradores cifrados | iOS / Android tope de gama | Seguridad hardware | AES-GCM |
| Listados en caché | Parque mixto de dispositivos Android | Consistencia de rendimiento | ChaCha20-Poly1305 |
| Datos de cuenta y transacciones | Todas las plataformas | Integridad de datos | AES-GCM |
| Subidas de fotos | Dispositivos Android antiguos o básicos | Eficiencia de batería | ChaCha20-Poly1305 |
| Mensajes del marketplace | Parque mixto de dispositivos Android | Baja latencia | ChaCha20-Poly1305 |
| Actualizaciones de subastas | Tráfico backend | Estandarización AES existente | AES-GCM |
Para todos los casos se aplica la misma estructura básica: almacenamiento seguro de claves mediante Android Keystore o Apple Keychain, nonces únicas por operación, TLS 1.3 para cada transmisión y una rotación regular de claves. Sin estos puntos, ni el mejor algoritmo ayuda del todo.
AES-GCM encaja bien con iPhones modernos y dispositivos Android de gama alta, cuando hay hardware AES disponible y el backend ya está basado en ello. Entonces el método muestra sus fortalezas donde los dispositivos lo soportan directamente.
En cuanto entran en juego dispositivos Android más antiguos o económicos, ChaCha20-Poly1305 suele ser la opción más fiable. La razón es sencilla: el rendimiento en esos dispositivos suele ser más constante que con AES por software.
Ambos algoritmos son seguros si se usan correctamente. En resumen: AES-GCM es ideal para entornos con hardware dedicado, ChaCha20-Poly1305 para flotas Android mixtas.
Si tu dispositivo objetivo tiene aceleración por hardware AES depende del CPU instalado. Muchos procesadores modernos soportan AES-NI. Esto hace que el cifrado sea mucho más eficiente.
En dispositivos Android e iOS, lo mejor es comprobarlo en las especificaciones técnicas del procesador. En smartphones y tablets basados en ARM, la aceleración por hardware para operaciones criptográficas suele estar integrada. El sistema operativo normalmente la usa automáticamente.
Si usas una nonce más de una vez, comprometes la seguridad del cifrado.
Entonces los atacantes pueden detectar patrones en los datos cifrados o incluso deducir la clave usada.
Esto afecta gravemente la confidencialidad de tus datos. Por eso la nonce debe ser nueva y única en cada proceso de cifrado.
No. TLS 1.3 protege los datos durante la transmisión. No cubre los datos almacenados localmente en la app del dispositivo.
Si quieres proteger los datos de forma integral, necesitas además cifrado local. En transacciones sensibles, también puede ser útil AES-256.
Solo la combinación de transmisión segura y cifrado local ayuda incluso si hay problemas técnicos o alguien accede sin permiso al dispositivo final.