2010-01-03 18 views
6

Uso un FPS incredibile e devo memorizzare la chiave segreta nel codice java. Tuttavia temo che qualcuno possa decompilare il mio apk e trovare la chiave. Ho decompilato l'apk da solo e non sono riuscito a trovare la chiave, ma non sono un esperto di VM. Qualsiasi aiuto?Tasto di memorizzazione Android, decompilazione della paura

+7

Non è possibile "davvero" impedire alle persone di decompilare qualsiasi programma. Il tuo modello di sicurezza dovrebbe tenerne conto. :-) –

+0

Se lo carico dal server web (la chiave), come faccio a garantire che la richiesta non possa essere fatta da nessun altro (supponendo che decompila) –

+0

http://en.wikipedia.org/wiki/Public-key_cryptography potrebbe essere utile per autenticare le richieste. –

risposta

8

Non è possibile inserire la chiave di crittografia nell'applicazione e aspettarsi che rimanga un segreto. Basta un determinato programmatore per decompilarlo e trovare la chiave, e possono condividerlo con il mondo.

La crittografia asimmetrica/chiave pubblica è esattamente la soluzione che si desidera. Crea una coppia di chiavi pubblica/privata, quindi inserisci la chiave pubblica nell'applicazione e mantieni la chiave privata. Poi si può fare due cose:

  • l'applicazione può cifrare un messaggio utilizzando la chiave pubblica, che possono essere decifrati solo con la chiave privata.
  • Oppure, è possibile firmare un messaggio utilizzando la chiave privata, che può essere autenticata utilizzando la chiave pubblica nell'applicazione.
+0

vero. ma se inserisci la chiave privata o la chiave pubblica nell'app, possono utilizzarla anche per decrittografare la chiave. –

+1

@Patrick Boos: Questo è proprio il punto della crittografia asimmetrica: non è possibile calcolare la chiave privata dalla chiave pubblica. Il modo in cui funziona è che * si cripta * sul proprio server, utilizzando la chiave privata (che non si condivide con nessuno, si trova solo sul server) e l'app sul client ha la chiave * public * con la quale può decifrare; inoltre, l'app sul client firma con la chiave * public * e il server verifica utilizzando la chiave privata. * Le chiavi pubbliche * sono destinate a essere condivise liberamente. – Piskvor

+0

@Piskvor Per essere sicuri, la crittografia a chiave pubblica richiede che le chiavi private vengano mantenute segrete. Ma cosa succede se qualcuno ha ricevuto una chiave privata memorizzata nell'applicazione (ad esempio decompilandola)? Poi lui o lei può ancora leggere tutti i dati segreti codificati con la chiave pubblica (esattamente come l'applicazione originale). C'è un modo per impedirlo? – Piotr

1

Un individuo abbastanza determinato sarà in grado di estrarre la chiave, e non c'è davvero molto che si possa fare al riguardo. Puoi tentare di offuscare in qualche modo i tasti (alzando la barra su quanto determinati devono essere), ma non puoi impedire loro di ottenere la chiave.

Tuttavia, a seconda del motivo per cui è necessario memorizzare la chiave segreta, è possibile utilizzare Asymmetric Key Cryptography. Sarai in grado di memorizzare una chiave pubblica che potrebbe essere limitata alla crittografia (non alla decrittografia) o ai fini dell'autenticazione, pur essendo in grado di mantenere la chiave privata al sicuro.

+1

La chiave pubblica è utile solo per la crittografia e la verifica della firma. –

Problemi correlati