Prima di tutto, per implementare comunicazioni sicure tra l'applicazione client e un server, concettualmente, è necessaria solo la chiave pubblica del server. Ciò consente di stabilire una relazione di fiducia unidirezionale con il server e di stabilire una sessione sicura, in cui è garantita l'identità del server.
Mentre il metodo precedente non fornisce un trust bidirezionale (il client non può essere identificato sul server), quando si stabilisce il canale di comunicazione nella maggior parte delle applicazioni, questo livello di affidabilità non è realmente richiesto.
Se i requisiti per fornire l'autenticazione del client al server utilizzando chiavi pubbliche/private, le cose diventano più complicate perché se inserisci la chiave nell'apk, non importa quanto lo offuscate (inclusa l'incorporamento in una libreria nativa) rallenterà solo un utente nefasto dedicato.
L'unico modo per conservare la chiave privata con il cliente è per crittografare esso. Ma poi hai un problema simile a dove memorizzare la chiave di decrittografia. La soluzione più semplice è generare una coppia di chiavi pubblica/privata per l'utente dell'applicazione client e chiedere all'utente di fornire una chiave di crittografia/decrittografia simmetrica (che l'utente dovrà sempre digitare) per decrittografare la chiave privata ogni volta che l'utente sta usando l'applicazione.
L'alternativa sarebbe utilizzare una sorta di dispositivo hardware crittografico dedicato simile a una smart card che memorizzerebbe la chiave privata in modo sicuro ma si ha ancora il problema di autorizzare l'applicazione a leggere la chiave dal dispositivo (per non parlare la complicazione dell'interfacciamento con detto dispositivo).
Ora, la domanda che devi porsi è questa: "Chi stai cercando di impedire di leggere la chiave privata?" (ovviamente dopo aver risposto l'altra domanda: "Hai veramente bisogno/privato coppia di chiavi pubblica una per il cliente").
fonte
2012-02-07 15:46:07
Chi è l'autore dell'attacco nel modello di minaccia? L'utente legittimo del tuo dispositivo? – CodesInChaos
L'utente malintenzionato non sarà l'utente, il problema è che l'app accederà a un servizio di pagamento e vogliamo un'app sicura. In un semplice apk chiunque può decompilare, ottenere le chiavi e usarle per accedere al sistema di pagamento – rdiaz82
Si dovrebbe progettare l'applicazione in modo che un utente che ha il codice sorgente completo dell'applicazione e tutte le chiavi incorporate non possa fare nulla il male. – CodesInChaos