Crittografia mobile per trasferimento: condivisione sicura in movimento
Assicura che i trasferimenti mobili siano crittografati end-to-end. Come funziona la crittografia browser su iOS e Android.
La crittografia dei file mobile funziona in Safari su iOS e in Chrome/Firefox su Android tramite la Web Crypto API — la stessa chiamata crypto.subtle.encrypt che opera su desktop. I file scelti dalla libreria Foto o dall'app File vengono crittografati con AES-256-GCM prima che un solo byte lasci il telefono. Il lavoro pesante è la derivazione delle chiavi PBKDF2, che su un iPhone 14 Pro completa 600.000 iterazioni in circa 350 ms. Per un .mov da 500 MB di una vacanza recente, il vero collo di bottiglia è la larghezza di banda in upload, non la crittografia. I servizi di trasferimento mobile-first non hanno bisogno di app native: il browser ha tutto il necessario.
Perché il browser batte le app native su mobile
Le app native iOS e Android per il trasferimento file (Dropbox, la versione pre-2023 di WeTransfer) richiedono permessi ampi, restano in memoria dopo l'uso e mostrano pubblicità. Un flusso di lavoro browser-based non richiede installazione, gira una volta e si chiude quando si chiude la scheda. Ancora più importante: il rifiuto di Apple nell'App Store alle vere app zero-knowledge (la vicenda di Cryptee nel 2021 è documentata) rende la distribuzione via browser l'unico modo per garantire che la logica di crittografia non venga sostituita silenziosamente da un aggiornamento. Lo stesso bundle JavaScript gira ovunque, verificabile tramite hash SHA-384.
La Web Crypto API su iOS e Android
Safari 17 su iOS 17+ supporta crypto.subtle completamente: deriveKey, encrypt, decrypt, sign, verify. Chrome su Android lo supporta dalla versione 37 (2014). Entrambe le implementazioni delegano alle primitive native del sistema operativo — CommonCrypto su iOS, BoringSSL su Android — quindi la crittografia è accelerata dall'hardware tramite le istruzioni AES di ARM. Un chunk da 5 MB si crittografa in circa 15 ms su un Pixel 8. L'API non espone il materiale grezzo della chiave a JavaScript (gli oggetti CryptoKey sono handle opachi), il che offre protezione contro le estensioni malevole, sebbene i browser mobile ne abbiano molte meno.
Gestire file grandi senza esaurire la memoria
Mobile Safari limita l'heap JavaScript a circa 2 GB sugli iPhone con 6 GB di RAM, meno sui dispositivi più vecchi. Il pattern ingenuo "leggi il file in ArrayBuffer, crittografa, carica" si blocca su qualsiasi file sopra 1 GB. Lo streaming è obbligatorio. Usa File.slice() per leggere chunk da 5 MB, crittografa ciascuno con una sottochiave derivata via HKDF, e carica via fetch() con un body ReadableStream. L'upload progressivo mantiene la memoria di picco sotto i 50 MB anche per video da 10 GB. Chrome su Android supporta le richieste fetch in streaming dalla versione 105; Safari ha aggiunto il supporto completo nella versione 17.4.
Batteria e temperatura durante la crittografia
AES-256-GCM è economico sull'hardware — le Cryptography Extensions di ARMv8 lo fanno girare quasi alla velocità della DRAM. La crittografia di 1 GB su un iPhone 14 Pro consuma circa il 2% della batteria, principalmente la radio per l'upload, non la CPU. Il calore percepito dagli utenti arriva con PBKDF2 ad alto numero di iterazioni: 1,2 milioni di iterazioni (raccomandazione OWASP 2024) richiedono 700 ms e fanno salire brevemente l'A17 a 90°C. Ridurre a 600.000 iterazioni bilancia sicurezza e temperatura. Argon2id con m=32MB è più delicato sui carichi prolungati perché la memory-hardness è più lenta ma meno densa di potenza.
Affidabilità degli upload su rete mobile
Gli upload mobile falliscono. Una galleria della metropolitana, un ascensore, il passaggio da Wi-Fi a LTE — qualsiasi di questi eventi blocca un fetch() ingenuo. Il trasferimento mobile affidabile usa upload ripristinabili con riconoscimento a livello di chunk, protocolli come tus.io (specifica tus 1.0, ampiamente supportato) o upload multipart S3. Ogni chunk da 5 MB viene caricato in modo indipendente; un fallimento ritrasmette solo quel chunk. Il client memorizza lo stato dei chunk in IndexedDB, così un ricaricamento della scheda o un'espulsione del tab su iOS non ricomincia tutto dall'inizio. SwissTransfer e HexaTransfer implementano entrambi gli upload ripristinabili; il flusso web mobile di WeTransfer non lo fa, ed è per questo che gli upload da 2 GB su LTE spesso falliscono.
Il problema UX delle password su tastiera mobile
Digitare una password forte di 16 caratteri su una tastiera telefonica è scomodo. Offri alternative: scansiona un codice QR contenente la password dallo schermo del mittente, incolla dal gestore di password nativo (iOS compila da Keychain tramite l'equivalente web di .well-known/apple-app-site-association), o usa una passkey registrata durante un trasferimento precedente. Per i casi occasionali, usa la Web Share Target API per far iniettare la password da un'app companion (Signal, ad esempio) senza che l'utente la ridigiti.
Accessibilità e schermi piccoli
Un iPhone SE da 4,7 pollici non riesce a contenere un uploader desktop in stile drag-and-drop. Le UI di crittografia mobile devono rispettare il viewport: selettore di file a schermo intero, barre di progresso visibili sopra la tastiera virtuale, etichette VoiceOver su ogni pulsante (role="progressbar" con aria-valuenow per l'accessibilità), e una dimensione minima del target di tocco di 44x44px secondo le HIG Apple. Non nascondere i controlli dietro gli stati hover — il touch non ha hover. Testa con iOS Low Power Mode, che limita i timer in background e rompe gli aggiornamenti di progresso basati su polling.
I quirk di Safari iOS che bloccano gli upload
Safari su iOS ha alcune trappole. Gli eventi di progresso upload dell'API Fetch non si attivano in modo affidabile prima di iOS 16.4. La File System Access API non è supportata, quindi non puoi fare streaming di file grandi dallo storage locale come fa Chrome. Safari espelle aggressivamente le schede inattive sotto pressione di memoria, il che blocca gli upload in corso. Mitigazioni: usa XMLHttpRequest con eventi di progresso come fallback (funziona ancora bene), mantieni la scheda in primo piano durante l'upload, e avvisa l'utente di non bloccare lo schermo per file grandi. Tenere lo schermo acceso scarica la batteria, ma previene l'espulsione della scheda.
La frammentazione dei dispositivi Android
Android va dal Pixel 8 Pro agli 80€ del Moto e14 con Android Go. Web Crypto funziona su tutti, ma le prestazioni variano enormemente: un MT6762 a 2 GHz impiega 1,8 secondi per 600.000 iterazioni PBKDF2 dove un telefono della classe Apple M3 ne impiega 200 ms. Rileva il dispositivo tramite Device Memory API e Hardware Concurrency, scala le iterazioni di conseguenza (fino a 300.000 per i dispositivi Go), e avvisa gli utenti sulle connessioni solo cellulare che gli upload superiori a 1 GB potrebbero essere inaffidabili. Il vantaggio: il trasferimento crittografato funziona sulla maggior parte dei telefoni del mondo senza richiedere un dispositivo di fascia alta.
Provalo su hexatransfer.com — gratis, senza registrazione, fino a 10 GB.
Invia file di grandi dimensioni in modo sicuro con crittografia end-to-end
Trasferisci file fino a 10 GB gratuitamente con crittografia end-to-end. Nessun account necessario. I tuoi file vengono crittografati nel browser prima del caricamento — nessun altro può leggerli.
Invia un file