Archivia i dati crittografati localmente sul telefono che decodifica l'app Android e iOS stessa

0

Ho un'app per iOS e Android dove la nostra "salsa segreta" è un mucchio di numeri (in realtà, i pesi) memorizzati in un database. La nostra app utilizza questi numeri per confrontare ciò che l'utente dell'app ha fornito e quindi fornisce un risultato.

Per dirla in un altro modo, un utente avvia l'app e fornisce all'app una serie di numeri basati su alcune domande. Confrontiamo i numeri dall'input dell'utente al nostro database di numeri "salsa segreta" e forniamo all'utente un risultato di confronto.

Esiste un modo per crittografare il database dei numeri di "salsa segreta" a cui è possibile accedere solo dall'app? Non è necessario che l'utente esegua l'autenticazione, solo l'app per l'autenticazione.

Una piccola ruga qui è che vorremmo essere in grado di aggiornare quel database di "salsa segreta" nel tempo, man mano che miglioriamo i dati.

    
posta MontanaProf 13.06.2016 - 17:23
fonte

2 risposte

2

Se l'app può accedere ai dati localmente (sul dispositivo dell'utente), può anche essere un individuo determinato. Se si vuole veramente mantenere i valori segreti, si potrebbe considerare che l'app invii l'input dell'utente a un server (che si controllerà) che memorizza entrambi i valori segreti e calcola il valore per l'utente. Il server dovrebbe quindi inviare il valore all'app per visualizzare.

Ciò migliorerebbe il tuo problema di aggiornamento in quanto potresti semplicemente aggiornare i valori dei server ogni volta che è richiesta una modifica.

Si noti che qualcuno potrebbe facilmente inviare numerosi input e associarli a output che, a seconda del tipo di calcoli eseguiti, potrebbero consentire loro di dedurre i valori segreti.

    
risposta data 13.06.2016 - 17:55
fonte
0

Ottima domanda e benvenuto nella mina terrestre della crittografia mobile! Sfortunatamente la risposta dipende in realtà da quale modello di iPhone / produttore Android verrà eseguito l'app. Ecco una piccola discarica di ciò che so. Spero che ti rimetta sulla buona strada!

Sia iOS che Android forniscono librerie crittografiche (crittografia) nel sistema operativo. Dovresti riuscire a google per i documenti abbastanza facilmente.

L'intoppo con qualsiasi crittografia basata su software sarà "dove memorizziamo la chiave di decodifica?". Ovviamente, la memorizzazione del database crittografato nello spazio di archiviazione dell'app, quindi l'archiviazione della chiave di decrittografia in un file proprio accanto ad esso è piuttosto inutile.

Sempre di più, i dispositivi mobili stanno iniziando a disporre di chip hardware sicuri per il keystore (spesso sotto forma di TPM , o ciò che Apple chiama "Secure Enclave") che rilascerà la chiave di decodifica all'app in modo sicuro. Di solito hanno molta flessibilità in termini di come / quando vengono rilasciati i tasti ("accessibile solo per 10 minuti dopo lo sblocco del dispositivo", "solo dopo l'accesso basato su password", ecc.)

Il problema è che queste tecnologie sono ancora molto nuove e in rapida evoluzione, quindi non tutti i dispositivi lo supportano ancora e quelli che non dispongono ancora di un set di funzioni / API coerente. È peggio su Android, ma c'è qualche incoerenza anche tra le versioni di Secure Enclave di Apple.

Android Marshmellow ha effettuato un'importante revisione della crittografia in modo che le chiavi private non debbano mai essere consegnate all'app, tutte le operazioni di crittografia / decrittografia possono essere eseguite all'interno del keystore protetto. Ma i dispositivi Android < 6.0 sono hit-and-miss.

Se decidi di seguire questa strada, la realtà è che dovrai rilevare la versione del sistema operativo (e forse il produttore) in fase di esecuzione e utilizzare un codice diverso in base a ciò che trovi. Probabilmente sarà un grande sforzo dev e un dolore nel sedere per il QA.

    
risposta data 13.06.2016 - 17:49
fonte

Leggi altre domande sui tag