Quale sarebbe un approccio valido per memorizzare le chiavi private?

0

Sto implementando un'app mobile che utilizza l'algoritmo di crittografia AES per crittografare alcuni valori critici inviati a un server remoto (in pratica, la password dell'utente) e quindi decrittografato sul lato server utilizzando la stessa chiave privata. Funziona perfettamente ora, ma sono un po 'preoccupato di come memorizzare / ottenere la chiave privata.

Al momento ho diviso la chiave privata (che è codificata) in 3 oggetti stringa e, quando necessario, li concatenò. Temo che non si tratti di una soluzione valida, poiché qualsiasi utente malintenzionato potrebbe semplicemente decodificare il file binario e con un po 'di pazienza ottenere le tre parti.

Le domande sono:

  • Quale sarebbe un buon approccio che almeno renderebbe difficile l'hacker a conoscere la chiave privata?

  • Sarebbe utile utilizzare una chiave privata in base a un evento (ad esempio, la data corrente) invece di memorizzarla?

posta nKn 10.03.2014 - 22:54
fonte

1 risposta

2

Invece di creare la tua soluzione AES, guarda TLS / SSL per crittografare la password inviata al server. Se costruisci la tua soluzione come ti proponi, chiunque crei la tua app sarà in grado di leggere tutte le password degli utenti (e se protegge denaro effettivo, le persone tenteranno di crackarlo.) TLS in modo sicuro scambia le chiavi con il server come parte del protocollo, risultando in un canale di comunicazione molto resistente alle intercettazioni.

Se hai qualche motivo reale per crittografare i dati localmente con AES (senza coinvolgere la comunicazione con il server), allora se stai costruendo la tua app per iOS dovresti utilizzare l'API portachiavi di Apple. Non sono sicuro di cosa sia l'equivalente di Android, ma credo che ce ne sia uno. Questo utilizza il supporto del livello OS per nascondere i tuoi dati segreti. È ancora vulnerabile all'hacking, ma dato che puoi renderlo casuale per utente, almeno un'interruzione su un dispositivo mobile non comprometterà la sicurezza di tutti i tuoi utenti.

Se non hai il supporto per il sistema operativo per la memorizzazione di una chiave, allora alla fine sei bloccato con una soluzione di oscuramento. Personalmente, avrei XOR diversi valori per costruire la chiave invece di concatenare frammenti di una stringa, ma se qualcuno eseguirà il debug dell'applicazione e lo scoprirà, lo scoprirà a prescindere. Ciò significa che non dovresti usare questo per proteggere qualsiasi segreto riguardante il denaro, i conti, la finanza, la salute, il credito, la pensione o altri documenti del cliente che dovrebbero essere adeguatamente protetti. In altre parole, questo potrebbe andare bene per un gioco che non coinvolge il portafoglio dei clienti (o il tuo portafoglio, se è per questo).

    
risposta data 10.03.2014 - 23:17
fonte

Leggi altre domande sui tag