2011-10-18 38 views
13

Desidero nascondere alcuni dati immessi dall'utente nel telefono dell'utente crittografato. Per quanto ne so posso cifrare/decodificare i dati usando un valore chiave/seme, ma se nascondo il valore della chiave nel codice, so che può essere trovato in qualche modo (ad esempio decompilando il codice Java).Nascondere la chiave di crittografia nell'applicazione Android

Avete suggerimenti per rendere il processo più difficile?

risposta

6

È impossibile nascondere la chiave nell'app in modo che un hacker intraprendente non sia in grado di estrarlo. Puoi provare a offuscare la chiave e renderla difficile da trovare, ma sarà sempre in grado di farlo.

vedere questo: https://www.excelsior-usa.com/articles/java-obfuscators.html#examples

L'opzione migliore sarebbe quella di chiedere agli utenti di specificare un PIN o una password e di utilizzare tale come la chiave di crittografia. In questo modo, se il dispositivo viene perso o rubato, la chiave è ancora al sicuro e impedisce anche a qualcuno di decompilare la tua app e ottenere la chiave di crittografia per tutte le istanze della tua applicazione.

+0

Si prega di vedere la mia domanda relativa: http://stackoverflow.com/questions/30951805/encrypt-on-server-side-and-decrypt-on-client-side –

+0

@slayton Informazioni sull'uso della password come chiave di crittografia : La password verrà salvata con hash e il valore hash diventerà la chiave, oppure la password verrà utilizzata direttamente come chiave? Solo per chiedere informazioni –

2

Se si esegue questa operazione per i dati di nome utente/password, è necessario eseguire il checkout implementando uno Authenticator.

0

Se la crittografia/decrittografia avviene tutte sul telefono, un hacker determinato sarà in grado di decifrarlo. Puoi rendere la vita più difficile usando l'obfustication, o (se appropriato per la tua applicazione), aggiungendo l'input dell'utente nel codice di crittografia/decrittografia.

Se l'applicazione richiede connettività di rete, potrebbe valere la pena di scaricare parte del codice su un server in esecuzione altrove, in modo che i dati crittografati siano presenti sul dispositivo, ma le chiavi vengono scaricate in fase di esecuzione. Ancora non a prova di hacker, ma riduce i rischi per i dati riservati su un dispositivo rubato.

1

Poiché Android non dispone di alcuna memoria sicura (almeno fino alla 2.2), è necessario scriverne uno proprio.

L'unico modo per farlo in modo sicuro è crittografare con una chiave derivata da una password fornita dall'utente (PBKDF2/RFc2898 è il modo per farlo). Crypto è sicuro solo come la tua chiave e se lo memorizzi al telefono in ogni caso, allora qualcuno può trovarlo e usarlo. Ciò consente all'utente di archiviare la chiave senza effettivamente ricordare un grande tasto AES.

Ci possono essere librerie che lo fanno per Android. Ho scritto uno per Windows Phone che può essere trovato here se vuoi delle basi su come farlo.

3

Una delle nuove funzionalità di Ice Cream Sandwich (Android 4.0) è keychain API. Dal Platform Highlights page (sottolineatura mia):

Android 4.0 rende più facile per le applicazioni per gestire l'autenticazione e sessioni protette. Una nuova API portachiavi e lo storage crittografato sottostante consentono alle applicazioni di archiviare e recuperare le chiavi private e le rispettive catene di certificati corrispondenti. Qualsiasi applicazione può utilizzare l'API portachiavi per installare e archiviare i certificati utente e le CA in modo sicuro.

+0

Conosci qualche tutorial/codice di esempio ?! Grazie. –

Problemi correlati