Cifrado móvil para transferencia: compartir seguro en movimiento
Asegura que las transferencias móviles estén cifradas de extremo a extremo. Cómo funciona el cifrado por navegador en iOS y Android.
El cifrado de archivos en móviles se ejecuta en Safari en iOS y Chrome/Firefox en Android usando la Web Crypto API — la misma llamada crypto.subtle.encrypt que funciona en escritorio. Los archivos seleccionados desde la biblioteca de Fotos o la app Archivos se cifran con AES-256-GCM antes de que un solo byte abandone el teléfono. La operación más costosa es la derivación de claves con PBKDF2, que en un iPhone 14 Pro completa 600 000 iteraciones en unos 350 ms. Para un .mov de 500 MB de unas vacaciones recientes, el verdadero cuello de botella es el ancho de banda de subida, no el cifrado. Los servicios de transferencia optimizados para móvil no necesitan apps nativas — el navegador tiene todo lo necesario.
Por qué el navegador supera a las apps nativas en móvil
Las apps nativas de iOS y Android para transferencia de archivos (Dropbox, la app pre-2023 de WeTransfer) solicitan permisos amplios, permanecen en memoria tras su uso y muestran publicidad. Un flujo de trabajo basado en el navegador no requiere instalación, se ejecuta una vez y se cierra al cerrar la pestaña. Más importante aún, el rechazo de la App Store de Apple a las apps de verdadero conocimiento cero (el caso de Cryptee en 2021 está documentado) hace que la entrega por navegador sea la única forma de garantizar que la lógica de cifrado no sea reemplazada silenciosamente por una actualización de la tienda de apps. El mismo bundle de JavaScript se ejecuta en todos lados, verificable contra hashes SHA-384.
La Web Crypto API en iOS y Android
Safari 17 en iOS 17+ soporta crypto.subtle completamente: deriveKey, encrypt, decrypt, sign, verify. Chrome en Android lo ha soportado desde la versión 37 (2014). Ambas implementaciones delegan en primitivas nativas del SO — CommonCrypto en iOS, BoringSSL en Android — por lo que el cifrado está acelerado por hardware con las instrucciones AES de ARM. Un fragmento de 5 MB se cifra en aproximadamente 15 ms en un Pixel 8. La API no expone el material de clave en bruto al JavaScript (los objetos CryptoKey son manejadores opacos), lo que ayuda contra extensiones maliciosas, aunque los navegadores móviles tienen muchas menos de estas.
Manejar archivos grandes sin agotar la memoria
Safari móvil limita el heap de JavaScript a unos 2 GB en iPhones con 6 GB de RAM, y menos en dispositivos más antiguos. El patrón ingenuo de "leer el archivo en un ArrayBuffer, cifrar, subir" falla para archivos superiores a 1 GB. El streaming es obligatorio. Usa File.slice() para leer fragmentos de 5 MB, cifra cada uno con una subclave derivada mediante HKDF, y sube mediante fetch() con un cuerpo ReadableStream. La subida progresiva mantiene el pico de memoria por debajo de 50 MB incluso para vídeos de 10 GB. Chrome en Android soporta fetch de streaming desde la versión 105; Safari añadió soporte completo en la versión 17.4.
Batería y consideraciones térmicas
AES-256-GCM es económico en hardware — las Cryptography Extensions de ARMv8 lo hacen correr casi a la velocidad de la DRAM. El cifrado de 1 GB en un iPhone 14 Pro consume aproximadamente un 2% de batería, principalmente la radio durante la subida, no la CPU. Donde los usuarios notan el calor es en PBKDF2 con muchas iteraciones; 1,2 millones de iteraciones (recomendación OWASP 2024) tardan 700 ms y ponen el A17 brevemente a 90°C. Ajustar a 600 000 iteraciones equilibra seguridad y temperatura. Argon2id con m=32MB es más suave en cargas de trabajo sostenidas porque la dureza de memoria es más lenta pero menos densa en potencia.
Conectividad celular, Wi-Fi y fiabilidad de la subida
Las subidas móviles fallan. Un túnel de metro, un ascensor, un cambio de Wi-Fi a LTE — cualquiera de estos interrumpe un fetch() ingenuo. Una transferencia móvil robusta usa subidas reanudables con confirmación a nivel de fragmento, protocolos como tus.io (especificación tus 1.0, ampliamente soportada) o subidas multiparte de S3. Cada fragmento de 5 MB se sube de forma independiente; un fallo reenvía solo ese fragmento. El cliente almacena el estado de los fragmentos en IndexedDB para que una recarga de la pestaña del navegador o la expulsión de una pestaña iOS no reinicie todo el proceso. SwissTransfer y HexaTransfer implementan ambos subidas reanudables; el flujo web móvil de WeTransfer no, razón por la cual las subidas de 2 GB por LTE a menudo fallan.
Entrada de teclado y el problema de UX de la contraseña
Teclear una contraseña segura de 16 caracteres en un teclado de teléfono es incómodo. Ofrece alternativas: escanear un código QR que contiene la contraseña desde la pantalla del remitente, pegar desde el gestor de contraseñas nativo (iOS rellena desde Keychain mediante equivalentes web de .well-known/apple-app-site-association), o usar una passkey registrada durante una transferencia anterior. Para casos puntuales, usa la Web Share Target API para que una app complementaria (Signal, por ejemplo) inyecte la contraseña sin que el usuario la vuelva a escribir.
Accesibilidad y pantallas pequeñas
Un iPhone SE de 4,7 pulgadas no cabe un cargador de arrastrar y soltar estilo escritorio. Las interfaces de cifrado móvil deben respetar el viewport: selector de archivos a pantalla completa, barras de progreso visibles por encima del teclado virtual, etiquetas VoiceOver en cada botón (role="progressbar" con aria-valuenow para accesibilidad) y un objetivo táctil mínimo de 44x44 px según las directrices HIG de Apple. No ocultes controles detrás de estados hover — no hay hover en táctil. Prueba con el Modo de Bajo Consumo de iOS, que limita los temporizadores en segundo plano y rompe las actualizaciones de progreso basadas en polling.
Peculiaridades de Safari en iOS que rompen las subidas
Safari en iOS tiene algunas trampas. Los eventos de progreso de subida de la Fetch API no se disparan de forma fiable antes de iOS 16.4. La File System Access API no está soportada, por lo que no puedes transmitir archivos grandes desde almacenamiento local como Chrome. Safari expulsa agresivamente las pestañas inactivas bajo presión de memoria, lo que interrumpe las subidas en curso. Mitigaciones: usa XMLHttpRequest con eventos de progreso como alternativa (sigue funcionando bien), mantén la pestaña en primer plano durante la subida y advierte al usuario que no bloquee la pantalla para archivos grandes. La pantalla encendida gasta batería pero impide la expulsión de la pestaña.
La mayor fragmentación de dispositivos en Android
Android abarca desde el Pixel 8 Pro hasta dispositivos Moto e14 de 80 € que corren Android Go. La Web Crypto funciona en todos ellos, pero el rendimiento varía mucho — un MT6762 a 2 GHz tarda 1,8 segundos en 600 000 iteraciones PBKDF2 donde un teléfono con chip Apple M3 tarda 200 ms. Detecta el dispositivo mediante Device Memory API y Hardware Concurrency, escala las iteraciones según corresponda (hasta 300 000 para dispositivos Go) y advierte a los usuarios con conexiones solo de datos que las subidas superiores a 1 GB pueden ser poco fiables. La ventaja: la transferencia cifrada funciona en la mayoría de los teléfonos del mundo sin requerir un gama alta.
Pruébalo en hexatransfer.com — gratis, sin cuenta, hasta 10 GB.
Envía archivos grandes de forma segura con cifrado de extremo a extremo
Transfiere archivos de hasta 10 GB gratis con cifrado de extremo a extremo. Sin necesidad de cuenta. Tus archivos se cifran en tu navegador antes de subirlos: nadie más puede leerlos.
Enviar un archivo