Table of Contents
Comprendere Crittografia Asimmetrica per applicazioni mobili
La crittografia asimmetrica, nota anche come crittografia a chiave pubblica, è un meccanismo di sicurezza fondamentale che utilizza due chiavi matematicamente correlate ma distinte: una chiave pubblica, che può essere condivisa liberamente, e una chiave privata, che deve rimanere segreta. Nelle applicazioni mobili, questo approccio consente la comunicazione sicura senza la necessità di pre-share una chiave segreta, rendendolo ideale per lo scambio di chiavi, le firme digitali e l'autenticazione utenti o server.
Il principio fondamentale si basa sulla difficoltà di alcuni problemi matematici. Ad esempio, RSA utilizza la complessità computazionale di fattorizzare grandi prodotti primitivi, mentre Elliptic Curve Cryptography (ECC) si basa sul problema del logaritmo discreto sulle curve ellittiche. Entrambi forniscono una forte sicurezza, ma ECC offre una sicurezza equivalente con dimensioni chiave significativamente più piccole, che è particolarmente vantaggioso per gli ambienti mobili in cui la larghezza di banda e lo storage sono limitati.
Scegliere il Algoritmo destro per Mobile
RSA: ampiamente supportato ma ad alta intensità di risorse
RSA rimane l'algoritmo asimmetrico più ampiamente supportato, disponibile in quasi ogni libreria crittografica. La sua scala di forza con la lunghezza chiave; una chiave di 2048-bit è il minimo raccomandato da NIST] a partire da 2025. Tuttavia, la crittografia RSA e la decrittografia sono spesso costosi computazionalmente, soprattutto per i lunghi testi semplici.
ECC: più piccole chiavi, più veloci operazioni
La cripografia a curva ellittica (ECC) è diventata la scelta preferita per le applicazioni mobili moderne. Una chiave ECC a 256 bit garantisce una sicurezza paragonabile a una chiave RSA a 3072 bit, riducendo drasticamente le dimensioni dei certificati e dei dati trasmessi. Le operazioni ECC sono generalmente più veloci per la generazione e la firma chiave, che è un vantaggio significativo sulle CPU mobili a bassa potenza.
Protocolli di Diffie-Hellman e Key Exchange
Diffie-Hellman (DH) e la sua variante ellittica-curve (ECDH) non sono direttamente utilizzati per la crittografia dei dati, ma sono critici per la creazione di un segreto condiviso su un canale di insicuro. Nelle applicazioni mobili, ECDH è spesso impiegato come parte del handshake TLS per generare chiavi di sessione astratti.
Suggerimenti di implementazione di piattaforma-Specific
iOS: Levaggio dell'enclave sicura e del criptoKit
Apple fornisce due API principali per la crittografia asimmetrica: il framework di sicurezza legacy e il moderno framework CryptoKit introdotto in iOS 13. CryptoKit supporta operazioni di alto livello per la firma, la verifica e l'accordo chiave utilizzando le curve NIST (P-256, P-384, P-512) e Curve25519.
Android: KeyStore e StrongBox
Android offre il provider di accelerazione , che permette di memorizzare le chiavi generate dall'app in un ambiente di esecuzione affidabile (TEE) o in un chip di sicurezza dedicato (StrongBox). A partire da Android 9 (livello API 28), è possibile richiedere i tasti di supporto StrongBox utilizzando .
Quadri di forma trasversale
Per Flutter, si raccomanda il pacchetto o i plugin specifici per la piattaforma (ad esempio, ] combinati con la generazione di chiavi native) .
Gestione sicura delle chiavi: La Fondazione di Crittografia Asimmetrica
Mai Hard-Code chiavi private
Qualsiasi attaccante con accesso al pacchetto app può invertire-engineer le chiavi binarie ed estrarre codici rigidi. Utilizzare la piattaforma di archiviazione sicura (Keychain su iOS, Android KeyStore) o un servizio di gestione delle chiavi remoto (KMS) per il provisioning delle chiavi. Per le applicazioni server-authenticated, prendere in considerazione l'emissione di chiavi specifiche del dispositivo al momento della registrazione.
Archiviazione hardware-ritorno
I dispositivi mobili moderni includono hardware sicuro dedicato come Apple Secure Enclave e Android Trusted Execution Environment (TEE) o StrongBox. Questi componenti eseguono la decrittografia e la firma senza esporre la chiave privata al processore principale dell'applicazione. Dove disponibile, sempre preferiscono i tasti di backup hardware. Se il supporto hardware è obbligatorio (ad esempio, per le applicazioni che gestiscono i dati di pagamento o di salute), utilizzare [LT: 13]
Rotazione chiave e Rivocazione
Le chiavi asimmetriche dovrebbero avere una vita finita. Criteri di rotazione chiave di esecuzione: ad esempio, generare nuove chiavi di firma ogni sei mesi e deprecare vecchie. Sul lato del server, mantenere una lista nera o utilizzare chiave pubblica pinning per revocare le chiavi compromessi. Le applicazioni mobili dovrebbero periodicamente query il server per le chiavi pubbliche aggiornate e verificare che siano firmate da un'autorità di fiducia. Evitare di cachere le chiavi pubbliche indefinitamente; aggiornarle utilizzando le chiamate di rete sicure.
Considerazioni di backup
Le chiavi legate a un dispositivo specifico (ad esempio, per la crittografia locale) non devono essere supportate su iCloud o Google Drive, in quanto ciò mina il modello di sicurezza. Su iOS, impostare l'accessibilità a per evitare il backup chiave. Su Android, utilizzare e garantire che i tasti non vengano esportati tramite agenti di backup.
Migliori Pratiche per la Comunicazione Sicuro
Utilizzare la crittografia ibrida per grandi dati
Invece, utilizzare uno schema ibrido: generare una chiave simmetrica di una volta (ad esempio, AES-256-GCM), crittografare i dati con quella chiave, quindi crittografare la chiave simmetrica utilizzando la chiave pubblica del destinatario. Questo approccio combina automaticamente l'efficienza della crittografia simmetrica con la distribuzione sicura della crittografia asimmetrica.
Convalida sempre la catena di fiducia
Quando si scambiano le chiavi pubbliche tramite un server, convalidare che la chiave pubblica appartiene al destinatario previsto. Utilizzare catene di certificati radicate in una CA attendibile, o implementare la verifica out-of-band (ad esempio, la scansione del codice QR per scenari peer-to-peer). Per la comunicazione del server, applicare sempre TLS 1.3 con pinning del certificato.
Segreto perfetto di implementazione (PFS)
Nei protocolli di scambio chiave, utilizzare sempre chiavi effimeri (ECDHE) in modo che compromettendo la chiave privata a lungo termine non esprima le chiavi di sessione passate. Questa proprietà, chiamata perfetta segretezza in avanti, assicura che anche se un attaccante ottiene in seguito la chiave privata del server, non possono decifrare il traffico registrato in precedenza.
Errori di maniglia senza informazioni di modifica
Le operazioni crittografiche possono fallire a causa di chiavi non valide, dati corrotti o timeout. Non esporre mai messaggi di errore dettagliati all'utente o di registro di materiale di chiave cruda. Ad esempio, se la verifica della firma non riesce, visualizzare un generico "errore di comunicazione" piuttosto che "firma di ECDSA non valida" che potrebbe aiutare un utente.
Test e verifica della tua attuazione
Test unità con vettori di prova noti
Convalida le funzioni di crittografia e firma contro i vettori di test pubblicati da NIST o RFC. Ad esempio, testare la crittografia RSA-OAEP utilizzando i vettori [[ NIST CAVP[[[]]]].
Test di penetrazione e analisi statica
I vettori di attacco comuni includono attacchi di downgrade (forcing a un cifrario più debole), perdite di canale laterale (ad esempio, attraverso l'analisi di potenza o la tempistica della cache della CPU), e attacchi di orcle di imbottitura (ad esempio, su RSA con PKCS#1 v1.5).
Regressione Testing Dopo Aggiornamenti della Biblioteca
Le librerie criptografiche rilasciano frequentemente patch per le vulnerabilità scoperte. Dopo aver aggiornato una libreria (ad esempio, OpenSSL, Bouncy Castle, Conscrypt), eseguire test di regressione completa per garantire che le funzioni chiave di generazione, firma e crittografia producano ancora uscite valide. Prestare attenzione alle deprecazioni: Apple ha deprecato la funzione ] per RSA a favore di CryptoKit; Google deprecated future provider
Pitfalls comune e come evitare di loro
Utilizzo di Generatori di numeri casuali imprevedibili
Tutte le operazioni crittografiche dipendono da numeri casuali sicuri. Le applicazioni mobili devono usare su iOS e su Android. Non si basano mai su [] o ] da , come questi sono prevedibili e possono rompere la generazione di chiavi.
Codifica e trasmissione chiave improprio
Le chiavi pubbliche devono essere codificate in un formato standard (ad esempio, DER o PEM). Quando si inviano le chiavi pubbliche sulla rete, utilizzare la codifica Base64 all'interno di un campo JSON o un contenitore standard come JWK (JSON Web Key).
Non gestire l'espirazione chiave
Le chiavi che non scadono diventano mai un rischio a lungo termine. Implementa i controlli di scadenza nella tua app: se la data di creazione di una chiave è più vecchia di una soglia (ad esempio, 90 giorni), richiedi all'utente di ri-impiegare. Sul lato del server, rifiuta le chiavi che sono scadute.
Trascurare la resistenza laterale del tunnel
I processori mobili sono vulnerabili agli attacchi di tempistica e di analisi di potenza. Utilizzare implementazioni a tempo costante per tutte le operazioni crittografiche. La maggior parte delle API della piattaforma (ad esempio, CryptoKit, [) sono costanti per progettazione, ma se si utilizza una libreria di terze parti, verificare la sua resistenza al canale laterale.
Conclusioni
Con l'implementazione di crittografia asimmetrica nelle applicazioni mobili non si tratta solo di chiamare alcune funzioni di libreria; richiede una profonda comprensione della selezione di algoritmi, gestione delle chiavi, API specifiche della piattaforma e test di sicurezza.