Protezione dei dati sull'app Android utilizzando un PIN di 6 cifre

5

Diciamo che su un'app Android l'utente deve inserire un PIN di 6 cifre all'avvio. Diciamo anche che abbiamo alcuni dati sensibili in questa applicazione che vorremmo criptare.

Il modo in cui farei questo è:

  • Usando una funzione di derivazione della chiave (ad esempio PBKDF2), generiamo una chiave dal PIN.
  • Cifra i dati sensibili con AES usando il tasto (e una configurazione decente come CBC + padding).
  • Archivia i dati crittografati ovunque, ad es. nelle preferenze condivise.

Il problema principale che vedo qui: lo spazio PIN originale per un PIN a 6 cifre è 10 ^ 6, che è ridicolmente piccolo da utilizzare come base per la crittografia ...

Possiamo davvero mettere a punto questo in modo che i dati memorizzati siano ragionevolmente sicuri per un po '?

Anche se modifichiamo il nostro KDF in modo tale che una derivazione semplice impieghi 1 secondo (non penso che possiamo aspettarci che i nostri utenti attenderanno molto più a lungo durante l'avvio dell'app), quindi il superamento di 1'000'000 di questi richiede semplicemente 11,5 giorni (assumendo la stessa potenza di elaborazione del telefono, che non è probabile ...).

Restrictions:
Obviously using a longer/stronger PIN would help - but regretfully even just a 6-digit PIN is seen as a hurdle by users, so this isn't likely an option. Also the KDF strength is limited by the amount of time we can expect the users to wait during app start, which I'd say is in the order of magnitude of 1 second.

    
posta fgysin 20.04.2017 - 10:52
fonte

2 risposte

1

La mia opzione raccomandata sarebbe quella di memorizzare i dati, o almeno di archiviarli sul lato server chiave.

Dato che questo non è possibile per te, lo riporterei alla direzione che ci sono requisiti in conflitto. Direi che lo spazio delle chiavi è troppo piccolo perché la crittografia possa fornire un valore reale. Suggerirei di dare alla gestione una stima del mondo reale di 156 ipotesi al secondo (da questo articolo link ), il che significherebbe che un cracker avrebbe tutti i risultati possibili entro due ore. L'hardware di cracking personalizzato sarà molto più veloce di un dispositivo mobile. Vedi qui per un esempio: link .

Informerei la direzione che il requisito offline con uno spazio delle chiavi così piccolo precluderebbe adeguatamente la protezione dei dati. Se vogliono che i dati siano sicuri, dovranno o spostarsi sul pin a 6 cifre, o dovranno spostarsi sul requisito offline.

    
risposta data 24.04.2017 - 16:32
fonte
1

Il codice PIN non deve essere considerato un token di sicurezza. È solo una cosa dell'interfaccia utente e, in quanto tale, è possibile limitare il numero di tentativi non riusciti di inserirla e / o introdurre attese incrementali tra tali tentativi.

I dati stessi possono (e dovrebbero) essere crittografati con una chiave strong. Questo protegge i dati locali dal cracking offline (agente malintenzionato che tenta di leggere il disco direttamente). Su Android 7.0 e versioni successive, puoi fare affidamento su Avvio diretto . La tua app può controllare Stato crittografia archiviazione e comportarsi di conseguenza.

Questo non fornisce una protezione completa da parte di utenti malintenzionati che installano la tua app su un dispositivo rooted e vogliono decifrare i loro dati. Siete sicuramente incoraggiati a verificare se il dispositivo è stato rootato, ma dovete sapere che un determinato agente (utente o malware) può abilitare root che l'ispezione non rileverà.

    
risposta data 19.02.2018 - 12:19
fonte

Leggi altre domande sui tag