2010-08-09 5 views
6

Ho bisogno di inviare dati dalla mia applicazione iPhone al mio server web, e ritorno. Per fare questo in sicurezza, sto usando un algoritmo di crittografia. Richiede una chiave che deve essere conosciuta sia dal server che dall'utente in modo tale che possa avvenire la decrittografia. Stavo pensando di usare solo una semplice stringa statica nella mia app e sul server come chiave, ma poi ho ricordato che il codice compilato può ancora essere disassemblato e visualizzato, ma solo in una certa misura.Si può scoprire una stringa "segreta" in un'app Obj-C compilata?

Quindi, quanto sarei sicuro posizionando i metodi di crittografia e la stringa "segreta" nel codice sorgente della mia app? Esistono altri modi per realizzare comunicazioni tra un'app e un server in modo sicuro?

Grazie.

risposta

6

Sì, può essere trovato piuttosto facilmente. Esegui il programma strings sul tuo eseguibile e probabilmente lo troverai. Inoltre, qualsiasi cosa nel tuo programma può essere "trovata", poiché è necessariamente aperta per la lettura.

Utilizzare SSL per connessioni sicure. Utilizza la crittografia asimmetrica, il che significa che la chiave per crittografare i dati non è la stessa che sarà richiesta per decrittografarla. In questo modo, anche se gli hacker scoprono la tua chiave di crittografia, non possono ancora utilizzarla per decodificarla. Tutti i principali server HTTP e librerie client supportano HTTPS, e questo è quello che fa.

+0

Grazie, SSL sembra il modo più semplice per implementare ancora più sicuro, dopo aver osservato come funzionano gli algoritmi non asimmetrici ... – pop850

+0

è possibile che un hacker scarichi stringhe internamente quando è in esecuzione un'app? Se è così, c'è un modo per proteggersi dal fare questo? – vinnybad

+0

@vinnybad, in genere è possibile scaricare tutta la memoria di un programma e scansionarlo, e non esiste un modo sicuro per prevenirlo. – zneak

4

Quale "certa misura" credi che sia esattamente? Tutte le istruzioni e tutti i dati contenuti nella tua applicazione sono aperti alla possibile visualizzazione. Inoltre, l'uso della stessa chiave per ogni dispositivo è il massimo in termini di follia crittografica.

Basta usare HTTPS. SSL/TLS è una tecnologia sicura e collaudata incorporata in tutti i principali server HTTP e in tutte le principali librerie client HTTP.

2

Si utilizza un algoritmo simmetrico. Forse dovresti considerare di avere un metodo asimmetrico se hai bisogno di una sicurezza elevata. In questo modo puoi persino ricreare le chiavi ad ogni sessione e devi solo scambiare la chiave pubblica.

Ecco alcuni esempi:

  • RSA
  • Diffie-Hellman
  • ElGamal
  • ECDSA
  • XTR
0

Come altri hanno detto, ciò che si sta proponendo è completamente insicuro. Se a qualcuno interessa la tua app, pubblicheranno la chiave segreta su Internet entro 10 minuti dalla sua uscita.

cose che dovete ricerca sono:

  1. algoritmi di crittografia Asymetric
  2. Diffie-Hellman Key Exchange

(Nota - non sto dicendo queste sono la soluzione al vostro problema, ma imparandoti su di loro ti istruirò sulle questioni coinvolte e prepararti meglio a scegliere una soluzione)

In una nota aggiuntiva, perché non puoi usare solo un Connessione HTTPS?

Infine, se questo schema di crittografia sta proteggendo i dati critici, è probabile che tu sia in grado di assumere un consulente per aiutarti, dato che come novizio del soggetto, sei sicuro di fare degli errori di base.

1

iOS dispone di servizi Keychain per archiviare cose come chiavi di crittografia in modo sicuro e (relativamente) facilmente. Controlla Keychain Services Programming.

Tutte le API crittografiche di cui si ha probabilmente bisogno sono anche disponibili nella libreria CommonCrypto inclusa in libSystem. In breve, non è necessario prendere scorciatoie quando si tratta di proteggere le tue applicazioni iOS.

Problemi correlati