Ho un'applicazione mobile che deve essere in grado di inviare immagini in modo sicuro ad altri telefoni cellulari. Ho cercato di scoprirlo e ho un'idea nella mia mente su come potrebbe funzionare, ma voglio passarlo da alcuni di voi per essere sicuri.
Definizioni:
- Telefono ricevente: il telefono che riceverà le immagini. Potrebbero esserci multipli di questi.
- Invio di telefono: il telefono che invierà le immagini. Potrebbero esserci multipli di questi.
- Account: raggruppamento di telefoni riceventi e invio di telefoni.
Passi:
- Uno o più telefoni riceventi sono registrati nell'account. Ognuno di loro crea una coppia di chiavi RSA da 2048 bit utilizzando l'Android Keystore o il portachiavi iOS. La chiave pubblica viene inviata al back-end in cui viene salvata. La mia comprensione (e dalla sperimentazione) è che la chiave privata NON può essere estratta dal portachiavi Android Keystore / iOS. *
- Prima di inviare un'immagine, un telefono mittente scarica TUTTE le chiavi pubbliche per i telefoni riceventi. Quindi genera una chiave AES da 256 (probabilmente usando CBC?) Che usa per crittografare la foto. Quella chiave viene quindi crittografata utilizzando la chiave RSA pubblica s scaricata dal server di back-end. L'immagine crittografata, le chiavi AES crittografate e altre informazioni (IV? - dovrebbe essere anch'essa crittografata?) Viene inviata al server di back-end in cui è salvata.
- I telefoni riceventi scaricano le immagini dal server di backend, decodificano la chiave AES utilizzando la loro chiave privata dal loro keystore / portachiavi, quindi decodificano le immagini usando il tasto AES.
- Tutte le immagini vengono cancellate dal server di back-end dopo 14 giorni.
* Capisco che se un telefono disinstalla l'app, KeyPair viene perso e questo è GIUSTO.
Nota: il server di back-end salverà le immagini crittografate su un volume crittografato e tutte le comunicazioni avverranno tramite https. È possibile presumere che l'accesso al server di back-end richiederà l'autorizzazione e verrà (tentato) controllato. Mentre questo può avere implicazioni sulla sicurezza, voglio focalizzare questo post più sulle immagini (se funziona?). Se hai bisogno di maggiori dettagli sul sistema, fammelo sapere.
Domande:
- Quanto è sicuro questo? Cosa mi sono perso? Cos'altro dovrei prendere in considerazione? (Non sono esperto di sicurezza)
- Nel caso in cui qualcuno esegua l'hacking nel mio back-end e ottenga l'accesso alle immagini crittografate, quanto sono sicure le foto? (Il mio obiettivo è fare in modo che "l'hacker" debba hackerare anche il telefono degli utenti per decrittografare le immagini).
- È un problema che avrò la stessa chiave AES crittografata con potenzialmente più chiavi pubbliche RSA?