Assolutamente no. Tutto ciò che è memorizzato, trasmesso o elaborato da un dispositivo sotto il controllo di un'altra entità, può essere letto e modificato da quella parte. Ciò si applica in modo molto preoccupante a tutto ciò che viene fatto nella "nuvola", ma significa anche che qualsiasi utente della tua app può tecnicamente (anche se non necessariamente legalmente) disassemblare la tua app, modificare qualsiasi dato memorizzato, .... L'unico modo per fermarlo è archiviare tutti i dati sui tuoi server, ma questo potrebbe avere implicazioni di privacy negative per i tuoi utenti, in quanto espone l'utente agli stessi problemi di fiducia che hai nei tuoi utenti.
Una possibile mezza soluzione sarebbe quella di firmare digitalmente i valori di configurazione usando la crittografia pubblico-privato. Ciò consente di verificare che i dati non siano stati manomessi:
- la tua app modifica i valori di configurazione. Calcola un hash sicuro dei valori di configurazione.
- l'hash viene inviato al tuo server attraverso un canale sicuro. Il server lo firma con la propria chiave privata e restituisce una firma.
- la nuova configurazione viene archiviata con la firma sul dispositivo dell'utente.
- quando viene caricata la configurazione, viene calcolato l'hash. Deve corrispondere alla firma memorizzata quando si utilizza la chiave pubblica nota del proprio servizio.
Scenario di errore: un utente malintenzionato cambia la configurazione e firma con la propria chiave. Inoltre, modificano l'app per utilizzare una chiave pubblica fornita da loro, anziché la chiave del tuo server. Tecniche come il blocco dei certificati non funzioneranno perché l'attaccante può modificare la tua app.
Quindi, perché gli utenti non dovrebbero modificare la configurazione? Chiaramente, questo invalida qualsiasi garanzia per la corretta funzionalità dell'app, quindi la maggior parte delle persone non lo fa. Se la sicurezza del tuo servizio si basa sul fatto che l'app non venga manomessa, è una cosa negativa, per te e per tutti i tuoi utenti. Tutto ciò che non deve cadere nelle mani sbagliate non deve lasciare le mani, quindi non dare a tutti l'accesso mettendo i segreti su un app store. Questo è uno dei motivi per cui i servizi online si sono in gran parte allontanati dai segreti condivisi (come le password) e preferiscono invece i segreti transienti (token di sessione, token di utilizzo monouso per prevenzione 2FA o CSRF) e protocolli come OAuth per consentire un numero limitato -tracciare terze parti per accedere a una risorsa per conto di un proprietario di risorse, senza che il proprietario della risorsa debba rivelare i propri segreti.