2015-10-01 14 views
6

Ho un'app Xamarin.Forms che utilizza un database SqLite locale come origine dei dati. I dati sono proprietari, quindi voglio proteggerli in modo che se qualcuno accede al file del database, dovrebbero decrittografarlo per accedere ai dati.Protezione dei dati proprietari locali in un'app Xamarin

Desidero anche limitare il numero di query che gli utenti possono eseguire sul database in modo che a un certo punto debbano acquistare la possibilità di utilizzare più dati (acquisto in-app).

Desidero evitare le chiamate di rete il più possibile per ridurre al minimo l'impatto sul piano dati dell'utente e consentire all'app di funzionare correttamente in condizioni di scarsa o inesistente connettività. Quindi, voglio i dati memorizzati in un database locale (forse in SqLite).

Sono curioso di come persone diverse si avvicinerebbero a questo problema per proteggere i dati e allo stesso tempo ridurre al minimo l'utilizzo della rete.

Ecco tipo di quello che pensavo (se è possibile):

1) Facciamo il download utente/installare l'applicazione.

2) Al primo caricamento, l'app carica una chiave in base all'id del dispositivo e alle informazioni di acquisto correnti dell'utente. Quindi scaricherà un file di database SqLite che è stato crittografato utilizzando la chiave caricata.

3) Quando l'utente raggiunge il limite di richieste, il file di database viene eliminato. Se acquistano più dati, viene caricata una nuova chiave e scaricato un nuovo database crittografato.

Pensieri? C'è un modo migliore?

+0

bella domanda, vediamo cosa altri diranno, se il database è memorizzato limitare localmente le query o la cancellazione del database non aiuta molto, credo, l'utente può trovare un modo per l'accesso il database senza aprire l'app ma decifrare l'intero database dovrebbe essere sufficiente – CDrosos

risposta

0

Come accennato CLB, SQLCipher è open source. Quindi, se non vuoi pagare il componente, puoi scaricarlo e creare la sorgente da solo, quindi avvolgerlo per l'uso in Xamarin. Questo è, certamente, un compito tecnicamente impegnativo.

Se questo non è un'opzione, mi sento di raccomandare altre due opzioni:

  1. rivalutare il vostro bisogno di memorizzare i dati in locale. È estremamente improbabile che sia necessario trasferire un numero sufficiente di dati per causare addirittura un blip sul piano dati di un utente. E tra cellulari e wifi, non è più così comune per gli utenti essere senza una connessione. Succede sicuramente, e ci sono alcune app in cui questo è molto importante, ma potresti dover fare delle concessioni se i dati sono così sensibili.

  2. Se è necessario memorizzare i dati localmente e non è possibile utilizzare SQLCipher, l'ultima opzione reale consiste nell'utilizzare una libreria di crittografia e crittografare i dati stessi, anziché il file di database. Questo è meno ideale, in genere, per una serie di motivi, ma potrebbe essere la tua ultima risorsa. PCL Crypt è una libreria di crittografia compatibile con PCL che puoi esaminare.

https://github.com/aarnott/pclcrypto

1

Suggerirei SQLCipher! Si tratta di un componente all'interno Xamarin (http://components.xamarin.com/view/sqlcipher-for-xamarin-ios), ma può anche essere costruito da fonte come è Open Source (https://www.zetetic.net/sqlcipher/open-source/)

che sarà totalmente garantire la sua base di dati :)

+0

I componenti Xamarin sono carini ma a $ 499 per piattaforma, questo è un prezzo pesante. Esiste un'opzione gratuita o meno costosa per i telefoni Android, ios e Windows? –

Problemi correlati