Il miglior approccio per creare un'app che si connetta a informazioni sensibili

3

Scriverò un'app che si connette a un server con informazioni sensibili e uno dei requisiti principali è che solo la mia app sarà in grado di effettuare la connessione. Non sono richiesti nome utente o password forniti dall'utente. A proposito, questo sarà sulla piattaforma Android, ma non dovrebbe essere troppo rilevante per questa domanda.

Non ho molta familiarità con il funzionamento interno delle comunicazioni Internet sicure, tuttavia, presumo che l'approccio migliore sia stabilire una connessione SSL tra la mia app e il server. La preoccupazione che ho è: cosa impedisce a qualcuno di monitorare il traffico di rete che la mia app invia al server per avviare la connessione SSL e quindi inviare lo stesso traffico per aprire la propria connessione (es .: duplicare il numero casuale che invio al server che è usato per creare la chiave di sessione)? Presumo che questo tipo di cose siano state pensate prima e messe in sicurezza, ma spero che qualcuno possa condividere un po 'di più informazioni su questo per aiutarti a gestire la mia preoccupazione.

Grazie, Harry

    
posta Harry Muscle 05.12.2011 - 05:33
fonte

3 risposte

5

SSL impedisce a un utente malintenzionato sulla rete di essere in grado di vedere o manipolare i dati in transito. Tuttavia, ciò non garantisce che l'utente dell'applicazione non abbia modificato l'applicazione. Qualsiasi valore memorizzato nella memoria del dispositivo può essere facilmente ottenuto utilizzando un debugger.

In breve non puoi mai fidarti del client, e questo non è un problema che la crittografia può risolvere, punto.

    
risposta data 05.12.2011 - 05:47
fonte
2

In primo luogo, un attacco in cui qualcuno trasmette traffico tra due parti è chiamato man-in-the-middle attacco . SSL protegge contro di loro se i due lati sono stati autenticati . L'autenticazione dei due lati richiede che tu usi SSL in un modo particolare, preferibilmente (preferibilmente) con certificati client o qualche metodo specifico per l'applicazione.

In ogni caso, se si desidera garantire che solo la propria applicazione parlerà con il server, è necessario memorizzare un segreto all'interno dell'applicazione. Ci deve essere qualcosa che la tua applicazione sa e l'attaccante non lo sa. Non è impossibile archiviare segreti in un'applicazione distribuita, ma è molto difficile; richiede l'offuscamento. Si noti che la parola "offuscamento" ha diversi significati quando si tratta di software; qui vuoi l'offuscamento non nel senso del codice sorgente che è difficile da leggere ma nel senso di nascondere un segreto all'interno di un'applicazione. La Bibbia di offuscamento è Software surrettizio di Christian Collberg e Jasvir Nagra se vuoi percorrere questa strada. Alla fine tutti i metodi di offuscamento sono incrinati, quindi la tua unica speranza è rimanere al passo con gli attaccanti e continuare a cambiare le tue tecniche. Sviluppare per offuscare facilmente moltiplicherà il tempo di sviluppo di due o tre, dopo aver acquisito lo sfondo necessario. Se qualcuno ti dice che puoi ottenerlo più facilmente, sono fuorviati o bugiardi.

In breve, non ti puoi fidare del cliente . Se hai dati sensibili, tienilo sul server. Tratta qualsiasi risposta dal cliente come non affidabile.

    
risposta data 06.12.2011 - 09:51
fonte
1

1- Devi familiarizzare con i principi delle comunicazioni sicure. Non c'è via di fuga qui.
2- Come altri hanno già detto MAI FIDUCIA IL CLIENTE, anche se stai scrivendo il cliente.
3- Per ogni comunicazione è necessario accertarsi di chi è su entrambi i lati (sul lato client è necessario assicurarsi che si stia parlando con il server corretto, sul server è necessario assicurarsi che si stia parlando con il cliente che ci si aspetta parla anche tu). Uno dei tanti modi per farlo è utilizzare una combinazione di crittografia asimmetrica e simmetrica, sul server è necessario conoscere [ciascuna] chiave pubblica del client, sul client è necessario conoscere la chiave pubblica del server, quindi è possibile scambiare una chiave RSA o qualche tasto simmetrico (specialmente se la prestazione è un problema).

Questo è solo un suggerimento, devi modificarlo in base a ciò che ti serve.

    
risposta data 06.12.2011 - 18:59
fonte

Leggi altre domande sui tag